Wieso diese Ausgabe??

ZH1896ZH

Mitglied
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:
12624

Hier ein Screenshot von der oben beschriebenen Ausgabe:
12623
 
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.
 
Eine Variante schnell zusammengeklöppelt:

Java:
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]));
        }

    }

}
 
Eine Variante schnell zusammengeklöppelt:

Java:
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]));
        }

    }

}

da muss ich wohl noch ein paar Vorlesungen besuchen bis ich bei dem Quellcode den Durchblick habe...
 

Neue Themen


Zurück
Oben