为什么这只返回一个7?

时间:2012-09-22 18:15:08

标签: java arrays

我想要将值8的所有三个整数替换为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;
    } 

}   

5 个答案:

答案 0 :(得分:4)

做的时候

n = replacement;

您只是更改了局部变量n的值,而不是列表中的值。

而且你没有计算你改变的价值。

你可以这样做:

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

答案 1 :(得分:2)

您要返回值为replacement的变量7

您可以使用此代码获取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;    
 }

答案 2 :(得分:1)

count函数末尾的陈述是

return replacement;

这是你在这里传递的第三个参数:

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

由于count函数未更改replacement的值,number的值将为7

答案 3 :(得分:1)

您还可以使用Collections框架并使用replaceAll函数。您必须使用列表而不是数组。

replaceAll方法与count count方法具有类似的签名。

如果可以的话,最好使用API​​,因为这将被尝试和测试。

答案 4 :(得分:0)

问题是你只是改变了局部变量的值, 你需要在你传递的数组中改变它。

你可以做::

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