Ich will ein Programm schreiben, das nach Namen sucht die man vorher in ein Array abgelegt hat. Soweit bin ich gekommen:
Java:
publicclassProgramm2{publicstaticvoidmain(String[]args){String eingabe2 ="";String eingabe ="";String n = javax.swing.JOptionPane.showInputDialog("Geben Sie die Länge des String-Arrays ein:");int zahl =Integer.parseInt(n);String[] feld;
feld =newString[zahl];for(int i =0; i < feld.length; i++){
eingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie "+zahl+" Wörter ein");
feld[i]= eingabe;}
eingabe2 = javax.swing.JOptionPane.showInputDialog("Geben Sie einen Namen ein, der im Array gesucht werden soll:");for(int j =0; j < feld.length; j++){if(feld[j].equals(eingabe2)){
javax.swing.JOptionPane.showMessageDialog(null," Der Name ist an der "+(j+1)+"ten Stelle im Array vorhanden.");}}}}
Nun will ich, dass das Programm mir mitteilt wenn ein Name nicht vorhanden ist. Ich habe das mit else if versucht doch dann kamen nur Fehler. Wie kann ich das bewerkstelligen?
um herauszufinden ob der name im gesamten array nicht vorhanden ist, musst du dieses logischerweise erst einmal komplett durchlaufen haben. Außerdem bietet es sich an, das ganze in eine methode auszulagern:
Falls der name also existiert wird die position zurück gegeben und falls das array durchlaufen wurde, ohen den namen zu finden, so wird -1 zurückgegeben.
Vielen Dank für deine Hilfe. Doch das ist für mich noch sehr kompliziert.
Ich habe das wie folgt versucht:
Java:
publicclassProgramm2{publicstaticvoidmain(String[]args){String eingabe2 ="";String eingabe ="";String n = javax.swing.JOptionPane.showInputDialog("Geben Sie die Länge des String-Arrays ein:");int zahl =Integer.parseInt(n);String[] feld;
feld =newString[zahl];for(int i =0; i < feld.length; i++){
eingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie "+zahl+" Wörter ein");
feld[i]= eingabe;}
eingabe2 = javax.swing.JOptionPane.showInputDialog("Geben Sie einen Namen ein, der im Array gesucht werden soll:");for(int j =0; j < feld.length; j++){if(feld[j].equals(eingabe2)){
javax.swing.JOptionPane.showMessageDialog(null," Der Name ist an der "+(j+1)+"ten Stelle im Array vorhanden.");}else{
javax.swing.JOptionPane.showMessageDialog(null,"Der Name ist nicht vorhanden");}}}}
Wenn ich das so mache, zeigt er mir mehrmals an "Der Name ist nicht vorhanden". Könntest Du mir vielleicht zeigen, wie das mit der else Anweisung funktioniert?
Ich hab es jetzt mit der break Anweisung probiert. Es sieht wie folgt aus:
Java:
publicclassProgramm2{publicstaticvoidmain(String[]args){String eingabe2 ="";String eingabe ="";String n = javax.swing.JOptionPane.showInputDialog("Geben Sie die Länge des String-Arrays ein:");int zahl =Integer.parseInt(n);String[] feld;
feld =newString[zahl];for(int i =0; i < feld.length; i++){
eingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie "+zahl+" Wörter ein");
feld[i]= eingabe;}
eingabe2 = javax.swing.JOptionPane.showInputDialog("Geben Sie einen Namen ein, der im Array gesucht werden soll:");for(int j =0; j < feld.length; j++){if(feld[j].equals(eingabe2)){
javax.swing.JOptionPane.showMessageDialog(null," Der Name ist an der "+(j+1)+"ten Stelle im Array vorhanden.");}else{
javax.swing.JOptionPane.showMessageDialog(null,"Der Name ist nicht vorhanden");break;}}}}
Es funktioniert. Ich werde Deine Variante auch noch ausprobieren. Danke für Deine Hilfe.
Du durchläufst deine Schleife ohne bei einem Treffer abzubrechen.
Bsp.:
Dein gesuchtes Element befindet sich in der Mitte. Dann findest du es irgendwann, läufst in der Schleife aber weiter und bekommst dann die Meldung, dass das Element nicht vorhanden ist. Es ist erforderlich im Erfolgsfall die Schleife abzubrechen.
publicclassProgramm2{publicstaticvoidmain(String[]args){String eingabe2 ="";String eingabe ="";String n = javax.swing.JOptionPane.showInputDialog("Geben Sie die Länge des String-Arrays ein:");int zahl =Integer.parseInt(n);boolean gefunden =true;String[] feld;
feld =newString[zahl];for(int i =0; i < feld.length; i++){
eingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie "+zahl+" Wörter ein");
feld[i]= eingabe;}
eingabe2 = javax.swing.JOptionPane.showInputDialog("Geben Sie einen Namen ein, der im Array gesucht werden soll:");for(int j =0; j < feld.length; j++){if(feld[j].equals(eingabe2)){
javax.swing.JOptionPane.showMessageDialog(null," Der Name ist an der "+(j+1)+". Stelle im Array vorhanden.");break;}}}}
nun möchte ich dort noch irgendwie eine Funktion reinbringen, dass wenn ein Name nicht gefunden wird, ebenfalls eine Meldung ausgegeben wird. Ich kann das aber irgendwie nicht reinimplementieren :/
ich würde weiterhin empfehle ndas so machen wie ich oben beschrieben habe, ansonsten kannst du auch mit einem boolean arbeiten.
dieser wert vor der schleife auf false gesetzt, wenn innerhalb der schleife der name gefunden wird, setzt du die variable auf true.
Wenn die Schleife also durchlaufen wurde und der boolean dennoch false ist, so wurde kein name gefunden
ich habe jetzt das gemacht was du gesagt hast und es funktioniert tatsächlich:
Java:
publicclassProgramm2{publicstaticvoidmain(String[]args){String eingabe2 ="";String eingabe ="";String n = javax.swing.JOptionPane.showInputDialog("Geben Sie die Länge des String-Arrays ein:");int zahl =Integer.parseInt(n);boolean gefunden =false;String[] feld;
feld =newString[zahl];for(int i =0; i < feld.length; i++){
eingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie "+zahl+" Wörter ein");
feld[i]= eingabe;}
eingabe2 = javax.swing.JOptionPane.showInputDialog("Geben Sie einen Namen ein, der im Array gesucht werden soll:");for(int j =0; j < feld.length; j++){if(feld[j].equals(eingabe2)){
javax.swing.JOptionPane.showMessageDialog(null," Der Name ist an der "+(j+1)+". Stelle im Array vorhanden.");
gefunden =true;break;}
javax.swing.JOptionPane.showMessageDialog(null,"Nicht vorhanden");break;}}}
Die Frage ist nur wieso es funktioniert ... ich versteh das nicht. Kannst du mir das nochmal erläutern? Wieso sorgt das gefunden = true, dafür, dass der Rest des Programms, also die Ausgabe "nicht vorhanden" nicht mehr durchlaufen wird?
Danke für deinen Hinweis. Ich werde es gleich ausprobieren. Ich glaube ich versteh es jetzt: Wenn das gefunden gleich true ist, dann wird der untere if Block garnicht mehr ausgeführt weil da false drin steht. Ist das richtig?