使用Java Scanner进行用户验证

时间:2016-06-20 04:12:00

标签: java java.util.scanner

我正在尝试从用户那里获取输入并验证它以确保它不是空值。我还必须将字符串转换为整数。我一直在尝试使用扫描仪来获得这个结果,但成效有限。我究竟做错了什么?仅供参考我是Java的新手(约两周)。所以请原谅我的问题可能包含的任何无知。

import java.util.Scanner;

public class NumbersTest {

    public static void main(String[] args) {

        Scanner userInput = new Scanner(System.in);

        String Num = args[0];
        int i = Integer.parseInt(Num);

        if (userInput == null){
                printError();
                return;
               }

                else if (i % 2 == 0){ 
                    System.out.println("even");
                }

                    else if (i % 2 != 0){ 
                        System.out.println("odd");
                    }
            }   

            private static void printError() {
                    System.out.println("Please enter a number.");
                }
      }

3 个答案:

答案 0 :(得分:1)

我想你是Java新手。虽然问题不是有效问题,因为你没有得到基础知识而程序甚至不会在第一时间编译,但我在下面提出了基本要点。

userInput变量是Scanner引用,而不是您的命名约定所示的输入。供您参考,请按照以下方式进行修改,以便更好地理解。

Scanner inputScanner = new Scanner(System.in);

因此,inputScanner的空检查变得不必要了,因为它是在上面新初始化的。

为了检查输入是否为空,首先使用输入, inputScanner.nextLine()继续前进。

快乐学习。

答案 1 :(得分:1)

嗯,根据您在上面提供的代码,我注意到了这一点:

  1. 由于未定义变量input,因此无法编译。
  2. 执行此操作时,它正在解析第一个命令行参数而不是System.in流中的输入:

    String Num = args[0];

    int i = Integer.parseInt(Num);

  3. 它不会捕获可以通过调用Integer.parseInt抛出的NumberFormatException

  4. 它不会关闭Scanner
  5. 以下是纠正这些问题的代码:

    public static void main(String[] args) {
            Scanner userInput = new Scanner(System.in);
    
            String input = userInput.next();
            if (input == null) {
                printError();
                userInput.close();
                return;
            }
    
            try {
                int i = Integer.parseInt(input);
                if (i % 2 == 0) {
                    System.out.println("even");
                }
    
                else if (i % 2 != 0) {
                    System.out.println("odd");
                }
            } catch (NumberFormatException e) {
                printError();
            }
    
            userInput.close();
    
        }
    
        private static void printError() {
            System.out.println("Please enter a number.");
        }
    

    最后一个想法 - 我怀疑Scanner在使用这种方式时会返回null,因为它默认使用空格作为分隔符 - 请参阅this page。因此,可能没有必要检查null,但它肯定不会伤害任何东西,作为一般的良好实践,你最好不要处理潜在的错误。

答案 2 :(得分:0)

在此代码中,您有4个变量

Scanner userInput = new Scanner(System.in);  // this is OK
String Num = args[0];               // args are command line parameters - not needed
int i = Integer.parseInt(Num);  // Should be parsing the userInput e.g. nextLine() ?
if (input == null){             // where on earth has input come from

所以尝试像

这样的东西
public static void main(String[] args) {

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

    if (input == null || input.length() == 0){
            printError();
            return;
    }

    int i = Integer.parseInt(input);
    if (i % 2 == 0){ 
         System.out.println("even");
    }
    else {                           // no else if needed, as there are only two choices
         System.out.println("odd");
    }
}

private static void printError() {
    System.out.println("Please enter a number.");
}