2016-09-08 39 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

的問題就在這裏:

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

變量readings早前聲明:

List<String> readings = ...; 

它的類型是List<String>

toArray返回的類型爲String[]。並且String[]未執行List<String>,因此您無法將toArray的結果指定爲readings

你可以做的是;聲明一個新的變量,類型String[]

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

,然後參考該變量在下面的for循環:

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()列表獲取元素。因此,它應該是:

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

您可能熟悉語言如Python或Ruby,其中變量可以保存任何類型的對象,甚至可以在程序執行中的不同位置使用不同的類型。然而,Java是變量類型在聲明時被確定的語言之一,並且它們從不改變。

在程序中,的readings類型是List<String>

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

List.toArray()返回值是一個數組。數組並不是List s,否則不會有太多的指向該方法。在第313行,編譯器抱怨說你不能將一個數組賦值給List類型的變量。關於類型變量的一點是紅鯡魚。

類似適用於行322:因爲readingsList,你不能陣列索引操作符適用於它。但是,您可以使用List.get(int)方法。

至少有兩種可能的解決方案。如果由於某些原因您在發佈的代碼中不明顯,您需要使用與readings相同元素的String s數組,然後您可以創建一個。例如:

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

然後,你可以以後做

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

在另一方面,如果不特別需要一個數組(我判斷不是沒有可能性更大),那麼你可以刪除線313總之,並在322行

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