【问题标题】:Simple mileage algorithm - throwing weird error?简单的里程算法 - 抛出奇怪的错误?
【发布时间】:2021-02-05 05:06:25
【问题描述】:

下面的代码采用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)

这怎么可能?

【问题讨论】:

  • 您有两个使用n 作为结束条件的循环。外部循环重复直到 n 为 -1,内部循环从 1 重复到 n

标签: java loops split


【解决方案1】:

请仔细查看您的循环状况,以及您是如何接受输入的。

就空格分隔的输入而言,它们之间可能有多个空格。

试试这个:

String[] parts = s.split("\\s+");

这将分割任意数量的连续空格。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    例如:
    12 3
    15 8

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2013-11-01
      • 2017-07-25
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多