有人可以帮助我使这段代码更整洁。我宁愿使用parse int而不是缓冲读取器。我希望我的代码循环,直到用户输入一个数字。如果没有代码打印出相同的语句两次,我无法弄清楚如何做到这一点。
public void setAge()
{
try {
age = Integer.parseInt(scan.nextLine());
} catch (NumberFormatException e) {
System.out.println("What is your age?");
this.setAge();
}
}
好吧,我的问题不清楚。我不确定如何处理当您不输入整数时扫描程序抛出的错误。我该如何处理?我在另一篇文章中发现了“NumberFormatException”,但我不确定这是做什么的。任何人都可以帮我解决这个问题,还是我的问题还不清楚?
答案 0 :(得分:4)
试试这个:
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args) {
Scanner scanner = null;
int age = -1;
do {
try {
scanner = new Scanner(System.in);
System.out.println("What is your age?");
age = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Please enter a number!");
}
} while (age == -1);
System.out.println("You are " + age + " years old.");
if (scanner != null)
scanner.close();
}
}
我得到了这个输出(我第一次输入abc而不是一个数字来重试):
What is your age?
abc
Please enter a number!
What is your age?
35
You are 35 years old.
玩得开心!
答案 1 :(得分:1)
使用scan.nextInt();
代替scan.nextLine();
这样,您无需解析该行。
编辑:哎呀,我误解了你的问题
答案 2 :(得分:1)
您可以使用扫描仪。 你需要;
import java.util.*;
static Scanner console = new Scanner(System.in);
根本不需要解析语句。
age = console.nextInt();
编辑:看到你的编辑后编辑我的答案。
我会将整个尝试放在do循环中。使用一个新的布尔变量来控制你什么时候出来。
boolean excep;
do {
excep = false;
try {
age = console.nextInt();
}
catch (Exception exRef) {
System.out.println("Please input an integer");
console.nextLine();
excep = true;
}
} while (excep);
console.nextLine()只清除一行,因此它不会重新读取最后一个输入。有时它需要。 使用此我不会收到任何关于它运行的错误通知。
答案 3 :(得分:1)
数字格式当程序员尝试将String转换为数字时,java代码中会出现异常。 Number可以是int,float或任何java数值。
转换是由函数Integer.parseInt.Consider完成的,如果你给str的值是“saurabh”,函数调用将无法编译,因为“saurabh”不是int值的合法字符串表示和NumberFormatException将会发生
答案 4 :(得分:0)
试试这个:
static boolean firstTime = true;
public static void main(String[] args) {
boolean firstTime = true;
setAge();
}
public static void setAge()
{
if(firstTime)
{
System.out.println("What is your age?");
firstTime = false;
}
Scanner scan = new Scanner(System.in);
try{
int age = scan.nextInt();
System.out.println(age);
}
catch(InputMismatchException e)
{
setAge();
}
}
答案 5 :(得分:0)
如果您要打印不同的消息,则需要执行以下操作:
import java.util.Scanner;
公共类数字{
public static void main(String args[]) {
Numbers numbers = new Numbers();
numbers.setAge();
}
private boolean alrearyAsked = false;
private int age = 0;
static Scanner scan = new Scanner(System.in);
public void setAge()
{
try {
age = scan.nextInt();
} catch (NumberFormatException e) {
if (alrearyAsked) {
System.out.println("you typed a wrong age, please try again.");
}
else {
System.out.println("What is your age?");
}
this.setAge();
}
}
}