尝试/抓住循环,返回值为

时间:2015-10-22 18:10:29

标签: java loops try-catch

我是编程新手,所以我需要一些帮助。我有点想出了自己的一些事情,但是现在我很遗憾,我会说。请记住,我不是母语人士,对不起我的错误:) 我在大学学习Java,但我们必须自己做练习。 该程序是关于键入1和20之间的间隔,程序正方形,我需要找到正确的答案。我有3次尝试得到正确的答案。在第三次尝试之后,我会问我是否想尝试另一个号码或结束程序

我得到的实际问题是“try and catch loop”,需要测试我输入一个正数。

public static int prüfung(int ZahlPrüfen) {
    while (true) {
        try {

            ZahlPrüfen = IntervallScanner.nextInt();
            if (IntervallScanner.hasNextInt() && ZahlPrüfen > 0) {
                return ZahlPrüfen;

            } else if (ZahlPrüfen <= 0) {
                System.out.println("Bitte Geben Sie eine Positive Zahl ein");
                IntervallScanner.next();

            }

        } catch (InputMismatchException e) {
            System.out.println("Bitte Geben Sie eine Zahl und keinen Buchstaben ein");
            IntervallScanner.next();

        }
    }

问题是,如果我输入正数(所以一切正确),我必须输入两次!当我键入负数时,我需要输入两次。当我输入一个字符串时,我得到一个“错误”,所以我觉得这样做很好。它显示如下:

  

Bitte geben Sie die kleinste positive Zahl des Intervalls ein:-2

     

-3

     

Bitte Geben Sie eine Positive Zahl ein

     

-4

     

-5

     

Bitte Geben Sie eine Positive Zahl ein

     

-6

     

-7

     

Bitte Geben Sie eine Positive Zahl ein

     

2

     

2

     

Bitte geben SiedieGrößteZahldes Intervalls ein:3

     

Wie lautet死于Wurzel aus 4?

当我输入正确的数字时,代码第一次出现,例如在这种情况下为2和2,并使用它们来制作随机数,而不是2和3。

我希望你能理解我到目前为止的意思。如果你们中的某些人可以帮助我,那将是非常好的,我被困了5个小时并且无法弄明白。我的大脑停止工作:D

以下是完整的代码:

public static int zufallszahl = 0;
public static Scanner sc = new Scanner(System.in);
public static Scanner eingabe = new Scanner(System.in);
public static Scanner IntervallScanner = new Scanner(System.in);
public static int AnzahlVersuche = 0;
public static int k = 0;
public static int kleineZahl;
public static int großeZahl;
public static int ZahlPrüfen;
public static int ZahlPrüfung;

public static void main(String[] args) {

    System.out.print("Bitte geben Sie die kleinste positive Zahl des Intervalls ein: ");

    kleineZahl = prüfung(ZahlPrüfen);

    System.out.print("Bitte geben Sie die Größte Zahl des Intervalls ein: ");

    großeZahl = prüfung(ZahlPrüfen);

    do {
        ermittleZufallszahl(großeZahl, kleineZahl);

        int quadrad = (int) Math.pow(zufallszahl, 2);
        System.out.println("Wie lautet die Wurzel aus " + quadrad + "?");

        erneuterVersuch();

    } while (k == 1);
}

public static void ermittleZufallszahl(int max, int min) {
    zufallszahl = (int) ((Math.random() * (max - min + 1)) + min);

}

public static int erneuterVersuch() {
    AnzahlVersuche = 0;
    while (AnzahlVersuche <= 2) {
        int input = sc.nextInt();
        if (input == zufallszahl) {
            System.out.println("Das ist richtig,toll!");
            System.out.println("Wollen Sie eine andere Zahl probieren? Wenn Ja geben Sie (j) ein, wenn Nein geben Sie (n) ein.");
            String eingabe1 = eingabe.nextLine();
            switch (eingabe1) {
                case "j":
                case "J":

                    k = 1;

                    return k;

                case "n":
                case "N":
                    System.out.println("Programm wird jetzt beendet");
                    k = 2;
                    System.exit(0);
            }
        } else {
            System.out.println("Das ist falsch, schade!");

            ++AnzahlVersuche;
            if (AnzahlVersuche == 3) {
                System.out.println("Sie haben es mit 3 Versuchen leider nicht geschafft! Die richtige Antwort wäre " + zufallszahl + " gewesen.");
                System.out.println("Wollen Sie eine andere Zahl probieren? Wenn Ja geben Sie (j) ein, wenn Nein geben Sie (n) ein.");

                String eingabe1 = eingabe.nextLine();
                switch (eingabe1) {
                    case "j":
                    case "J":

                        k = 1;

                        break;
                    case "n":
                    case "N":
                        System.out.println("Programm wird jetzt beendet");
                        k = 2;
                        System.exit(0);
                }

            }

        }
    }
    return k;
}

public static int prüfung(int ZahlPrüfen) {

    while (true) {
        try {

            ZahlPrüfen = IntervallScanner.nextInt();
            if (IntervallScanner.hasNextInt() && ZahlPrüfen > 0) {
                return ZahlPrüfen;

            } else if (ZahlPrüfen <= 0) {
                System.out.println("Bitte Geben Sie eine Positive Zahl ein");
                IntervallScanner.next();

            }

        } catch (InputMismatchException e) {
            System.out.println("Bitte Geben Sie eine Zahl und keinen Buchstaben ein");
            IntervallScanner.next();

        }
    }

}

1 个答案:

答案 0 :(得分:0)

Wie gehts:)

Ich verstehe das nicht:/

 public static int prüfung(int ZahlPrüfen) {
  while (true) {
    try {

        int ZahlPrüfen = IntervallScanner.nextInt();
        if (IntervallScanner.hasNextInt() && ZahlPrüfen > 0) {
            return ZahlPrüfen;

        } else if (ZahlPrüfen <= 0) {
            System.out.println("Bitte Geben Sie eine Positive Zahl ein");
            IntervallScanner.next();
        }

    } catch (InputMismatchException e) {
        System.out.println("Bitte Geben Sie eine Zahl und keinen Buchstaben ein");
        IntervallScanner.next();

    }
}

您正在传递ZahlPrufen,但是您将其替换为IntervallScanner.nextInt();。所以传入的值从未使用过。

您不需要该方法来接受参数。

错误在于你在if条件中检查hasNextInt(),它需要用户的另一个输入。您只需要检查刚刚输入的数字的有效性。

public static int prüfung() {
while (true) {

    try {
    int ZahlPrüfen = IntervallScanner.nextInt();
    if (ZahlPrüfen > 0) {
        return ZahlPrüfen;

    } else {
        System.out.println("Bitte Geben Sie eine Positive Zahl ein");
    }

  } catch (InputMismatchException e) {
      System.out.println("Bitte Geben Sie eine Zahl und keinen Buchstaben ein");
        IntervallScanner.next();
    }
  }
}