2016-09-08 4 views
0

이 코드가 올바르게 작동하려면 판독 값을 얻는 데 어려움을 겪고 있습니다. 이 오류를 극복하는 방법을 파악하는 데 문제가 있습니다. There is a bug associated with it,하지만 이것이 나에게 관련이 있는지 여부는 확실하지 않습니다. readings 이후호환되지 않는 형식 및 배열 필요 오류 가져 오기

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>입니다입니다

List<String> readings = ...; 

:로

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

변수 readings가 이전에 선언했다.

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-loop를 사용하십시오.

// 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]);

    이 목록입니다, 당신이 그것에 배열을 할당 할 수 없습니다 :

    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]); 
    
    } 
    

    이 오류가 표시됩니다. 다시

  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이 아니며, 그렇지 않은 경우에는 그 방법이별로 중요하지 않습니다.313 줄에서 컴파일러는 List 변수에 배열을 할당 할 수 없다는 불평을합니다. 유형 변수에 관한 비트는 빨간 청어입니다. 유사

라인 (322)에 적용 readingsList이기 때문에, 당신이 그것을에 배열 색인 연산자를 적용 할 수 없습니다. 그러나 List.get(int) 방법을 사용할 수 있습니다.

가능한 해결책은 두 가지가 있습니다. 어떤 이유로 코드를 게시 한 것이 분명하지 않은 경우 readings과 동일한 요소가있는 String의 배열이 필요하다면 하나를 만들 수 있습니다. 예를 들어 : 특별히 (내가 못하는 것보다 더 가능성 판단) 배열을 필요로하지 않는 경우

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

그런 다음 나중에 다음 라인 (313)을 삭제할 수 있습니다, 반면에

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

을 할 수 전체적으로 322 행에 있습니다.

packet[i] = Integer.parseInt(readings.get(i)); 
관련 문제