首页 > 解决方案 > 简单的里程算法 - 抛出奇怪的错误?

问题描述

下面的代码接受n输入(-1 退出)。对于每个输入,用户输入以空格分隔的每小时英里数和所在小时数的字符串。随着新数据的输入,小时数会增加。

样本输入:

1

20 2

30 6

10 7

-1

样本输出:

170 miles (20*2 + 30*(6-2) + 10*(7-6))

编码:

package mypackage;

import java.io.*;

public class SpeedLimit {

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        while (n != -1) {
            int miles = 0;
            int hours = 0;
            for (int i = 1; i <= n; i++) {
                String s = reader.readLine();
                String[] parts = s.split(" "); // mph hrs
                miles += Integer.parseInt(parts[0]) * (Integer.parseInt(parts[1]) - hours);
                hours += Integer.parseInt(parts[1]);
            }
            System.out.println(miles + " miles");
            n = Integer.parseInt(reader.readLine());
        }
    }

}

我收到的错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "30 6"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at changemyname.SpeedLimit.main(SpeedLimit.java:21)

这怎么可能?

标签: javaloopssplit

解决方案


我检查并运行了您的代码,它运行良好。

  • 请注意,您必须首先提供一个integer不带空格的值。

int n = Integer.parseInt(reader.readLine());

如果有任何空格,则会出现错误,因为您无法将String带空格的a 转换为int. 因此,它绝对应该是一个没有空格或任何其他非数值的值。

例如:
32 - 正确
24 5 - 错误
3h - 错误...

  • While loop将检查该值是否等于-1,如果不是,则进入for loop. 它再次要求用户输入成对的值

例如:
12 3
15 8

循环将重复n多次。(n是您之前输入的值。)

  • 然后,您的程序将显示总里程数。
  • 然后,它再次询问该n值并重复该过程。您应该输入-1以退出循环和编程。

我认为您在键入值时犯了一些错误。确保以适当的方式输入您的值。


推荐阅读