输入整数错误抛出

时间:2014-01-30 18:20:19

标签: java input error-handling integer try-catch

有人可以帮助我使这段代码更整洁。我宁愿使用parse int而不是缓冲读取器。我希望我的代码循环,直到用户输入一个数字。如果没有代码打印出相同的语句两次,我无法弄清楚如何做到这一点。

public void setAge() 
{
    try {
        age = Integer.parseInt(scan.nextLine());
    } catch (NumberFormatException e) {
        System.out.println("What is your age?");
        this.setAge();
    }
}

好吧,我的问题不清楚。我不确定如何处理当您不输入整数时扫描程序抛出的错误。我该如何处理?我在另一篇文章中发现了“NumberFormatException”,但我不确定这是做什么的。任何人都可以帮我解决这个问题,还是我的问题还不清楚?

6 个答案:

答案 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();
    }
}

}