0

これで、値 8 の 3 つの整数すべてを 7 に置き換えたいのですが、出力では 7 が 1 つしか得られません...

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値を持つ変数を返します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;

ここで渡す3番目の引数は次のとおりです。

 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 に答える