gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:05:26 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com