2016-09-08 19 views
0

このコードが正しく動作するように読み込みを行うことには苦労しています。私は、このエラーをどのように回避するかを考え出すのに問題があります。 There is a bug associated with itしかし、これが私に関連しているかどうかはわかりません。互換性のない型と配列に必要なエラーが発生する

List<String> readings = new ArrayList<String>(); 
Matcher m = Pattern.compile("\\d{3}").matcher(s); 
while (m.find()) { 
    readings.add(m.group()); 
} 
readings = readings.toArray(new String[0]); 
for (int i = 0; i < numberOfElectrodes; i++) { 
    packet[i] = Integer.parseInt(readings[i]); 

} 

それはエラーを示しています

Error:(313, 44) java: incompatible types: no instance(s) of type variable(s) T exist so that T[] conforms to java.util.List

Error:(322, 58) java: array required, but java.util.List found

答えて

3

問題ここにある

List<String> readings = ...; 

それのタイプはList<String>です。

toArrayによって返されるタイプはString[]です。 String[]List<String>を実装していないため、toArrayの結果をreadingsに割り当てることはできません。

できることは次のとおりです。タイプString[]で新しい変数を宣言:

String[] readingsArray = readings.toArray(new String[0]); 

そしてループについては、以下にその変数を参照してください。また

for (int i = 0; i < numberOfElectrodes; i++) { 
    packet[i] = Integer.parseInt(readingsArray[i]); // <-- 

は、あなたがString[]の作成をスキップすることができ、かつforループを使用してください:

// readings = readings.toArray(new String[0]); 
for (String element : readings) { // For each string in 'readings' 
    packet[i] = Integer.parseInt(element); 
+0

ありがとうございました。 –

1
  1. readings = readings.toArray(new String[0]);

    readingsがリストされているので、あなたがそれに配列を割り当てることはできません。再び

  2. packet[i] = Integer.parseInt(readings[i]); 
    

    readingsは、配列ではなく、あなたがget()を使用する必要がリストから要素を取得します。変数readingsが早くとして宣言された

    readings = readings.toArray(new String[0]); 
    

    :したがって、それは次のようになります。

    packet[i] = Integer.parseInt(readings.get(i)); 
    
0

PythonやRubyなどの言語で、変数は任意の型のオブジェクトを保持することができ、プログラム実行のさまざまなポイントで異なる型のオブジェクトを保持することもできます。しかし、Javaは、変数の型が宣言された時点で決定され、変更されることのない言語の中にあります。あなたのプログラムで

readingsのタイプはList<String>次のとおりです。

   List<String> readings = new ArrayList<String>(); 

List.toArray()の戻り値が配列です。配列はListではありません。そうでなければ、そのメソッドにはあまり意味はありません。313行目でコンパイラは、Listの変数に配列を代入できないと訴えています。型変数に関するビットは赤いニシンです。

同様にライン322に適用されます。readingsListているので、あなたはそれに配列インデックス演算子を適用することはできません。ただし、List.get(int)メソッドを使用することはできます。

少なくとも2つの解決策があります。何らかの理由で投稿したコードに明白でない場合は、具体的にreadingsと同じ要素を持つStringの配列が必要な場合は、作成することができます。例:次に、あなたが後で一方

packet[i] = Integer.parseInt(readingsArray[i]); 

を行うことができ

String[] readingsArray = readings.toArray(new String[0]); 

あなたは(具体的に私はいない可能性が高い判断)の配列を必要としない場合は、ライン313を削除することができます全部で322行目で

packet[i] = Integer.parseInt(readings.get(i)); 
関連する問題