【问题标题】:Checking for user only input positive value仅检查用户输入的正值
【发布时间】:2020-09-23 07:08:58
【问题描述】:

我正在阻止用户输入字符串,但我也想检查用户输入的是零还是负数。我应该如何在同一个 do-while 循环中执行它?

这是我的代码:

import java.util.Scanner;
class Check{
public static void main(String[] args){
     Scanner input = new Scanner(System.in);
     int a = 0;
     boolean invalidInput;
      do {
            invalidInput = false;
            try {
                System.out.println("\nEnter the positive integer");
                a = input.nextInt();
            } catch (Exception e) {
                System.out.println("Please enter a valid positive integer.\n");  
                invalidInput = true;
                input.nextLine();
            } 
        } while (invalidInput);
   }
}

【问题讨论】:

标签: java


【解决方案1】:

试试这个:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = 0;
        boolean invalidInput;
        do {
            invalidInput = false;
            try {
                System.out.println("\nEnter the positive integer");
                a = input.nextInt();
                if(a<0){
                    throw new Exception("Negative number entered");
                } else {
                    System.out.println("It is a positive integer. Exiting.");
                }
            } catch (Exception e) {
                System.out.println("Please enter a valid positive integer.\n");  
                invalidInput = true;
                input.nextLine();
            } 
        } while (invalidInput);

    }
}

输出:

Enter the positive integer                                                                                                                                  
10                                                                                                                                                          
It is a positive integer. Exiting.

再次运行否定检查:

Enter the positive integer                                                                                                                                  
-10                                                                                                                                                         
Please enter a valid positive integer.                                                                                                                      
                                                                                                                                                            
                                                                                                                                                            
Enter the positive integer

【讨论】:

    【解决方案2】:

    您可以创建一个特定的类来询问用户输入,并使用必要的逻辑来过滤无效答案。

    类似:

    class Console {
    
        private Scanner reader = new Scanner(System.in);
    
        private String readLine() {
            if (!reader.hasNextLine()) return ""; // Control exit here
            return reader.nextLine();
        }
    
        public int answerInt(String message) {
            System.out.println(message);
    
            String provided = readLine();
            if (isInteger(provided)) return Integer.parseInt(provided);
    
            System.err.println("You have entered an invalid value. Please provide a number.");
            return answerInt(message);
        }
    
        private boolean isInteger(String string) { // This should be a number util, not a console class responsability.
            try {
                Integer.parseInt(string);
                return true;
            } catch (Exception er) {
                return false;
            }
        }
    
    }
    

    然后,例如,只需添加一个新方法来处理允许的数字范围。

    public int answerNumberBetween(int min, int max, String message) {
        int num = answerInt(message);
    
        // Validate if the number is between the provided range.
        if (num >= min && num <= max) return num;
    
        System.err.println("You have entered an invalid value. Please provide a number between '%d' and '%d'.", min, max);
        return answerNumberBetween(min, max, message);
    }
    

    【讨论】:

      【解决方案3】:

      希望对您有所帮助:

       do {
                  invalidInput = false;
                  try {
                      System.out.println("\nEnter the positive integer");
                      String num = input.next();
                      int a = Integer.parseInt(num); // <-- this will throw NumberformatException if user inputs Alphabets
                      if(a <= 0) { //<-- added 
                          throw new NumberFormatException();
                      }
                  } catch (NumberFormatException e) {
                      System.out.println("Please enter a valid positive integer.\n");  
                      invalidInput = true;
                      input.nextLine();
                  } 
              } while (invalidInput);
      

      输出:

      Enter the positive integer
      0
      Please enter a valid positive integer.
      
      Enter the positive integer
      -1
      Please enter a valid positive integer.
      

      【讨论】:

      • 谢谢,但我认为使用此循环将无法测试字符串输入
      • 会的。如果你也想测试字符串。试试这个String num = input.next() 然后在 do while do int a = Integer.parseInt(num) 然后剩下的代码就可以工作了。已编辑帖子!做检查。 :-)
      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2013-06-12
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多