Java字符串到整数,没有编译错误但运行时失败

时间:2017-11-12 08:11:04

标签: java

我们收到以下错误:

java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

对于此代码:

Scanner readyBoi;
ArrayList<Item> shopStock = new ArrayList<Item>();

public Shop(String stock){
    this.readyBoi = new Scanner(stock);
    while(readyBoi.hasNextLine()){
        String temp = readyBoi.nextLine();
        Tycoon.out(temp);
        String tempArray[] = temp.split("\t", 5);
        Item i = new Item(
            Integer.parseInt(tempArray[0]),
            Integer.parseInt(tempArray[1]),
            Integer.parseInt(tempArray[2]),
            tempArray[3],
            tempArray[4]
        );
        this.shopStock.add(i);
    }
}

这是引用的项目声明:

Item(int id, int price, int generation, String name, String desc)

代码编译正确,但会产生运行时错误。

2 个答案:

答案 0 :(得分:1)

问题在于您的输入。这是Stock String。似乎,您成功地将该String拆分为tempArray []。您的代码期望此数组的前三个元素为整数值。但不幸的是没有。所以请检查您的输入股票。可能是id,price或generation无法解析为Int。

答案 1 :(得分:0)

我发现这个其他stackoverflow答案很有帮助; @CraigTP How to check if a String is numeric in Java

但是您可以捕获异常并处理它,如下所示:

Scanner readyBoi;
ArrayList<Item> shopStock = new ArrayList<Item>();

public Shop(String stock){
  this.readyBoi = new Scanner(stock);
  while(readyBoi.hasNextLine()){
    String temp = readyBoi.nextLine();
    Tycoon.out(temp);
    String tempArray[] = temp.split("\t", 5);
    try{
      Item i = new Item(
        Integer.parseInt(tempArray[0]),
        Integer.parseInt(tempArray[1]),
        Integer.parseInt(tempArray[2]),
        tempArray[3],
        tempArray[4]);
        this.shopStock.add(i);
    }catch(NumberFormatException nfe){
       System.out.println("One of the params is not an integer");
    }
  }
}