2013-05-03 2 views
1

누군가 내 for 루프가 int가 필요하지만 double을 찾는 것에 대한 오류가 발생하는 이유를 설명 할 수 있습니까? 내 배열이 두 배로 필요합니다. 왜 내 방법이 작동하지 않습니까? 오브젝트 이중 있어야하므로Java에서 배열을 이해하는데 문제가있다

public class RingBuffer 
{ 
    private double[] EmptyBuffer; 
    private int size; 
    private int capacity; 

    public RingBuffer(int capacity){ 
     EmptyBuffer = new double[capacity]; 


    } 

    public int size(){ 
     int counter = 0; 
     for(int i: EmptyBuffer){ 
      if(EmptyBuffer[i] != null) 
       counter++; 
      } 

     return counter; 
    } 
+3

힌트 : double, int 등의 프리미티브는 null 값을 가질 수 있습니까? – fvu

+0

대단히 감사합니다! 그것은 내 마음을 미끄러 져! –

답변

3

다음을 수행하십시오

public class RingBuffer 
{ 
    private double[] EmptyBuffer; 
    private int size; 
    private int capacity; 

    public RingBuffer(int capacity){ 
     EmptyBuffer = new double[capacity]; 


    } 

    public int size(){ 
     int counter = 0; 
     for(double element : EmptyBuffer){ 
      if(element != 0) // Testing for null makes no sense! Test for non-zero? 
       counter++; 
      } 

     return counter; 
    } 

또한, 더블가 null인지 아닌지 테스트는 이해되지 않는다. 아마 그것이 0이 아닌지 테스트해야합니다.

5
for(double i: EmptyBuffer){ 

배열 복식이다. 그게 당신이 향상된 루프의

3

의미를 원하는 경우

for (int i : EmptyBuffer) { ... } 

이 있습니다 ... int로 더블 캐스팅 수있다 "복식 내 배열의 각 정수 i의 요소에 대한 .. "

여기서 알 수 있듯이 전혀 이해가되지 않습니다. 배열은 복소수 배열이므로 포함 된 각 정수 요소를 반복 할 수 없습니다.

EmptyBuffer 복식 배열이므로
if(EmptyBuffer[i] != null) 

, 그것은, 즉 -not- 참조 형 원시 형의 어레이이다

또한 해당 코드의 구문이있다. 원시적 형은 참조 형이 아니기 때문에, null가 아니기 때문에, 배열의 요소를 null로서 테스트하는 것은 의미가 없습니다. 당신은 잘못 foreach 루프를 사용하는

관련 문제