Java:尝试使用do-while限制用户输入时while循环内的无限循环

时间:2018-02-04 14:30:21

标签: java loops io java.util.scanner do-while

static int prompt(set x) {
    Scanner input = new Scanner(System.in);
    do {
        System.out.println("Please enter an integer within the specified range.");
        while (!input.hasNextInt()) {
            System.out.println("Please enter a valid integer.");
            input.next();
        }
        System.out.println("input received");
        x.setVal(input.nextInt());
    } while (x.getVal() <= x.getlLim() || x.getVal() > x.getuLim());
    input.close();
    return x.getVal();
}

此方法应该将用户输入限制为用户定义的整数范围,但即使输入有效数字,它也会在do{...}while(...)循环内循环。它被提供一个静态类set,它用构造函数初始化。以下是相关的代码片段:

set构造函数:

    set(int val, int uLim, int lLim) {
        this.val = val;
        this.uLim = uLim;
        this.lLim = lLim;
    }

初始化set

    set max = new set(0, 1, 99);

然后我继续prompt(max),但它一直告诉我“请输入...指定范围”即使我输入一个有效的整数,如60,55或10.循环是否有任何问题或我在其他地方做错了吗?

似乎无法解决这个问题,尝试使用正则表达式,try-catch块和parseInt作为替代方案,结果出现了不同的错误,所以我回到了这种调节用户输入的最简单方法......

2 个答案:

答案 0 :(得分:1)

循环条件为while (x.getVal() <= x.getlLim() || x.getVal() > x.getuLim());

然后设置uLim = 1, lLim = 99

显然,你的“有效”号码1<= 60, 55, 10 <=99,这就是循环永远不会结束的原因。

根据您的描述,我认为循环条件应为while (x.getVal() >= x.getlLim() || x.getVal() < x.getuLim());

答案 1 :(得分:1)

你的uLim(upperLimit)低于lLim(lowerLimit):

   set(int val, int uLim, int lLim) {
        this.val = val;
        this.uLim = uLim;
        this.lLim = lLim;
    }

初始化集:

set max = new set(0, 1, 99);

我会根据他们的尺寸订购号码,如同你的电话,而不是在声明中。

相关问题