java - 接受字符串而不是整数或 double 是否安全且更好?

标签 java

第二部分是避免用户输入不匹配的好习惯吗?

public class StringsAsPrimitiveDate{
Scanner input= new Scanner(System.in);
System.out.println("Please enter your number:");
int numberOne=input.nextInt();
}

或者

public class StringsAsPrimitiveDate{
Scanner input= new Scanner(System.in);
System.out.println("Please enter your number:");
String numberOne=input.next();
int result = Integer.parseInt(numberOne);   
}

谢谢

最佳答案

nextInt 的一个常见问题是它留下了一个换行符,该换行符可能会被下一次扫描意外地自动消耗。考虑以下代码:

import java.util.Scanner;

class Main{
    public static void main(String args[]) {
        int rollNo;
        String name;
        Scanner scan=new Scanner(System.in);
        while (true) {
            System.out.print("Enter the roll no of the student: ");
            rollNo=scan.nextInt();
            System.out.print("Enter the name of the student: ");
            name=scan.nextLine();
            System.out.printf("Roll no. %d, Name: %s has been registered%n",rollNo, name);
        }
    }
}

示例运行:

Enter the roll no of the student: 1
Enter the name of the student: Roll no. 1, Name:  has been registered
Enter the roll no of the student: Arvind
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Main.main(Main.java:10)

请注意,即使使用 next 也可能会出现此问题,但使用 nextLine 则不会出现此问题,如以下代码所示:

import java.util.Scanner;

class Main {
    public static void main(String args[]) {
        int rollNo = 0;
        String name;
        boolean valid = true;
        Scanner scan = new Scanner(System.in);
        while (true) {          
            do {
                System.out.print("Enter the roll no of the student: ");
                try {
                    rollNo = Integer.parseInt(scan.nextLine());
                } catch (Exception e) {
                    System.out.println("The value should be an integer.");
                    valid = false;
                }
            } while (!valid);
            System.out.print("Enter the name of the student: ");
            name = scan.nextLine();
            System.out.println("Roll no. " + rollNo + ", Name: " + name + " has been registered");
        }
    }
}

示例运行:

Enter the roll no of the student: 1
Enter the name of the student: Arvind
Roll no. 1, Name: Arvind has been registered
Enter the roll no of the student: a
The value should be an integer.
Enter the roll no of the student: 12.5
The value should be an integer.
Enter the roll no of the student: 2
Enter the roll no of the student: Avinash
The value should be an integer.
Enter the roll no of the student: 

结论:最好使用具有正确逻辑(例如异常处理、无效输入循环等)的 nextLine 而不是 nextnextInt 以避免上述问题。我还建议您浏览documentation on Scanner .

关于java - 接受字符串而不是整数或 double 是否安全且更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60103747/

相关文章:

java - 使用开放街道 map 规划路线

java - 启动应用程序时出现 FileNotFoundException (Logback)

Java newFixedThreadPool 解释

java - AWS EC2 Java Spring Boot - 线程 "main"java.lang.NoClassDefFoundError : org/springframework/boot/SpringApplication 中出现异常

java - 如何修复 Symja 中的精度?

java - 如果连接重新启动,则重新连接到数据库

java - SwipeRefreshLayout 中 ListView 的填充

java - Oozie 4.3.0 构建错误

java - 将 Maven 项目导入 IDR 的推荐方法?

java - RestTemplate 映射到 Map 而不是字段