为什么我的' if'声明退出do-while循环,如果我的“赶上”'声明被执行,为什么不接受输入?

时间:2016-06-20 21:41:02

标签: java loops if-statement try-catch do-while

问题1:如果用户输入的int大于或等于2,则第一个if语句将变为true执行代码时将boolean error1变量设置为false。 do循环只应在error1变量为true时根据我的while语句重复。然而,无论如何循环重复。

如果设置为if退出循环,如何创建第一个true语句?

问题2 :如果用户输入了try-catch以外的其他内容,我正在使用do-while代码来帮助重复int循环。但是,当输入abc12.3之类的内容时,执行println代码的第一个try,请求用户的try语句的第二行输入被忽略,catch代码再次执行。这成为没有用户输入的非终止循环。

如何在执行catch代码后获取要求用户输入的语句?

这是我的代码:

import java.util.InputMismatchException;
import java.util.Scanner;

public class DeepbotCalc {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int points = 0;
    boolean error1 = false;

    do {
        try {
            System.out.println("How many points do you currently have?");
            points = input.nextInt();

            if (points >= 2){
                error1 = false;
            }

            else if (points > 0 && points < 2) {
                System.out.println("you need at least 2 points");
                error1 = true;
            }

            else if (points <= 0) {
                System.out.println("Please enter a positive whole number");
                error1 = true;
            }
        } catch (InputMismatchException e){
            System.out.println("Please enter a positive whole number.");
            error1 = true;
        }
    } while (error1 = true);

2 个答案:

答案 0 :(得分:0)

要在插入正确输入时停止循环,

while (error1 = true);

应该成为

while (error1 == true);

甚至更好

while(error1);

要在插入错误输入时修复无限循环,请在catch添加

input.nextLine();

让扫描仪“继续”

答案 1 :(得分:0)

这解决了您的问题:

import java.util.InputMismatchException;
import java.util.Scanner;

public class DeepbotCalc {

    public static void main(String[] args) {
        Scanner input;

        int points = 0;
        boolean error1 = false;

        do {

            try {
                input = new Scanner(System.in);
                System.out.println("How many points do you currently have?");
                points = input.nextInt();


                if (points >= 2) {
                    error1 = false;
                }

                else if (points > 0 && points < 2) {
                    System.out.println("you need at least 2 points");
                    error1 = true;
                }

                else if (points <= 0) {
                    System.out.println("Please enter a positive whole number");
                    error1 = true;
                }

            }

            catch (InputMismatchException e) {
                System.out.println("Please enter a positive whole number.");
                error1 = true;
            }

        } while (error1);
    }
}

我按while(error1 = true)更改了while(error1),并在try{}声明中添加了一行新代码。

每次执行try{}语句时,都会创建一个覆盖最后一个对象的新Scanner对象。