2

配列内の最小値を削除しようとしています。配列を反復処理して最小値を見つけましたが、それを削除しようとすると次のようになります。

    SportStacker.java:111: error: cannot find symbol
            times.remove(slowestTime);
                 ^
    symbol:   method remove(double)
    location: variable times of type double[]
    1 error

特定のインデックスでダブルを削除したいだけのときに、ダブル[]を削除するように指示していることを理解しています。最小値を含むインデックスで double を削除したいのですが、どうすればいいですか? これは私のメソッドのコードです。

     public double removeSlowestTime() {

     double slowestTime;

     for (int i = 0; i < times.length; i++) {
        if (times[i] == 0) {
           continue;
        }
        else {
           if (slowestTime < times[i]) {
              slowestTime = times[i];
            times.remove(slowestTime);
           }
        }
     }
     return slowestTime;
4

5 に答える 5

2

remove()配列にはメソッドがありません。ArrayListその値を使用するか、次のようなデフォルト値に設定できます。

times[someIndex] = null; // put any valid default value based on your array
于 2012-10-16T00:01:19.170 に答える
2

要素を削除しようとしている方法が正しくないようです。試す

times = ArrayUtils.removeElement(times, slowestTime);

このような多くの操作を実行する場合は、CollectionまたはArrayListの方が適している場合があります。

于 2012-10-16T00:01:25.033 に答える
0

removeメソッドとして存在しないため、配列を呼び出すことはできません。配列から要素を削除する簡単な方法はありません。java.util.List代わりに、などの機能を提供するの実装を使用することをお勧めしremoveます。

于 2012-10-16T00:03:37.527 に答える
0

以下を使用して、double配列から要素を削除することはできません。

times.remove(slowestTime);

配列は固定サイズであり、一度作成した要素の数を変更することはできません。

double新しいアレイを構築できます。配列内で最も遅い時間の位置を保存できます。

slowestIndex = i;
...

ループの完了時に新しい配列を作成します。

   double[] newTimes = new double[times.length - 1];
    for (int i=0, j=0; i < times.length - 1; i++) {
       if (i != slowestIndex) {
          newTimes[j++] = newTimes[i];
       }
    }
于 2012-10-16T00:01:51.843 に答える
0

この回答の他の場所で言及されているように、JavaScript や Python などの言語とは異なり、Java の配列には、配列が定義されるときに定義される要素の数が固定されています。

int[] foo = new int[10]; // this array object will always have 10 elements
foo[0] = 42;
foo = new int[20];       // now foo refers to a different array
                         // object with 20 elements
return foo[0];           // so this will return the default int value, 0, not 42

配列に類似したタイプのオブジェクトを探している場合は、ArrayList を使用します。

ArrayList<Integer> foo = new ArrayList<Integer>(); // this has zero elements
foo.add(42);                                      // now it has one
foo.add(8675309);                                 // now it has two
foo.remove(0);                                    // now you've removed the first
return foo.get(0);       // returns 8675309, because everything shifted over by one

ただし、リストから最下位の項目を頻繁に削除する必要があり、多くの項目があり、パフォーマンスが重要な場合は、PriorityQueue. これは、最小のものから最大のものへと常に順序を保持するデータ型です。つまり、アイテムを挿入するのに少し時間がかかります ( O(log n)、またはリスト内のアイテム数の対数に比例します) が、最小のアイテム ( O(1)、またはリストの長さに関係なく定数) を削除するのは高速です。それに比べて、リストを使用すると、アイテムを追加するのに非常に短時間でO(1)済みますが ( )、最下位 ( ) を検索するときにすべてのアイテムを検査する必要がありますO(n)

PriorityQueue<Integer> foo = new PriorityQueue<Integer>();
foo.add(300);
foo.add(100);
foo.add(200);
int a = foo.remove();  // 100
int b = foo.remove();  // 200
int c = foo.remove();  // 300
于 2012-10-16T01:47:48.927 に答える