如何检查输入的值是否为整数?如果是,则仅执行代码的其余部分

how do i Check if the Entered Value is a Integer? and if it is, Then only rest of the Code gets Executed

提问人:Rachit Srivastava 提问时间:8/27/2023 最后编辑:Miss SkooterRachit Srivastava 更新时间:8/27/2023 访问量:74

问:

import java.util.*;

public class MainClass {

  public static void main(String[] args) {
    System.out.println("Enter the Number you want the Maximum times the Pattern to Print while Increasing 1 each Time :");

    boolean isInteger = true;
    do {
      Scanner Obj = new Scanner(System.in);
      int a = Obj.nextInt();

      // The Condition I want is to check if INPUT 'a' has a integer value and execute rest of the code on the condition.
      if (a.hasNextInt()) {
        int i;
        for (i = 1; i <= a; i++) {
          int j;
          for (j = 1; j <= i; j++) {
            System.out.println("a");
          }
          System.out.println();
        }
      } else {
        System.out.println("Please Enter a Integer Value : ");
        isInteger = false;
      }
    } while (isInteger == false);
  }
}

上述代码的预期输出:

*
**
***
**** 

模式类型多次,然后我想通过接受用户输入来做到这一点。如果用户输入是 Integer,则仅执行其余代码,否则应打印并要求用户输入另一个输入。我是 Java 新手。"Please Enter a Integer Value : "

如何检查输入的值是否为整数?

java.util.scanner 用户输入

评论

0赞 Bohemian 8/27/2023
你想知道是否是整数吗?a

答:

0赞 Jagdeesh 8/27/2023 #1

使用 next() 而不是 nextInt() 并检查值是字符串还是数字以避免默认情况下出错。 像这样尝试

        System.out.println("Enter the Number you want the Maximum times the Pattern to Print while Increasing 1 each Time :\n");
        boolean isInteger = true;
        do {
            Scanner Obj = new Scanner(System.in);
            String userInput = Obj.next();
            int number = 0;
            try {
                number = Integer.parseInt(userInput);
                isInteger = true;
            } catch(Exception e) {
                isInteger = false;
            }
            if(isInteger) {
                int i, j;
                for (i = 1; i <= number; i++) {
                    for (j = 1; j <= i; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                }
            } else {
                System.out.println("Please Enter a Integer Value - " + userInput);
            }
        } while (isInteger == false);

评论

0赞 tgdavies 8/27/2023
你的 catch 子句正在捕获所有异常,而不仅仅是 ,这将掩盖块中的其他错误。NumberFormatExceptiontry
0赞 Reilas 8/27/2023 #2

“如何检查输入的值是否为整数?如果是,那么只有代码的其余部分被执行......”

典型的建议是使用 Integer#parseInt 方法。
此方法将为非数字值引发 NumberFormatException,因此您可以使用 try-catch 块。

Scanner Obj = new Scanner(System.in);
String a = Obj.next();
try {
    int value = Integer.parseInt(a);
} catch (NumberFormatException exception) {
        
}

以下是有关此方法的相关 StackOverflow 问题和答案。
StackOverflow – 在 Java 中检查 String 是否代表整数的最佳方法是什么?

如果只检查整数,则可以在 a 上使用 String#chars 方法。
不过,Character#isDigit 方法将返回 true
'0''9'

isInteger = a.chars().allMatch(Character::isDigit);

或者,也可以使用 String#matches 方法。
这使用正则表达式模式作为 String 参数。

if (a.matches("\\d+")) 

"...它应该打印“Please Enter a Integer Value : ”并要求用户输入另一个输入。..."

在这种情况下,start isIntegerfalse,并从另一个 if 块将其设置为 true

"...上述代码的预期输出:

*
**
***
**** 

您将需要使用 print,而不是 println

for (j = 1; j <= i; j++) {
    System.out.print('*');
}
System.out.println();

这是完整的代码,

System.out.println("Enter the Number you want the Maximum times the Pattern to Print while Increasing 1 each Time :");

boolean isInteger = false;
do {
    Scanner Obj = new Scanner(System.in);
    String a = Obj.next();

    // The Condition I want is to check if INPUT 'a' has a integer value and execute rest of the code on the condition.
    if (a.matches("\\d+")) {
        int i, length = Integer.parseInt(a);
        for (i = 1; i <= length; i++) {
            int j;
            for (j = 1; j <= i; j++) {
                System.out.print('*');
            }
            System.out.println();
        }
        isInteger = true;
    } else {
        System.out.println("Please Enter a Integer Value : ");
    }
} while (isInteger == false);

输出

Enter the Number you want the Maximum times the Pattern to Print while Increasing 1 each Time :
4
*
**
***
****

这是我编写相同代码的方法。

Scanner scanner = new Scanner(System.in);
String string;
int value, count;
boolean exit = false;
while (!exit) {
    string = scanner.nextLine();
    if (!string.matches("\\d+"))
        System.out.printf("invalid entry '%s'%n", string);
    else {
        value = Integer.parseInt(string);
        for (count = 1; count <= value; count++)
            System.out.println("*".repeat(count));
        exit = true;
    }
}