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;
    } 

}   
4

5 回答 5

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;
于 2012-09-22T18:17:09.460 回答
2

您正在返回replacement具有 value的变量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;    
 }
于 2012-09-22T18:19:43.687 回答
1

count函数末尾的语句是

return replacement;

这是您在此处传递的第三个参数:

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

由于该count函数不会改变 的值replacement,因此 的值为number7

于 2012-09-22T18:18:46.323 回答
1

您还可以使用 Collections 框架并使用replaceAll函数。不过,您将不得不使用列表而不是数组。

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

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

于 2012-09-22T18:21:13.933 回答
0

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

你可以做 ::

 for (int n=0;n<list.length();n++) 
 {
    if (list[n] == target) 
    {
       list[n] = replacement;
    }
 }
于 2012-09-22T18:22:27.330 回答