2015-08-31 61 views
2

我想寫一個方法的定義接收到一個掃描儀對象的引用與僅包含整數的輸入流關聯。該方法應讀取所有剩餘的要從流中讀取的整數並返回它們的總和。所以如果輸入是3 51 204 17 1040,返回值應該是1315.這個方法應該遞歸地完成,沒有任何循環。JAVA遞歸添加從輸入流使用掃描儀

不幸的是,我無法訪問正在讀取的文件,但是當我嘗試運行該方法時,我沒有收到任何錯誤,但是我的輸出出錯了。從一個文件有1 2 3我得到129作爲輸出,而不是6,從一個文件與3 51 204 17 1040我得到1444作爲輸出不是1315.任何意見,我要去哪裏錯將不勝感激。

static int sum = 0; 

public static int add(Scanner sc){  
    if(sc.hasNextInt()) { 
     int val = sc.nextInt();  
     sum += val;    
     add(sc);         
    } 
    return sum; 
} 

回答

0

由於sum是一個數據成員(事實上,這是static是無關緊要手頭的問題),每次調用add修改相同的變量,你最終多次添加相同的值。相反,你應該重寫功能,因此它僅使用局部變量:

public static int add(Scanner sc) {  
    if (sc.hasNextInt()) { 
     int val = sc.nextInt();  
     return val + add(sc);         
    } 
    return 0; // No more values in the Scanner to add 
} 
+0

謝謝你,我的思路是,它不會是能夠完成任務一樣,因爲我認爲VAL變量將之前的任何重新定義另外發生。 –