java - 简单的里程算法 - 抛出奇怪的错误?
问题描述
下面的代码接受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)
这怎么可能?
解决方案
我检查并运行了您的代码,它运行良好。
- 请注意,您必须首先提供一个
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以退出循环和编程。
我认为您在键入值时犯了一些错误。确保以适当的方式输入您的值。
推荐阅读
- ethereum - is not contract address during truffle test
- javascript - 如何在 Laravel 中为可拖动列实现 AJAX
- powershell - “以不同的用户身份运行”与 PowerShell 的行为不同
- ios - Mysterious green overlay on iPad map
- here-api - 此处跟踪无法添加设备
- python - 没有标题的 CSV 中的 Pandas 绘图图
- javascript - how do i make the width of the label on free contact form wider?
- javascript - 如何从(0,0)开始获取具有长度和角度的二维坐标
- c# - 强制保存 Sitefinity 小部件 MVC 控制器属性
- c# - 您可以自动将“this”作为参数传递吗?