Hallo @all,
ich habe ein Programm geschrieben, dass Gleitkommazahlen vom Nutzer einliest (über java.util.scanner), diese in einem Array speichert und anschließend das Array durchläuft und prüft, ob die eingegebenen Zahlen aufsteigend sortiert sind. Der Nutzer beendet die Eingabe entweder vorzeitig durch Eingabe eines nichtnumerischen Wertes oder es wird automatisch nach 8 Zahlen abgebrochen.
Das Ganze funktioniert auch wunderbar, solange der Nutzer seine Zahlen durch RETURN trennt. Wenn man allerdings Leerzeichen als Trennung verwendet (was der Scanner ja trotzdem als separate Eingaben erkennt), wird das Einlesen nicht automatisch nach 8 Eingaben beendet.
Hier mal der Code zur Verdeutlichung:
Das Problem tritt irgendwie in der while-Schleife auf... Seltsamerweise greift die Abbruchbedingung, wenn man mehr als 8 per Leerzeichen getrennte Zahlen eingibt und er liest auch wirklich nur die ersten 8 Zahlen ins Array. Dh. die while-Schleife wird danach nicht mehr ausgeführt, aber er springt aus irgendeinem Grund nicht zur nächsten Anweisung... Der Nutzer kann also fröhlich locker weiter Zahlen eingeben, bis er schließlich irgendwann ein nichtnumerisches Zeichen oder RETURN eingibt.
Vielleicht kann mir jemand einen Tipp geben?
viele grüße,
sara
ich habe ein Programm geschrieben, dass Gleitkommazahlen vom Nutzer einliest (über java.util.scanner), diese in einem Array speichert und anschließend das Array durchläuft und prüft, ob die eingegebenen Zahlen aufsteigend sortiert sind. Der Nutzer beendet die Eingabe entweder vorzeitig durch Eingabe eines nichtnumerischen Wertes oder es wird automatisch nach 8 Zahlen abgebrochen.
Das Ganze funktioniert auch wunderbar, solange der Nutzer seine Zahlen durch RETURN trennt. Wenn man allerdings Leerzeichen als Trennung verwendet (was der Scanner ja trotzdem als separate Eingaben erkennt), wird das Einlesen nicht automatisch nach 8 Eingaben beendet.
Hier mal der Code zur Verdeutlichung:
Java:
// VORBEREITUNG
double[] zahlenfolge = new double[8];
int anzahl = 0;
double vorigeZahl = Double.MIN_VALUE, aktuelleZahl;
boolean istSortiert = true;
java.util.Scanner s = new java.util.Scanner(System.in);
// Anfangsmeldung
System.out.println("<A2: Pruefung auf aufsteigende Sortierfolge>\n"
+ " max. 8 Gleitkommazahlen Zahlen eingeben, "
+ "nichtnumerische Eingabe ist Eingabeende");
// HAUPTTEIL
// Einlesen
while ((anzahl < zahlenfolge.length) && s.hasNextDouble()) {
zahlenfolge[anzahl] = s.nextDouble();
anzahl++;
}
System.out.println("Es wurden " + anzahl + " Zahlen eingelesen.");
// Auswerten
// Pruefen auf sortierte Zahlenfolge wenn mind. 1 Zahl eingegeben wurde
if(anzahl != 0){
for(int i = 0; i < anzahl; i++) {
aktuelleZahl = zahlenfolge[i];
if (vorigeZahl > aktuelleZahl) istSortiert = false;
vorigeZahl = aktuelleZahl;
}
// Ausgabe
System.out.print("Die Zahlenfolge ist ");
if (!istSortiert) System.out.print("NICHT ");
System.out.println("aufsteigend sortiert.");
}
else System.out.println("Bitte geben Sie mindestens eine Zahl ein.");
Das Problem tritt irgendwie in der while-Schleife auf... Seltsamerweise greift die Abbruchbedingung, wenn man mehr als 8 per Leerzeichen getrennte Zahlen eingibt und er liest auch wirklich nur die ersten 8 Zahlen ins Array. Dh. die while-Schleife wird danach nicht mehr ausgeführt, aber er springt aus irgendeinem Grund nicht zur nächsten Anweisung... Der Nutzer kann also fröhlich locker weiter Zahlen eingeben, bis er schließlich irgendwann ein nichtnumerisches Zeichen oder RETURN eingibt.
Vielleicht kann mir jemand einen Tipp geben?
viele grüße,
sara