Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo allerseits
Bei einer Aufgabe aus dem Studium komm ich nicht mehr weiter. In der Aufgabe geht es darum für jeden Wert (der vom Benutzer eingegeben wird) innerhalb eines Intervalles einen Stern auszugeben:
Intervall 0 (1-9)
Intervall 1 (10-19)
Intervall 2 (20-29)
Intervall 3 (30-39)
Intervall 4 (40-49)
Bei meiner Ausgabe füge ich je 3 Zahlen zu Intervall 0 und 4 hinzu, jedoch gibt das Programm bei Intervall 1 noch einen Stern aus und bei Intervall 0 einen zu wenig...
Wäre echt froh um Feedback!
peace out.
Hier ein Screenshot vom Quellcode:
Hier ein Screenshot von der oben beschriebenen Ausgabe:
Ursachen:
a) Dein erstes if-statement schlägt nie an - das && ist und. Und die eingebene Zahl kann nie kleiner als das Minimum UND gleichzeitg größer als das Maximum sein.
b) Das führt dazu, das bei Eingabe von -1 das Intervall[1] inkrementiert wird - denn -1 ist mit Sicherheit kleiner als 19
c) Deine Erste Eingabe wird komplett ignoriert. Du liest die vor der while-Schleife ein und dann am Anfang der while Schleife noch mal - bevor deine erste Eingabe überhaupt gezählt wurde.
Freundlicherweise sollte man die Code-Tags verwenden, keine Bilder. Ansonsten die erste
der Eingabe-Optionen samt System.out..... auskommentieren und das && in der ersten if-Anweisung durch || ersetzen
package de.limdul;
import java.util.InputMismatchException;
import java.util.Scanner;
import org.apache.commons.lang3.StringUtils;
public class JavaForumDemo {
private static Scanner scanner = new Scanner(System.in);
private static int leseZahl() {
while (true) {
try {
System.out.print("Bitte geben sie eine ganze Zahl zwischen 1 und 49 ein, -1 zum beenden: ");
return scanner.nextInt();
} catch (InputMismatchException e) {
String s = scanner.next();
System.out.println("Die Eingabe " + s + " ist keine gültige Zahl, bitte noch mal probieren.");
}
}
}
public static void main(String[] args) {
int eingabe = leseZahl();
int[] intervals = { 0, 0, 0, 0, 0 };
while (eingabe != -1) {
if (eingabe <= 0 || eingabe > 49) {
System.out.println(
"Die Zahl " + eingabe + " ist nicht innerhalb des Bereichs 1 bis 49, bitte erneut probieren.");
} else {
intervals[eingabe / 10]++;
}
eingabe = leseZahl();
}
System.out.println();
System.out.println("Ergebnis");
for (int i = 0; i < intervals.length; i++) {
System.out.println("Interval " + i + ": " + StringUtils.repeat("*", intervals[i]));
}
}
}
package de.limdul;
import java.util.InputMismatchException;
import java.util.Scanner;
import org.apache.commons.lang3.StringUtils;
public class JavaForumDemo {
private static Scanner scanner = new Scanner(System.in);
private static int leseZahl() {
while (true) {
try {
System.out.print("Bitte geben sie eine ganze Zahl zwischen 1 und 49 ein, -1 zum beenden: ");
return scanner.nextInt();
} catch (InputMismatchException e) {
String s = scanner.next();
System.out.println("Die Eingabe " + s + " ist keine gültige Zahl, bitte noch mal probieren.");
}
}
}
public static void main(String[] args) {
int eingabe = leseZahl();
int[] intervals = { 0, 0, 0, 0, 0 };
while (eingabe != -1) {
if (eingabe <= 0 || eingabe > 49) {
System.out.println(
"Die Zahl " + eingabe + " ist nicht innerhalb des Bereichs 1 bis 49, bitte erneut probieren.");
} else {
intervals[eingabe / 10]++;
}
eingabe = leseZahl();
}
System.out.println();
System.out.println("Ergebnis");
for (int i = 0; i < intervals.length; i++) {
System.out.println("Interval " + i + ": " + StringUtils.repeat("*", intervals[i]));
}
}
}
...vielleicht geht es mit dem Debugger und der Anzeige der gerade aktuellen Werte etwas schneller. Apache - Commons.Lang ist dagegen keine Standardbibliothek und will separat installiert werden.