当前位置: 首页 > 知识库问答 >
问题:

我如何修复java中的NumberFormatException[重复]

谢旭
2023-03-14

嗨,我是Java的初学者,我正在尝试编写这个程序,我可以在其中输入数字,但是当我输入“完成”时,我得到了我称为总计的值,numberInput。但是,当我运行它并输入“完成”时,我在线程“main”java.lang.NumberFormatException中得到异常:对于输入字符串:“完成”。你知道我如何修复这个问题吗?

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

at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at repeat.numberReader(repeat.java:15)
at repeat.main(repeat.java:23)

这是我的代码:

import java.util.Scanner;

public class repeat{
    public void numberReader(){
        Scanner myScanner = new Scanner(System.in);
        int total = 1;
        int numberInputs = 1;
        String userInput;

        do {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            total = total + Integer.parseInt(userInput);
            numberInputs++;
        } while (!"done".equals(userInput));
        System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
    }

    public static void main(String[] args){
        repeat instance = new repeat();
        instance.numberReader();
    }
}

谢谢你的帮助

共有3个答案

傅丁雷
2023-03-14

您正在检查用户输入的值是否为“已完成”,但在调用Integer之后进行检查。parseInt()。调用整数。parseInt(“done”)引发NumberFormatException,因为字符串“done”无法解析为整数。

do {
  System.out.println("Enter a number: ");
  userInput = myScanner.nextLine();
  ***ERROR HERE***
  total = total + Integer.parseInt(userInput);
  numberInputs++;
} while (!"done".equals(userInput));
  System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}

您可以通过几种方法解决此问题。最简单的方法是对代码进行重新排序,以便在收到输入后立即检查输入,并且只在收到输入后进行解析。但这确实需要有两次提示(一次在循环之前,一次在循环底部)。如果第一个条目是“完成”,这也会有问题,因为循环始终至少执行一次,而循环总是执行一次。您可以更改为标准的“完成”。这也不会处理预期的“完成”字符串以外的字符串。

System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
do {
  total = total + Integer.parseInt(userInput);
  numberInputs++;
  System.out.println("Enter a number: ");
  userInput = myScanner.nextLine();
} while (!"done".equals(userInput));
  System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}

或者,您也可以实现错误处理来捕获和处理异常,但这要复杂一些。这听起来像是家庭作业,错误处理可能超出了您的范围,所以我只考虑第一个选项。

作为补充说明,您应该考虑更改“完成”。等于(userInput)到userInput。等于(“完成”)。它们在功能上是相同的,但是第二条语句更清楚您的意图是什么,即查看用户输入是否是“完成的”。第一个问题对你自己和其他人来说都很难阅读和理解。

许远航
2023-03-14

你的代码的问题在这一行

total = total + Integer.parseInt(userInput);

假设用户输入字符串“完成”。

现在,您的代码将尝试将字符串解析为整数,即。

total=total+Integer.parseInt("done");

因此,将发生NumberFormatException。

正确的代码将是

import java.util.Scanner;

public class repeat{
    public void numberReader(){
        Scanner myScanner = new Scanner(System.in);
        int total = 1;
        int numberInputs = 1;
        String userInput;



        while (true)
        {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            if("done".equals(userInput))
            {
                System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
                break;
            }
            else
            {
                total = total + Integer.parseInt(userInput);
                numberInputs++;
            }
        }
    }

    public static void main(String[] args){
        repeat instance = new repeat();
        instance.numberReader();
    }
}
江恩
2023-03-14

如网站:NumberFormatException所示,该异常是由于尝试将不代表数字的字符串转换为整数引起的,在本例中为:“done”

此行触发异常:

total = total + Integer.parseInt(userInput);

您可以按如下方式避免和处理此异常:

public class repeat{
    public void numberReader(){
        Scanner myScanner = new Scanner(System.in);
        int total = 1;
        int numberInputs = 1;
        String userInput;

        boolean done = false; // Stop when true

        do {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            try{        // Managing the exception
                total = total + Integer.parseInt(userInput);
            } catch(NumberFormatException e){
                if ("done".equals(userInput)){  // it's done!!!!
                    done = true;
                }
            }
            numberInputs++;
        } while (!done);
            System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
        }

    public static void main(String[] args){
        repeat instance = new repeat();
        instance.numberReader();
    }
}

阅读更多关于try/catch的信息

 类似资料:
  • 你好,我有以下问题 查询在我的localhost(XAMMP)中运行良好,但在其他任何地方它都会给我这个错误 示例:http://sqlfiddle.com/#!9/e19e8c/2

  • 我试图在Netbeans中运行这段简单的代码,并以某种方式不断得到一个“else-without-if”错误。 我也在Eclips中运行了这个,在那里我得到了一条评论,其他的应该转换成一段时间,这让我更加困惑。我已经做了一些这样的例子,它们很有效。 我还省略了if语句末尾的分号,但它不起作用。

  • 在我的代码中 当我运行程序时,它抛出一个数字格式异常 我做错了什么?这似乎相对简单,但不起作用。

  • 问题内容: 运行Java程序时出现错误。有什么问题,我该如何解决? 问题答案: 没有更多的信息,很难找出问题所在,但根本原因是,您可能是针对缺少该方法的该类的另一个版本编译了一个类,而不是运行该类时所使用的方法。 查看堆栈跟踪…如果在库中的对象上调用方法时出现异常,则很可能在编译和运行时使用库的不同版本。确保两个地方的版本都正确。 如果在调用由类实例化对象的方法,当出现异常你做,那么你的构建过程似

  • 异常在线程"main"java.lang.IndexOutOfBoundsExc0019:索引: 0,大小: 0在java.util.ArrayList.range检查(ArrayList.java:604) 符合arraylist.java 一致 请帮帮忙