当前位置: 首页 > 知识库问答 >
问题:

带有返回值的try/catch循环

尚棋
2023-03-14
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阳性Zahl des Intervalls Ein:-2

-3

-7

Bitte Geben Sie eine阳性Zahl ein

2

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个答案

闻人伟
2023-03-14

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();
    }
  }
}
 类似资料:
  • 问题内容: 大家。我有一个关于java中返回值的菜鸟问题。这是我的代码。 Eclipse报告“此方法必须返回long类型的结果”错误。但是我确实在try块中返回了提示。eclipse建议在try / catch块之后添加一个返回值,这会破坏逻辑。你能告诉我这里有什么问题吗?谢谢。 问题答案: 当一个被抛出的返回值是不确定的。引发异常时,控制权立即传递给异常处理程序。在这种情况下,您记录错误。然后控

  • 我实现了一个try-catch块。 我试图用一种特定的方式实现捕捉块,但是它不太好用。如果输入不是整数,它应该重复并返回到try块。它只工作一次,但更多。 你能给我一些帮助吗?非常感谢。

  • 问题内容: 我刚遇到以下代码: 毫无疑问,运行此代码将产生“返回值:3”的输出。 但是,我对此感到好奇: JVM中的内部机制。有谁知道VM是否通过覆盖第一个“ return 1”来实际替换堆栈上的返回值?如果是这样,我在哪里可以找到更多信息。 我还没有找到以这种方式使用并允许在JVM中实现的final机制中的返回值的用法。如果将此代码构造用作返回错误代码的手段,我认为有更好的方法记录错误或返回这些

  • 因为我相信这是一个很好的编程实践,所以如果我的所有(局部或实例)变量只需要编写一次,我就将它们设为< code>final。 但是,我注意到当变量赋值可以抛出异常时,您不能将所述变量设为最终变量: 有没有办法在不诉诸临时变量的情况下做到这一点?(或者这不是最终修饰符的正确位置?)

  • 问题内容: 因此,当我在中对块进行编码并尝试输入值时,它会告诉我 没有返回值 我的问题是,在使用和时如何返回值? 问题答案: 要在使用时返回值,可以使用临时变量,例如 否则,您需要在每个没有no的执行路径(try块或catch块)中都有返回值。

  • 我不知道为什么人工智能不能返回真假。它打印“丢失的返回声明”我在网上寻找答案,但没有一个能解决我的问题。