Java 总和计算不正确

Java 总和计算不正确,java,Java,我试图解决这个问题: 编写一个Java程序,从用户处读取文件名。该文件最多应包含20个整数。 声明大小为20的数组。从文件中读取所有值并将其存储在数组中。注意有 可以是文件中任意数量的整数。最后,计算并显示数组中存储的所有整数之和。 使用异常处理来检测: 读取非整数的文件的输入不正确 使用无效数组索引 文件不存在的文件名无效 我目前的问题是金额不正确。这是我的密码 package labtask.pkg10; import java.io.File; import java.io.*; im

我试图解决这个问题:

编写一个Java程序,从用户处读取文件名。该文件最多应包含20个整数。 声明大小为20的数组。从文件中读取所有值并将其存储在数组中。注意有 可以是文件中任意数量的整数。最后,计算并显示数组中存储的所有整数之和。 使用异常处理来检测:

  • 读取非整数的文件的输入不正确
  • 使用无效数组索引
  • 文件不存在的文件名无效
我目前的问题是金额不正确。这是我的密码

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