2014-08-31 311 views
1

通過將它們解析爲整數並獲取總數,我得到了各種String ArrayList的總數,例如[1,3,4] ... 。當我編碼每個單獨的一個時,這工作,但是當我通過傳入整體int值和arraylist來創建一個方法時,我總是得到一個零值。獲取ArrayList總和的方法

一種方法可以節省很多時間。

public class Playing { 
    static ArrayList<String> list; 
    static int Vigor; 

    public static void main(String[] args) { 
    list = new ArrayList<String>();   
     vigoroustotal(list,Vigor); 




public static void Listtotal(String par, int tt) { 

    for (String s : par) { 
     int i = Integer.parseInt(s); 
     tt += i; 

    } 
} 

回答

5

在方法內部對tt所做的任何更改都不會在其他任何地方可見,因爲Java通過值傳遞所有內容。使該方法返回一個int。

+1

「Java按價值傳遞所有東西」 - 指針怎麼樣? – 0x90 2014-08-31 19:19:57

+2

@ 0x90 Java中沒有指針。引用也是按值傳遞的。例如,如果'tt'是一個'String',你將無法改變它。 – Kayaman 2014-08-31 19:21:24

+1

Obligatoratory:http://javadude.com/articles/passbyvalue.htm – The111 2014-08-31 19:23:05

2

您的錯誤她正在通過功能tt並期待它被修改。 Java不會修改傳遞給函數的參數。更正後的代碼會是這樣:

public static int ListTotal(List<String> par) { 
    int tt = 0; 
    for (String s : par) { 
     int i = Integer.parseInt(s); 
     tt += i; 

    } 

    return tt; 
} 

,並會像這樣使用:

Vigor = ListTotal(list); 
0

,道,你需要由於Java通過一切按值返回總,所以您傳遞的int tt將不會在方法外持有對Vigor變量的引用。因此,當你傳入諸如(int,char,boolean,byte等)的基本類型時,你在方法內部對它們所做的任何操作都不會在方法外部可見。 但是,當您傳入參考類型(如ArrayList之類的對象)時,它仍然是按值傳遞的,但該值是對方法外部對象引用的副本。所以,在下面的populateList方法中,我可以在輸入上調用ArrayList.add(),因爲這個輸入,儘管它是按值傳遞的,仍然指向放入此方法的原始對象。

public class Playing { 
    static ArrayList<String> list; 
    static int Vigor; 

    public static void main(String[] args) { 
     list = new ArrayList<String>(); 
     populateList(list);   
     Vigor = getListTotal(list); 
     System.out.println("Total is:\t" + Vigor); 
    } 

    public static void populateList(ArrayList<String> list) { 
     String[] sampleData = { "4", "7", "2" }; 
     for(int i = 0; i < sampleData.length; i++) { 
      list.add(sampleData[i]); 
     } 
    } 

    public static int getListTotal(ArrayList<String> list) { 
     int tt = 0; 
     for (String s : list) { 
      int i = Integer.parseInt(s); 
      tt += i; 
     } 
     return tt; 
    } 
} 
0

那些在Listtotal()方法整數TT,將不會看到任何其他地方,但這種方法的變化。你可以讓該方法返回一個整數來解決這個問題!

public static int Listtotal(ArrayList<String> par) { 
    int tt = 0; 

    for (String s : par) { 
     int i = Integer.parseInt(s); 
     tt += i; 
    } 

    return tt; 
} 

然後你需要改變的主要方法:

public static void main(String[] args) { 
    list = new ArrayList<String>();   
    Vigor = Listtotal(list); 
} 
0

你想要的是......讓我們把它CountingList

public class CountingList { 
    private List<Integer> integers = new ArrayList<Integer>(); 
    private int sum; 

    public add(String s) { 
     int value = Integer.parseInt(s); 
     integers.add(value); 
     sum += value; 
    } 

    private void updateSum() { 
     sum = 0; 
     for (int i : integers) { 
      sum += i; 
     } 
    } 
} 

很明顯,你會想以暴露您需要在課程外部使用的功能,但這是(一種)封裝您所需行爲的方式。