使用Scanner进行两次检查while循环 - java

时间:2016-01-12 16:54:17

标签: java loops while-loop

我试图用while循环进行两次检查:

1)如果用户输入的内容不是 int

,则显示“错误”

2)一旦用户输入 int ,如果是一位数,则显示“仅两位数”并保持循环直到输入两位数int(因此IF应该是也用过)

目前我只完成了第一部分:

    Scanner scan = new Scanner(System.in);

    System.out.println("Enter a number");

    while (!scan.hasNextInt()) {

        System.out.println("error");
        scan.next();

    }

但是,如果可能的话,我希望在一个循环中同时进行检查。

那就是我被困住的地方......

4 个答案:

答案 0 :(得分:2)

因为你已经有两个答案了。这似乎是一种更清洁的方式。

Scanner scan = new Scanner(System.in);

String number = null;
do {
    //this if statement will only run after the first run.
    //no real need for this if statement though.
    if (number != null) {
        System.out.println("Must be 2 digits");
    }

    System.out.print("Enter a 2 digit number: ");
    number = scan.nextLine();

    //to allow for "00", "01". 
} while (!number.matches("[0-9]{2}")); 
System.out.println("You entered " + number);

答案 1 :(得分:1)

首先将输入作为String。如果它可以转换为Int然后你做检查,否则说2位数字是可以接受的。如果它不可转换为数字则抛出错误。所有这些都可以在一个while循环中完成。而你想要一个“你想继续吗?”提示并检查答案是否为“是”/“否”相应地从while循环中断。

答案 2 :(得分:1)

如上所述,您应该始终将输入作为字符串,然后尝试 并解析它为int

package stackManca;

import java.util.Scanner;

public class KarmaKing {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = null;
        int inputNumber = 0;
        while (scan.hasNextLine()) {
            input = scan.next();
            try {
                inputNumber = Integer.parseInt(input);
            } catch (Exception e) {
                System.out.println("Please enter a number");
                continue;
            }
            if (input.length() != 2) {
                System.out.println("Please Enter a 2 digit number");
            } else {
                System.out.println("You entered: " + input);
            }
        }
    }
}

答案 3 :(得分:0)

要将它作为一个循环,它比两个循环更麻烦

int i = 0;
while(true)
{
    if(!scan.hasNextInt())
    {
        System.out.println("error");
        scan.next();
        continue;
    }
    i = scan.nextInt();
    if(i < 10 || >= 100)
    {
        System.out.println("two digits only");
        continue;
    }
    break;
}
//do stuff with your two digit number, i

vs两个循环

int i = 0;
boolean firstRun = true;
while(i < 10 || i >= 100)
{
    if(firstRun)
        firstRun = false;
    else
        System.out.println("two digits only");

    while(!scan.hasNextInt())
    {
        System.out.println("error");
        scan.next();
    }

    i = scan.nextInt();
}
//do stuff with your two digit number, i