在if,else if的过程中如何处理输入字符串,否则包括Integer.parseInt?

问题描述 投票:-1回答:8

我想处理关于输入错误字符串的这种情况,但由于else if参数,错误不断发生。

尝试尝试,捕获但不知道如何将其应用于此代码。

import java.util.Scanner;

public class game
{
    public static void main(String[] args) {
    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println("if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();

    int answer;
    int multiplier = (int)(Math.random()*8+2);
    int random = (int)(Math.random()*8+2);

    if (input.equals("q"))
    {
        System.out.print("quit the game.");
    }

    else if (Integer.parseInt(input) == 0) 
    {
        System.out.println(random+"times table has been made automatically.");
        System.out.print(random+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {
            System.out.print("Wrong! The right answer is "+random*multiplier+".");
        }

    }

    else if (Integer.parseInt(input)>=2 && Integer.parseInt(input)<=9)
    {   
        int number = Integer.parseInt(input);
        System.out.println("You chose"+number+" times table.");
        System.out.print(number+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {               
            System.out.print("Wrong! The right answer is "+number*multiplier+".");
        }
    }

    else
    {
        System.out.print("Error. Please try again.");
    }   
 }
}

我期待来自else块的结果,但是当我输入错误的字符串如"c""f"等时,数字格式异常错误:对于输入字符串:"c"(或"f"等)发生。感谢您阅读本文,并希望您解决此问题。

java numberformatexception
8个回答
0
投票
int check = 0;

try{
   check = Integer.parseInt(input);

}catch(NumberFormatException e){
   System.out.println("Wrong input");
   continue;
}

如果你循环这个输入处理,如果它进入catch,你可以再次输入或输入无效输入你可以做你想要的。如果没有异常,检查是你的输入值,那么你可以在你的if中使用它和if-if语句一样

if(check>0){
   ...
}

0
投票

在Else阻塞之前,您可以像这样解析输入:

if (input.equals("q")) {
  System.out.print("quit the game.");
  return;
}

int parsedInput = 0;
try {
  parsedInput = Integer.parseInt(input);
} catch (NumberFormatException ex) {
  System.out.print("Error. Please try again.");
  return;
}

然后你可以为整数输入写if-else,如下所示:

if (parsedInput == 0) { ... }
else if (parsedInput >= 2 && parsedInput <= 9) {...}

不需要最后的其他因为我把它移到了阻塞区。


0
投票

试试这个它可以处理异常

 import java.util.Scanner;

public class Game {

    public static void main(String[] args) {
        System.out.println("let's start the multiplication game.");
        System.out.println("which times table do you want to choose?");
        System.out.println(
                "if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
        System.out.println("press \"q\" if you want to quit");
        System.out.println("==>");

        String input;
        Scanner s = new Scanner(System.in);
        input = s.nextLine();

        int answer;
        int multiplier = (int) (Math.random() * 8 + 2);
        int random = (int) (Math.random() * 8 + 2);

        if (input.equals("q")) {
            System.out.print("quit the game.");
        }
        try {
            int check_input = Integer.parseInt(input);
            if (check_input == 0) {
                System.out.println(random + "times table has been made automatically.");
                System.out.print(random + " X " + multiplier + " = " + "? input your answer ==> ");
                answer = s.nextInt();

                if (answer == random * multiplier) {
                    System.out.print("You're right!");
                } else {
                    System.out.print("Wrong! The right answer is " + random * multiplier + ".");
                }

            } else if (check_input >= 2 && check_input <= 9) {
                int number = Integer.parseInt(input);
                System.out.println("You chose" + number + " times table.");
                System.out.print(number + " X " + multiplier + " = " + "? input your answer ==> ");
                answer = s.nextInt();

                if (answer == number * multiplier) {
                    System.out.print("You're right!");
                } else {
                    System.out.print("Wrong! The right answer is " + number * multiplier + ".");
                }
            }

            else {
                System.out.print("Error. Please try again.");
            }
        } catch (Exception e) {
            System.out.print("Error. Please try again.");
        }

    }
}

0
投票

您只需要检查用户提供的输入是否为数字。在解析之前。

我添加了新的isNumberic方法,它根据用户的输入返回布尔标志并验证它。

公共课游戏{

public static void main(String[] args) {
    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println(
            "if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();

    int answer;
    int multiplier = (int) (Math.random() * 8 + 2);
    int random = (int) (Math.random() * 8 + 2);

    Game game = new Game();
    boolean isvalid = game.isNumeric(input);
    if (input.equals("q")) {
        System.out.print("quit the game.");
    }

    else if (isvalid && Integer.parseInt(input) == 0) {
        System.out.println(random + "times table has been made automatically.");
        System.out.print(random + " X " + multiplier + " = " + "? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random * multiplier) {
            System.out.print("You're right!");
        } else {
            System.out.print("Wrong! The right answer is " + random * multiplier + ".");
        }

    }

    else if (isvalid && Integer.parseInt(input) >= 2 && Integer.parseInt(input) <= 9) {
        int number = Integer.parseInt(input);
        System.out.println("You chose" + number + " times table.");
        System.out.print(number + " X " + multiplier + " = " + "? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number * multiplier) {
            System.out.print("You're right!");
        } else {
            System.out.print("Wrong! The right answer is " + number * multiplier + ".");
        }
    }

    else {
        System.out.print("Error. Please try again.");
    }
}

public static boolean isNumeric(String str)
{
    for (char c : str.toCharArray())
    {
        if (!Character.isDigit(c)) return false;
    }
    return true;
}

}


0
投票

您不能为Integer.parseInt(String s)发送类似a,b,c等的值https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)我尝试使用catch块来捕获numberformat异常并使用message输入有效整数

public static void main(String args[]) {


    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println("if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();

    int answer;
    int multiplier = (int)(Math.random()*8+2);
    int random = (int)(Math.random()*8+2);
   try {
    if (input.equals("q"))
    {
        System.out.print("quit the game.");
    }

    else if (Integer.parseInt(input) == 0) 
    {
        System.out.println(random+"times table has been made automatically.");
        System.out.print(random+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {
            System.out.print("Wrong! The right answer is "+random*multiplier+".");
        }

    }

    else if (Integer.parseInt(input)>=2 && Integer.parseInt(input)<=9)
    {   
        int number = Integer.parseInt(input);
        System.out.println("You chose"+number+" times table.");
        System.out.print(number+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {               
            System.out.print("Wrong! The right answer is "+number*multiplier+".");
        }
    }

    else
    {
        System.out.print("Error. Please try again.");
    }
   }
   catch (NumberFormatException e ) {
       System.out.print("pleae enter Valid integer");
   }

0
投票

显然你得到这个错误是因为你在一个不包含Integer.parseInt的字符串变量上调用Integer。您应该做的是在获得输入后检查字符串是否包含您需要的内容。像下面的东西

while (true)
    {
// Check that the input is between 0 and 9 or q.
        if (!((input.charAt(0) >= '0' && input.charAt(0) <= '9') || input.charAt(0) == 'q'))
        {
            // If it is not, ask for input again.
            System.out.println("Input is not correct. If you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
            input = s.nextLine();
        }
        else {
            // If input is correct, break this look.
            break;
        }
    }

以下是整个代码

public class game
{
public static void main(String[] args)
{
    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println("if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();
    while (true)
    {
        if (!((input.charAt(0) >= '0' && input.charAt(0) <= '9') || input.charAt(0) == 'q'))
        {
            System.out.println("Input is not correct. If you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
            input = s.nextLine();
        }
        else {
            break;
        }
    }

    int answer;
    int multiplier = (int) (Math.random() * 8 + 2);
    int random = (int) (Math.random() * 8 + 2);

    if (input.equals("q"))
    {
        System.out.print("quit the game.");
    }

    else if (Integer.parseInt(input) == 0)
    {
        System.out.println(random + "times table has been made automatically.");
        System.out.print(random + " X " + multiplier + " = " + "? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random * multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {
            System.out.print("Wrong! The right answer is " + random * multiplier + ".");
        }

    }

    else if (Integer.parseInt(input) >= 2 && Integer.parseInt(input) <= 9)
    {
        int number = Integer.parseInt(input);
        System.out.println("You chose" + number + " times table.");
        System.out.print(number + " X " + multiplier + " = " + "? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number * multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {
            System.out.print("Wrong! The right answer is " + number * multiplier + ".");
        }
    }

    else
    {
        System.out.print("Error. Please try again.");
    }
}

}


0
投票

验证两个单独的if / else块中的输入。将此代码添加到“else”语句中以捕获“q”以外的字符串。

else{
    try {
        int inputNumber = Integer.parseInt(input);
        if(inputNumber == 0) {
            // code..
        } else if (inputNumber >= 2 && inputNumber <= 9) {
            // code..
        }
    } catch(java.lang.NumberFormatException e) {
        System.out.print("Error. Please try again.");
    }
}

-1
投票

为什么不用try catch?

    if (input.equals("q")) {
        System.out.print("quit the game.");
    }
    try {
       Integer i = Integer.parseInt(input);
    }catch (NumberFormatException e){
        System.out.print("Error. Please try again.");
        return;
    }
© www.soinside.com 2019 - 2024. All rights reserved.