2012-09-22 227 views
0

我想這個更換的價值8所有三個整數到7.但產量只給我一七...爲什麼這隻返回一個7?

public class hore { 

    public static void main(String[] args) { 
     int[] list = {8, 9, 8, 6, 9, 8}; 
     int number = count(list, 8, 7); 
     System.out.print(number); 
    } 


    public static int count(int[] list, int target, int replacement) { 
     for (int n : list) { 
      if (n == target) { 
       n = replacement; 
      } 
     } 

     return replacement; 
    } 

} 
+0

你有什麼期望能夠打印?在您的代碼版本中,您只需打印替換號碼。 – Edd

+0

我想打印每個替換的號碼 7,7,7 –

回答

4

在做

n = replacement; 

你只是改變了值的局部變量n,而不是列表中的值。

而你不計算你改變的值。

你可以這樣做:在你count函數結束

int nbChanges = 0; 
for (int i=0; i<list.length; i++) { 
     if (list[i]==target) { 
      list[i] = replacement; 
      nbChanges++; 
     } 
} 
return nbChanges; 
+0

我仍然只得到一個7 ... –

+0

@Sing Sandibar當你說「get」時,你是什麼意思?如果這段代碼正確實現,你應該有一個'int []'數組(稱爲列表),你應該打印3(發生的替換次數) – Edd

+0

嗨。它現在有效。也許我以前做錯了什麼。謝謝 –

1

的語句是

return replacement; 

這是因爲你在這裏傳遞的第三個參數:

int number = count(list, 8, 7); 

由於count函數不會更改值replacementnumber的值將爲7

2

您將返回值爲7的變量replacement

您可以使用此代碼得到的8's數的計數: -

public static int count(int[] list, int target, int replacement) { 

    int count = 0; 
    for (int i = 0; i < list.length; list++) { 
     if (list[i] == target) {  
      count++; 
      list[i] = replacement; 
     } 
    } 
    return count;  
} 
1

你也可以使用集合框架並使用replaceAll功能。儘管如此,你將不得不使用列表而不是數組。

replaceAll方法與您的count方法有類似的簽名。

如果可以的話,使用API​​總是更好,因爲這將會被嘗試和測試。

0

問題是你只是改變局部變量的值, 你需要改變你傳遞的數組中的值。

你可以做::

for (int n=0;n<list.length();n++) 
{ 
    if (list[n] == target) 
    { 
     list[n] = replacement; 
    } 
}