总和计算总数不正确

时间:2017-06-19 13:09:55

标签: java

我试图解决这个问题:

  

编写一个从用户读取文件名的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");
       }
   }
}

和我的文字文件:

2
2
2
2
2
2
2
2
2
12
23
2
2
2
2
2
2
2
2
2

我得到以下输出:

  

输入文件名
  gg.txt
  总和是:40
  建立成功(总时间:2秒)

为什么没有正确计算总和?

2 个答案:

答案 0 :(得分:5)

您将最后一个输入添加到总和中20次,而不是添加不同的数字。

将您的代码更改为:

while(inputFile.hasNext())
{
    num = Integer.parseInt(inputFile.next());

    integers[i++] = num;
}

for (int x = 0 ; x<integers.length; x ++)
{
    sum += integers[x];
}

或者只使用一个循环:

while(inputFile.hasNext()) {
    num = Integer.parseInt(inputFile.next());
    integers[i++] = num;
    sum += num;
}

答案 1 :(得分:2)

由于Eran已经回答了你的问题,我想为其他人提出一个解决方案,而不是要求使用int []。需要添加异常处理,但是为了示例,我们假设该文件是正常的 - 以下是您的完整&#34;求和逻辑&#34;:

Integer sum = Files.readAllLines(Paths.get("numbs.txt"))
    .stream()
    .mapToInt(Integer::parseInt)
    .sum();
System.out.println(sum); // 71