Java 总和计算不正确
我试图解决这个问题: 编写一个Java程序,从用户处读取文件名。该文件最多应包含20个整数。 声明大小为20的数组。从文件中读取所有值并将其存储在数组中。注意有 可以是文件中任意数量的整数。最后,计算并显示数组中存储的所有整数之和。 使用异常处理来检测:Java 总和计算不正确,java,Java,我试图解决这个问题: 编写一个Java程序,从用户处读取文件名。该文件最多应包含20个整数。 声明大小为20的数组。从文件中读取所有值并将其存储在数组中。注意有 可以是文件中任意数量的整数。最后,计算并显示数组中存储的所有整数之和。 使用异常处理来检测: 读取非整数的文件的输入不正确 使用无效数组索引 文件不存在的文件名无效 我目前的问题是金额不正确。这是我的密码 package labtask.pkg10; import java.io.File; import java.io.*; im
- 读取非整数的文件的输入不正确
- 使用无效数组索引
- 文件不存在的文件名无效
package labtask.pkg10;
import java.io.File;
import java.io.*;
import java.util.*;
import java.util.ArrayList;
public class task2 {
public static void main(String[] args) {
int integers[] = new int[20];
Scanner read = new Scanner(System.in);
int sum = 0;
int num = 0;
String filename;
System.out.println("enter the file name ");
filename = read.next();
try {
File file = new File(filename);
Scanner inputFile = null;
inputFile = new Scanner(file);
int i = 0;
while (inputFile.hasNext()) {
num = Integer.parseInt(inputFile.next());
integers[i] = num;
}
for (int x = 0; x < 20; x++) {
sum += num;
}
System.out.println("sum are : " + sum);
} catch (FileNotFoundException e) {
System.out.println("file not found");
} catch (NumberFormatException e) {
System.out.println("please enter only integer number");
}
}
}
我得到以下输出:
输入文件名gg.txt
总数为:40
生成成功(总时间:2秒)
为什么总和计算不正确?您将最后的输入添加到总和中20次,而不是添加不同的数字 将代码更改为:
while(inputFile.hasNext())
{
num = Integer.parseInt(inputFile.next());
integers[i++] = num;
}
for (int x = 0 ; x<integers.length; x ++)
{
sum += integers[x];
}
您将最后一个输入添加20次到总和,而不是添加不同的数字 将代码更改为:
while(inputFile.hasNext())
{
num = Integer.parseInt(inputFile.next());
integers[i++] = num;
}
for (int x = 0 ; x<integers.length; x ++)
{
sum += integers[x];
}
由于Eran已经回答了您的问题,我想为其他人想出一个解决方案,而不是要求使用int[]。需要添加异常处理,但为了示例起见,让我们假设该文件是正常的-以下是您完整的“求和逻辑”:
由于Eran已经回答了您的问题,我想为其他人想出一个解决方案,而不是要求使用int[]。需要添加异常处理,但为了示例起见,让我们假设该文件是正常的-以下是您完整的“求和逻辑”:
为什么你认为总数是正确的?您的代码显式忽略数组,只对
num
进行汇总。提示:这里唯一真正的答案是:当您的代码出现意外行为时,不要向其他人寻求帮助(至少不是第一步)。取而代之的是:使用跟踪语句来更清楚地说明代码在做什么。换句话说:如果你不明白你的代码在做什么,让它对你可见。那么,追踪资料,或者学习使用调试器。为什么你希望总和是正确的?您的代码显式忽略数组,只对num
进行汇总。提示:这里唯一真正的答案是:当您的代码出现意外行为时,不要向其他人寻求帮助(至少不是第一步)。取而代之的是:使用跟踪语句来更清楚地说明代码在做什么。换句话说:如果你不明白你的代码在做什么,让它对你可见。因此,跟踪东西,或者学习使用调试器。对于单个循环,甚至不再需要整数数组。如果使用了更大的文件,它还可以限制出现ArrayIndexOutOfBoundException的风险。@Eran还有一个问题。。为什么两个循环不起作用,只有一个循环起作用?@sozai因为循环的索引是错误的-应该是x
而不是i
-现在修复了,还因为i
在while循环中没有增加。另外,请注意,如果文件中包含的数字越多,那么数组大小是20。考虑使用一个for循环代替WHYHI @ SoZAI,如果这个答案解决了你的问题,请考虑。有关如何执行此操作的说明,请参阅。对于单个循环,甚至不再需要整数数组。如果使用了更大的文件,它还可以限制出现ArrayIndexOutOfBoundException的风险。@Eran还有一个问题。。为什么两个循环不起作用,只有一个循环起作用?@sozai因为循环的索引是错误的-应该是x
而不是i
-现在修复了,还因为i
在while循环中没有增加。另外,请注意,如果文件中包含的数字越多,那么数组大小是20。考虑使用一个for循环代替WHYHI @ SoZAI,如果这个答案解决了你的问题,请考虑。有关如何执行此操作的说明,请参阅。
while(inputFile.hasNext()) {
num = Integer.parseInt(inputFile.next());
integers[i++] = num;
sum += num;
}
Integer sum = Files.readAllLines(Paths.get("numbs.txt"))
.stream()
.mapToInt(Integer::parseInt)
.sum();
System.out.println(sum); // 71