如何确保我只是从用户那里获取正确的输入

时间:2018-04-22 22:23:07

标签: java arrays input

我正在制作一个节目,我想输入“红色”或“黑色”,然后是1-10的数字。 输入应该看起来像Red 7Black 3

如果输入无效,我希望程序重新打印该行。我正在考虑使用try {然后捕捉{。但我不确定要检查的条件。

我试过了:

    System.out.print("Please choose Black or Red....and a number from 1-10 (Example : Black 4): ");
        String color = input.next();
        int number = input.nextInt();
    if(!color.equals("Red") || !color.equals("red") || !color.equals("Black") || !color.equals("black")) {
        System.out.println("Incorrect input. Please enter Black or Red: ");
        color = input.next();
    }
    if(!(number < 0 || number > 10)) {
        System.out.println("Incorrect input. Please re-enter a valid number from 1 to 10: ");
        color = input.next();
   }

3 个答案:

答案 0 :(得分:2)

这种情况有很多种方法。我建议如下,它按行读取输入:

  1. 使用String#split(regex)将输入分隔为数组。
  2. 使用String#equalsIgnoreCase(String)检查颜色输入。
  3. 使用Integer#parseInt(String)解析数字输入。
  4. 使用switch检查号码输入。
  5. 如果全部拼凑在一起,它将看起来像这样:

    div

    当然,有一种更清洁的方法,它使用方法和事物,但为了一个干净的答案,我不打算包含它。

答案 1 :(得分:1)

使用.equalsIgnoresCase方法

所以:

 Scanner input = new Scanner(System.in);

    String color = "";
    int number = -1;
    while(!color.equalsIgnoreCase("Black") || !color.equalsIgnoreCase("Red") && (number < 0 || number > 10))
    {  
        System.out.print("Please choose Black or Red....and a number from 1-10: ");
        color = input.next();
        number = input.nextInt();
    }
    // \n puts that "quote" on the next line
    System.out.println("Color chose: " + color + "\nnumber chose: " + number);

根据OP的要求:

所以只需确保导入之前被捕获的异常,之前如果他们输入2个字符串而不是String和int,它会崩溃,现在它不会崩溃。它现在将抓住“崩溃”并继续前进。

import java.util.InputMismatchException;

现在代码:

 Scanner input = new Scanner(System.in);


    String color = "";
    int number = -1;


        while(!color.equalsIgnoreCase("Black") || !color.equalsIgnoreCase("Red") && (number <= 0 || number >= 10))
        {  
                try
                {
                    System.out.print("Please choose Black or Red....and a number from 1-10: ");
                    color = input.next();
                    number = input.nextInt();
                }
                catch(InputMismatchException e) //More specific error
                {
                    e.getMessage(); 
                    System.out.println("Invalid entry, most specific. ");

                }
                catch(Exception e) //less specific general error
                {
                    e.getMessage();
                    System.out.println("unknown entry error.");
                }

        }

         // \n puts that "quote" on the next line
        System.out.println("Color chose: " + color + "\nnumber chose: " + number);

答案 2 :(得分:0)

您将把它放在while循环中,因为您希望继续打印它,直到用户输入有效输入。 while循环条件是如果颜色不等于红色或黑色,并且数字不在1-10之间(输入无效)。因此,如果输入无效,它将继续询问不同的颜色和数字,如果输入有效,它将退出while循环。

String color = "";
int number = -1;

while(!color.equals("Black") || !color.equals("Red") && (number < 0 || number > 10){  
    System.out.print("Please choose Black or Red....and a number from 1-10: ");
    color = input.next();
    number = input.nextInt();
}