如果用户输入不是整数,则java保持循环

时间:2014-10-15 11:05:36

标签: java

我在这个网站上尝试过类似的代码,但对我来说没什么用。所以我希望程序不断要求用户输入一个整数,如果它不是整数。如果信用卡是整数,则转到到期日期,如果有效,则打印发票。我试过if和while循环,也尝试捕获但我想我的逻辑被破坏了。任何帮助将不胜感激。

    Scanner s = new Scanner(System.in);
    System.out.println("Type 'quit' to exit payment");
    System.out.println("Enter name: ");
    String name = s.next();
    s.nextLine();

    if (name.equals("quit"))
    {
        return;
    }

    System.out.println("Enter address: ");
    String address = s.nextLine();

    if (address.equals("quit"))
    {
        return;
    }

    System.out.println("Type '000' to exit payment");
    System.out.println("Enter card number: ");
    @override
    int cardNo = s.nextInt();
    if (cardNo == 000) 
    {
        return;
    }

    System.out.println("Enter card expiration date: (DDMMYY)");
    int expirationDate = s.nextInt();

    if (expirationDate == 000)
    {
        return;
    }

    //if input is ok then printing invoice
}

2 个答案:

答案 0 :(得分:0)

每次调用方法时,请记住.nextLine()获取下一个元素。所以最好在处理之前将它分配给变量。

来自docs

  

使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,   排除末尾的任何行分隔符。该职位设定为   下一行的开头。       由于此方法继续搜索输入以查找行分隔符,因此它可以缓冲所有搜索的输入   如果没有行分隔符,则跳过行。

答案 1 :(得分:0)

尝试以下内容,之后我还会注意一些关于退出应用程序的事情

Scanner s = new Scanner(System.in);
String name = "", address = "";
int cardNo = 0, expirationDate = 0;

while(name == "" || address == "" || cardNo == 0 || expirationDate == 0)
{ 
    System.out.println("Type 'quit' to exit payment");

    //Get Name
    System.out.print("Enter name: ");
    name = s.nextLine();
    if (name.equals("quit")){return;}

    //Get address
    System.out.print("Enter address: ");
    address = s.nextLine();
    if (address.equals("quit")){return;}

    System.out.println("Type '-1' to exit payment");

    //Get card number continually until an integer is entered
    do {
        System.out.print("Enter card number: ");
        try {
            cardNo = Integer.parseInt(s.nextLine());
            break;
        } catch (Exception e) {
            continue;
        }
    } while (true);
    if (cardNo == -1) {return;}

    //Get card expiration date continually until an integer is entered
    do {
        System.out.println("Enter card expiration date: (DDMMYY)");
        try {
            expirationDate = Integer.parseInt(s.nextLine());
            break;
        } catch (Exception e) {
            continue;
        }
    } while (true);
    if (expirationDate == -1){return;}
}

您可能已经注意到我在从000-1退出计划的卡号和到期日期时更改了输入内容。这是因为转换为int的000将具有0的值,因此用户将永远无法退出您的应用程序。