2017-08-30 7 views
-1

編集:SOLVED、簡単な間違いです。私を助けてくれた人にありがとう!"整数はE []"に変換できませんが、他の場所では動作しますか?

私は周りを見回して、実際に私のニーズに合った解決策を見つけることができませんでした。私はリストの最大要素を表示する一般的なメソッドをコーディングしています。教科書にはメソッドのコード行がすでに提供されています:public static <E extends Comparable<E>> E max(E[] list)。このため、私のメソッドは、E[]をパラメータとして渡す必要があると仮定します(後で重要です)。

ここは、完璧に正常に動作する私のメインクラスです。これはInteger配列を25のランダムなintで塗りつぶし、私のmaxメソッドを使って、の要素を返します。

public class Question_5 { 
public static void main(String[] args) { 
    Integer[] randX = new Integer[25]; 
    for (int i = 0; i < randX.length; i++) 
     randX[i] = new Random().nextInt(); 

    System.out.println("Max element in array \'" + randX.getClass().getSimpleName() + "\': " + max(randX)); 
} 

public static <E extends Comparable<E>> E max(E[] list) { 
    E temp = list[0]; 
    for (int i = 1; i < list.length; i++) { 
     if (list[i].compareTo(temp) == 1) 
      temp = list[i]; 
     System.out.println("i: " + list[i] + " | Temp: " + temp + " | Byte val: " + list[i].hashCode()); // for debugging 
    } 
    return temp; 
} 

誰かがE[] listからInteger[] listにパラメータを変更するために言及する前に、私は教科書は私がE[]でそれを維持するが、この問題のための整数型の配列を使用したいと仮定しています。今まで私が言ったように、このコードはコンパイラやランタイムエラーがなくてもうまく動作します。

しかし、私の教授は、私たちはJUnitテストを実施したい、と私は先に行って、このコードをホイップアップ:

class Question_5_TEST { 

@Test 
void max() { 
    Integer[] randX = new Integer[25]; 
    for (int i = 0; i < randX.length; i++) 
     randX[i] = new Random().nextInt(); 

    for (int i = 0; i < randX.length; i++) { 
     Assertions.assertEquals(expectedMax(randX[i]), Question_5.max(randX[i]), "i = " + i); 
    } 
} 

private <E extends Comparable<E>> E expectedMax(E[] list) { 
    Arrays.sort(list); 
    return list[0]; 
} 

}

ここで私は問題を抱えてい場所です。私は、次のように言ってコンパイラエラーを取得しています

必要

:E []は が見つから:java.lang.Integerの java.lang.Integerのは、どのようにE []

に変換することはできません私のメインクラスはうまく動作しますが、Testingクラス内でコンパイラの問題が発生しますか?なぜこれが起こっているのか分からなくなってしまいました。私が以前に言ったように、パラメータのタイプを変更して修正することができましたが、それを行う方法はありますか?

ありがとうございます。

+0

注: 'expectedMax'メソッドは配列を並べ替え、最小値を返します。 'Collections.max(Arrays.asList(list))'を使う方が良いでしょう。 –

答えて

0

expectedMaxは1つのIntegerを呼び出していますが、配列以外のメソッドを呼び出しています。

だから、このラインに沿っ

Assertions.assertEquals(expectedMax(randX[i]), Question_5.max(randX[i]), "i = " + i); 

置き換える

Assertions.assertEquals(expectedMax(randX), Question_5.max(randX[i]), "i = " + i); 
+0

どうもありがとう、私はこれを逃したか分からない...私は迅速な対応に感謝します。 – Infinity

0

にライン

Assertions.assertEquals(expectedMax(randX[i]), Question_5.max(randX[i]), "i = " + i); 

を変更
Assertions.assertEquals(expectedMax(randX), Question_5.max(randX[i]), "i = " + i);

+1

お返事ありがとうございます! – Infinity

関連する問題