2017-06-19 81 views
1

我試圖解決這個問題:不正確的總和計算的

編寫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
    BUILD SUCCESSFUL(總時間:2秒)

    爲什麼總數沒有正確計算?

    +0

    爲什麼你期望的總和是正確的?你的代碼明確地忽略了數組並且總結了'num'。 – Tom

    +2

    提示:在這裏只有一個**和**唯一的答案:當你的代碼出乎意料地行爲時,不要求助於其他人(至少不是第一步)。相反:使用** trace **語句使其*更清晰*您的代碼正在做什麼。換句話說:如果你不明白你的代碼在做什麼,那麼就給你看。所以,跟蹤東西,或學習使用調試器。 – GhostCat

    回答

    2

    正如埃倫已經回答了你的問題,我要來爲其他人的解決方案,而不是具有使用int []的要求。異常處理需要添加,但是讓我們假設該文件將確定例如着想 - 以下是你的完整的「求和邏輯」:

    Integer sum = Files.readAllLines(Paths.get("numbs.txt")) 
        .stream() 
        .mapToInt(Integer::parseInt) 
        .sum(); 
    System.out.println(sum); // 71 
    
    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; 
    } 
    
    +0

    當我使用ur代碼..我可以運行它,但它不會計算總和我爲什麼... – sozai

    +0

    哦其工作thx :) – sozai

    +0

    隨着一個循環,整數數組甚至不再需要。如果使用更大的文件,它會限制產生ArrayIndexOutOfBoundException的風險。 –