Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Newbie hat Probleme mit Schleife



kaptain iglo
29-03-2009, 11:13
Hi,
ich habe folgende Aufgabe zu lösen:
Eingabe von 6 Zahlen. Es muss bei jeder Eingabe geprüft werden ob die Zahl schon eingeben wurde. Wenn ja, muss eine andere Zahl eingeben werden.
Ich habs jetzt so gelöst, bin aber auf einen Denkfehler gestossen.
Wenn ich mit dem Code unten eine doppelte Zahl eingebe, komme ich in die Schleife zur Aufforderung zur Eingabe einer anderen Zahl. Dort verbleibe ich so lange bis ich eine andere Zahl eingegeben habe. Was hier aber nicht überprüft wird ob diese eingegebene Zahl schon vorher eingegeben wurde.
Aber irgendwie kann ich da so gar nicht lösen (?), weil sich hier die Katze immer in den Schwanz beißt.
Hat mir jemand einen anderen Lösungsansatz?



import java.util.Scanner;

public class Eingabe
{
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in);
int i;
int z;
int[]zahlen = new int[5];

// Zahleneingabe
for(i=0; i<zahlen.length;i++)
{
System.out.print("Bitte geben Sie die " +(i+1) + ". Zahl ein: ");
zahlen[i] = sc.nextInt();

// Durchlaufe die Schleife und Prüfe
// System.out.println("Aktueller Zähler: "+i);
for(z=0;z<i;z++)
{
if(zahlen[i]==zahlen[z])
{
do
{
System.out.println("Meldung: die " +zahlen[i] +" ist bereits eingegeben worden");
System.out.print("Bitte geben Sie die " +(i+1) + ". Zahl ein: ");
zahlen[i] = sc.nextInt();
}
while(zahlen[i]==zahlen[0]);
}

}

}
}
}

anda_skoa
29-03-2009, 14:56
Vorerst einmal: dein Array ist mit 5 Elementen zu kurz für 6 Zahlen.

Zum eigentlichen Problem:

Betrachte den Fall, dass eine Zahl zum zweiten Mal eingegeben wird nicht als Verzweigung, sondern nur als weiteren Fall die Schleife neu zu durchlaufen.

Da du in diesem Fall dann eine Wiederholung am selben Index haben willst, darfst du den Index nicht erhöhen, d.h. statt einer for-Schleife mit Erhöhung nach jedem Durchlauf zum Beispiel eine while-Schleife und nur bei erfolgreicher Eingabe den Index erhöhen.

In Pseudo Code in etwas



if (zahl schon vorhanden)
fehlermeldung
else
i++


Ciao,
_

kaptain iglo
29-03-2009, 15:20
Vielen Dank für die Antwort.
Es sollen nur 5 Zahlen eingeben werden. Hab mich da verschrieben.

Seit habe ich den Lösungsansatz verstanden.
Gibt es da noch einen alternative Weg?