if else语句的多个变量

时间:2014-11-03 22:26:46

标签: java

我已经编写了一些代码来检查用户是否输入了1到5之间的数字,现在我还希望我的代码允许用户输入字母A,S,D或M.

有没有办法将代码组合在一起,我可以识别用户是否输入了1-5或A,S,D,M?

如何编辑下面的代码,以便用户可以输入整数或字符?我是否必须在循环下面编写一段代码,以便识别用户没有输入1-5但是确实输入A,S,D或M,就像在循环中一样?或者它是一个单独的循环。我很困惑!

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

public class Selection {
    Scanner readInput = new Scanner(System.in);

    int selectionOne() {
        int inputInt;
        do { //do loop will continue to run until user enters correct response
            System.out.print("Please enter a number between 1 and 5, A for Addition, S for subtraction, M for multiplication, or D for division: ");
            try { 
                inputInt = readInput.nextInt(); //user will enter a response
                if (inputInt >= 1 && inputInt <=5) {
                    System.out.print("Thank you");
                    break; //user entered a number between 1 and 5
                } else {
                    System.out.println("Sorry, you have not entered the correct number, please try again.");
                }
                continue;
            }
            catch (final InputMismatchException e) {
                System.out.println("You have entered an invalid choice. Try again.");
                readInput.nextLine(); // discard non-int input
                continue; // loop will continue until correct answer is found
            }
        } while (true);
        return inputInt;
    } 
}

3 个答案:

答案 0 :(得分:1)

我建议您不要使用int输入,只需使用String输入,并在需要时将其转换为整数。您可以使用Integer.parseInt(String)String转换为int

因此,当您检查输入是否有效时,您需要检查输入是否等于"A""S""M""D"或任何值从1-5转换为int

所以要检查它是否是其中一个字符,你可以这样做:

if (input.equals("A") || input.equals("S") || input.equals("M") || input.equals("D"))

然后测试它是否为值1到5的int,你可以这样做:

if (Integer.parseInt(input) >= 1 && Integer.parseInt(input) <= 5)

只需将输入解析为int,然后检查您已经完成的范围。

此方法的返回类型现在为String,而不是int。如果由于某种原因需要它为int,您只需将值解析为int,然后返回该值。但我刚刚将其作为String返回。

我改变的最后一件事是catch块。现在,而不是InputMismatchException(因为他们现在可以输入String),我将其更改为NumberFormatException,如果String无法转换为尝试int。例如,Integer.parseInt("hello")会抛出NumberFomatException,因为"hello"无法表示为整数。但是,Integer.parseInt("1")会很好并将返回1

请注意,您应首先测试String等效性,以便在您有机会测试所需的所有条件之前不要进入block

该方法如下所示:

String selectionOne() {
    String input;
    do { //do loop will continue to run until user enters correct response
        System.out.print("Please enter a number between 1 and 5, A for Addition, S for subtraction, M for multiplication, or D for division: ");
        try { 
            input = readInput.nextLine(); //user will enter a response
            if (input.equals("A") || input.equals("S") || input.equals("M") || input.equals("D")) {
                System.out.println("Thank you");
                break; //user entered a character of A, S, M, or D
            } else if (Integer.parseInt(input) >= 1 && Integer.parseInt(input) <= 5) { 
                System.out.println("Thank you");
                break; //user entered a number between 1 and 5
            } else {
                System.out.println("Sorry, you have not entered the correct number, please try again.");
            }
            continue;
        }
        catch (final NumberFormatException e) {
            System.out.println("You have entered an invalid choice. Try again.");
            continue; // loop will continue until correct answer is found
        }
    } while (true);
    return input;
}

答案 1 :(得分:1)

正如@MarsAtomic所提到的,首先应该将输入更改为String而不是int,这样您就可以轻松处理字符和数字。

变化:

int inputInt;

要:

String input;

然后改变:

inputInt = readInput.nextInt();

要:

input = readInput.next();

为了适应阅读String而非int

现在你达到2个主要病例(和2个子病例):

1) input is a single character
   a) input is a single digit from 1-5
   b) input is a single character from the set ('A', 'S', 'D', 'M')
2) input is an error value

此外,由于您没有致电Scanner.nextInt,因此您无需使用try/catch声明,并可以在else块中打印错误。

此外,您应该让您的方法返回charString而不是int,这样您就可以同时返回1-5A,S,D,M。我假设您要返回char。如果您想要返回String,则可以在下面的代码中return input代替return val

注意: 下面的代码可以简化和缩短,我只是添加了变量和注释,试图让每个步骤都清楚地显示正在读取或转换的内容。您可以通过@ mikeyaworski的答案来更简洁地了解这一点。

以下是您的代码的外观:

   char selectionOne() {
        String input;
        do {
            input = readInput.next();
            // check if input is a single character
            if(input.length() == 1) {
                char val = input.charAt(0);
                // check if input is a single digit from 1-5
                if(Character.isDigit(val)) {
                    int digit = Integer.parseInt(input);
                    if (digit >= 1 && digit <=5) {
                        System.out.print("Thank you");
                        return val; // no need to break, can return the correct digit right here
                    } else {
                        System.out.println("Sorry, you have not entered the correct number, please try again.");
                    }
                } else {
                    // check if input is in our valid set of characters
                    if(val == 'A' || val == 'S' || val == 'M' || val == 'D') { 
                        System.out.print("Thank you");
                        return val;  // return the correct character
                    } else {
                        System.out.println("Sorry, you have not entered the correct character, please try again.");
                    }
                }
            } else {
                System.out.println("Sorry, you have not entered the correct input format, please try again.");
            }
        } while(true);
    } 

答案 2 :(得分:0)

如果您的输入可以是字符和字母,为什么不更改为查找字符或字符串?然后,你可以毫无困难地寻找“1”或“A”。