In Arrayfeld schreiben wenn leer

deen

Mitglied
Hallo Liebe Community,
ich finde einfach keine Lösung für mein momentanes Problem.
Und zwar möchte ich prüfen, ob ein Array Feld leer ist und wenn ja soll dort die Eingabe gespeichert werden.
Damit wenn sich in meinem Programm ein neuer Benutzer anmeldet die Daten nicht einfach in Feld 0 und somit der erste Nutzer überschrieben werden.

Mein Lösungsversuch sieht wie folgt aus:
Java:
 for (int i = 0; Benutzer.user[i]!= "null"; i++) {
				Benutzer.user[i]=JOptionPane.showInputDialog(null, "Wählen Sie Ihren Benutzernamen: ", "Registration", 1);
				if (Benutzer.user[i].trim().length()==0 || Benutzer.user[i]== null ) {	
					JOptionPane.showMessageDialog(null,"Sie müssen mindestens 2 Zeichen eingeben!","Error",1);
				}else {
					Benutzer.password[i]=  (int)((Math.random()) * 9999 + 1);
					JOptionPane.showMessageDialog(null, "Der Benutzer "+Benutzer.user[i]+" wurde erstellt und das Passwort "+Benutzer.password[i]+" generiert. \n                                              Viel Erfolg!", "Registration", 1);
				JOptionPane.showMessageDialog(null, Benutzer.user[0]+Benutzer.user[1]+Benutzer.user[2]+Benutzer.user[3]); //Um zu testen obs klappt
				}
				
			}
 
Zuletzt bearbeitet:
Der Kopf deiner for-Schleife ist schon falsch deklariert.
null ist eine eigene Referenz und darf nicht als string geschrieben werden. Ansonsten wird geprüft, ob in dem Feld ein string mit Inhalt "null" steht. Außerdem prüft du momentan, ob das Feld _nicht_ null ist, d.h., ob in dem Feld schon irgendwelche Daten stehen.

Der zweite Abschnitt bezeichnet die Bedingung, also "Wenn..." bzw. "Solange...", üblicherweise steht dort sowas wie i<= array.length

Ich würde das mit einer if-Abfrage verbinden:
Java:
for(int i = 0; i<Benutzer.user.length; i++){
if(Benutzer.user[i] == null){
//neue Registrierung
}

}

//bzw. als for-each-Schleife:
for(String s : Benutzer.user){
if(s == null){
//neue Registrierung
}

}

btw, könntest du bitte die Benutzer-Klasse posten? Benutzer.user und Benutzer.password sieht etwas seltsam aus.
 
Zuletzt bearbeitet:
Es funktioniert leider immer noch nicht wie gewünscht. Also noch mal er soll prüfen, ob in Platz 1 schon ein Account ist und wenn nicht darf er da schreiben sonst muss er den nächsten Prüfen. Analytisch ist euer Lösungsvorschlag richtig, jedoch überschreibt er immernoch jedes mal den ersten Platz(Array Feld).
Ich habe mehrere Möglichkeiten probiert, meine jetzige ist diese:

Java:
import java.io.File;
import java.io.FileWriter; 
import java.io.IOException;
import java.io.PrintWriter;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.ImageIcon;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JPasswordField;
import javax.swing.JTextPane;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JMenuBar;
import javax.swing.JOptionPane;



public class Login_frame extends JFrame {
	
   
  //Variablen 
  private JPanel contentPane;
  private JPasswordField txtpassword;
  ImageIcon icon;

  static Login_frame frame;
  static boolean access=false,access1=false;
  static int falsepwcounter=4,counter=0,usercounter=1;
  static String newuser;
  static int newpassword;
  
  

 


  public static void main(String[] args) {
	 
	  Benutzer.user[0]="Dennis";
	  Benutzer.password[0]=1337;
	  //Zum Testen, später aus datei laden
	  for(int i = 0; i<Benutzer.user.length; i++){
		  Benutzer.user[i]="leer";
	  }
    EventQueue.invokeLater(new Runnable() {
      public void run() {
    	counter=0;  
        try {
          frame = new Login_frame();
          frame.setLocationRelativeTo(null);
          frame.setTitle("Mini ERP - Login");
          frame.setVisible(true);
     
        } catch (Exception e) {
          e.printStackTrace();
        }
        
      }
    });
  }

  /**
   * Frame
   */
  public Login_frame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    
    
    
    JLabel lblLoginBereich = new JLabel("Snackalicious Login");
    lblLoginBereich.setFont(new Font("Yaquote Script Personal Use", Font.PLAIN, 45));
    lblLoginBereich.setIcon(null);
    lblLoginBereich.setToolTipText("");
    lblLoginBereich.setBounds(99, 0, 325, 83);
    contentPane.add(lblLoginBereich);
    
    final JTextArea txtuser = new JTextArea();
    txtuser.setBounds(237, 72, 74, 22);
    contentPane.add(txtuser);
    
    txtpassword = new JPasswordField();
    txtpassword.setBounds(237, 105, 74, 20);
    contentPane.add(txtpassword);
    
    JLabel lblBenutzer = new JLabel("Benutzer:");
    lblBenutzer.setToolTipText("");
    lblBenutzer.setFont(new Font("Arial Black", Font.PLAIN, 13));
    lblBenutzer.setBounds(99, 71, 75, 22);
    contentPane.add(lblBenutzer);
    
    JLabel lblPasswort = new JLabel("Passwort:");
    lblPasswort.setToolTipText("");
    lblPasswort.setFont(new Font("Arial Black", Font.PLAIN, 13));
    lblPasswort.setBounds(99, 102, 75, 22);
    contentPane.add(lblPasswort);
    
    JButton btnLogin = new JButton("Login");
    btnLogin.addActionListener(new ActionListener() {
      @SuppressWarnings("deprecation")
	public void actionPerformed(ActionEvent arg0) { 
    	  counter=0;
    	  do {  
    	  if (txtuser.getText().equals(Benutzer.user[counter]) && Integer.parseInt(txtpassword.getText())==Benutzer.password[counter]) {
    	  access=true;
          JOptionPane.showMessageDialog(null,"Herzlich willkommen "+Benutzer.user[counter], "Anmeldung erfolgreich!",1 );
          menu.main(null);
          frame.dispose();
          }
    	  
          if (counter==Benutzer.user.length-1){
          JOptionPane.showMessageDialog(null,"Benutzername oder Passwort falsch!\n Noch "+(falsepwcounter-1)+" Versuche verbleibend!", "Error!", 1);
          falsepwcounter--;
          frame.setVisible(false);
          Login_frame.main(null);
          }
          
          if (falsepwcounter==0){
          System.exit(0);
          }
          counter++;
    	  }while(access==false && counter<100);
      }

	
    });
    btnLogin.setBounds(236, 136, 75, 23);
    contentPane.add(btnLogin);
    

    
    JLabel lblNewLabel = new JLabel("by Dennis Dierkes");
	lblNewLabel.setFont(new Font("Yaquote Script Personal Use", Font.PLAIN, 30));
	lblNewLabel.setBounds(285, 225, 174, 40);
	contentPane.add(lblNewLabel);
	
	JButton btnNeuerBenutzer = new JButton("Neuer Benutzer");
	btnNeuerBenutzer.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			int i = 0;
			for(String s : Benutzer.user){
				if(Benutzer.user[i] == null){
					Benutzer.user[i]=JOptionPane.showInputDialog(null, "Wählen Sie Ihren Benutzernamen: ", "Registration", 1);
					if (Benutzer.user[i].trim().length()==0 || Benutzer.user[i]== null ) {	
						JOptionPane.showMessageDialog(null,"Sie müssen mindestens 2 Zeichen eingeben!","Error",1);
						
					}else {
						Benutzer.password[i]=  (int)((Math.random()) * 9999 + 1);
						JOptionPane.showMessageDialog(null, "Der Benutzer "+Benutzer.user[i]+" wurde erstellt und das Passwort "+Benutzer.password[i]+" generiert. \n                                              Viel Erfolg!", "Registration", 1);
						JOptionPane.showMessageDialog(null, Benutzer.user[0]+Benutzer.user[1]+Benutzer.user[2]+Benutzer.user[3]);
						break;
					}
					i++;
				}
			
				
				
				}
			
		}
	});
	btnNeuerBenutzer.setBounds(99, 136, 127, 23);
	contentPane.add(btnNeuerBenutzer);
    
  }
}

Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Timestamp;
import java.text.*;


public class Benutzer {
	static int[]password = new int[100];
    
	static int[] worktime=new int[100];
	static int[] sells=new int[100];
	static String[] user = new String[100];
	static double[] earned=new double[100];	
 }
 
Ich habe mit den Code mal genauer angeschaut.
Offenbar geht es um den Code, der im ActionListener des JButtons "Neuer Benutzer" steht.
So wie der Code da steht, dürfte gar nix sinnvolles passieren:
1. Du gehst über alle Benutzer, verwendest due Schleifenbariable s aber gar nicht.
2. In jedem Schleifendurchgang überprüfst du, ob Benutzer == null ist. Diese Bedingung ist aber nie erfüllt, weil Benutzer.user[0] gleich "Dennis" ist und alle weiteren "leer". Deshalb erspare ich mir eine Diskussion der Dinge, die in der Schleife passieren.
Wenn du deinen Code laufen lässt: wird bei Klick auf den "Neuer Benutzer" ein Dialog angezeigt?
Entweder mein Verständnis von dem Code ist falsch, oder deine Fehlerbeschreibung "jedoch überschreibt er immernoch jedes mal den ersten Platz(Array Feld)" sehr irreführend.

Wie ich so eine Schleife aufsetzen würde:
Java:
for(int i = 0; i < Benutzer.user.length; i++){
    if(platzInBenutzer.user[i]IstVerfügbar){
        //Userdaten abfragen und eintragen
        //For-Schleife verlassen oder einen Abfragedialog anzeigen, ob ein weiterer User angelegt werden soll
    }
}
 
Vielen Dank für eure Bemühungen. Einer meiner ersten Lösungsversuche war bereits richtig.
Ich weiß nicht warum, aber eclipse hat immer die alte .java Datei angezeigt, jedoch wurde das Programm in Java-Editor ohne Probleme ausgeführt.

Code sieht jetzt so aus:

Java:
	for(int i = 0; i < Benutzer.user.length; i++){
				if(Benutzer.user[i] == null){
					Benutzer.user[i]=JOptionPane.showInputDialog(null, "Wählen Sie Ihren Benutzernamen: ", "Registration", 1);
					if (Benutzer.user[i].trim().length()==0 || Benutzer.user[i]== null ) {	
						JOptionPane.showMessageDialog(null,"Sie müssen mindestens 2 Zeichen eingeben!","Error",1);
						
					}else {
						Benutzer.password[i]=  (int)((Math.random()) * 9999 + 1);
						JOptionPane.showMessageDialog(null, "Der Benutzer "+Benutzer.user[i]+" wurde erstellt und das Passwort "+Benutzer.password[i]+" generiert. \n                                              Viel Erfolg!", "Registration", 1);
						JOptionPane.showMessageDialog(null, Benutzer.user[0]+Benutzer.user[1]+Benutzer.user[2]+Benutzer.user[3]);
						break;
					}
					
				}
 
Vielen Dank für eure Bemühungen. Einer meiner ersten Lösungsversuche war bereits richtig.
Ich weiß nicht warum, aber eclipse hat immer die alte .java Datei angezeigt, jedoch wurde das Programm in Java-Editor ohne Probleme ausgeführt.
Sowas sollte natürlich unbedingt vermieden werden. Wenn der Code, der Probleme verursacht, und der Code, der gepostet wird, nicht identisch sind, zerbrechen sich Leute ihren Kopf vollkommen umsonst.
Zu deinem neuen Codeschnipsel: ist das Problem jetzt gelöst? Sofern deine main-methode noch mit der oben geposteten übereinstimmt, sollte nach wie vor beim Klick auf den "Neuer Benutzer" Button nix passieren, weil die Bedingung "Benutzer.user == null" nie erfüllt ist.
Ausserdem würde ich dich bitten, in Zukunft beim Posten von Code auf die Einrückungen zu achten.
So etwas
Java:
package mypackage;

/**
 *
 * @author Harry
 */
                public class Bla {
                                    public static void main(String[] args){
                                                if(args.length > 0){
                                                            for(String s: args){
                                                                                        JOptionPane.showMessageDialog(null,"Der Titel dieses Dialogs ist so lang, daß der Code nicht mehr ohne scrollen sichtbar ist","Information",1);                                                            }
                                                }

                                    }
                    }
macht keine Lust zu lesen.
 
[...]So etwas [...] macht keine Lust zu lesen.
Nun, der Benutzer hat auf die Einrückung geachtet - nur werden bei ihm Tabstops verwendet, die hier zu Blanks aufgelöst werden.
(Und zusätzlich hat er wohl eingestellt, dass ein Tabstop 2 Positionen/"Blanks" einrücken soll, und er verwendet immer 2 Tabs, um 4 "Blanks" einzurücken. Hießiger Editor expandiert die 2 Tabs dann in 2* 8 "Blanks"...)

Ähm, hallo, Moderator? Kann man hießigen Editor so umstellen, dass er aus Tabstops nicht 8, sondern nur 4 (oder noch besser 2) "Blanks" macht?
 

Zurück
Oben