2015-01-23 5 views
-1

내 컴퓨터 과학 과정에서는 자동 판매기 비즈니스를 시뮬레이트하는 프로그램을 만들고 있습니다.까다로운 NullPointerException

VendingMachine pv0001 = new SnackMachine(19.00); 
pv0001.addItem(new Chips("Doritos")); 

그것은 분명히이 경우 선언문 SnackMachine 코드의 선언에 따른되고이 오류

Exception in thread "main" java.lang.NullPointerException 
    at SnackMachine.addItem(SnackMachine.java:35) 
    at Driver.main(Driver.java:9) 

에게 반환, 모든 오류를하지 보인다, 그러나 다른 드라이버에서이 줄을 실행합니다 :

public boolean addItem(VendingMachineItem item) 
    { 
     if((item instanceof Snack) && (inventory.size() < maxCapacity))//error on this line 
     { 
      inventory.add(item); 
      return true; 
     }else{ 
      return false; 
     } 
    } 

나는 문제가 무엇인지 파악할 수없는 것 같습니다. 아무도 도와 줄 수 있습니까?

+1

'인벤토리'란 무엇입니까? 선언 된 곳을 알려주십시오. – TNT

+1

왜 디버거를 사용하지 않거나 디버거가없는 경우 println 문을 삽입하여 해당 문 앞에 값을 덤프합니다. 행을 올바르게 식별했다고 가정하면,'inventory'는 null입니다. –

+0

버릇의 문제로, 나는 당신이 참조하는 인스턴스 변수에'this '를 접두어로 붙이는 것을 강력히 추천한다. 변수가 인스턴스 변수이므로 분명한 것은 그림자로 인한 버그 위험을 낮 춥니 다. – jpmc26

답변

1

inventory을 초기화하셨습니까?

+0

SnackMachine 클래스 또는 확장하는 VendingMachine 클래스의 인벤토리를 초기화합니까? – Ziggy

+0

@Ziggy 아마도 VendingMachine은 원래 변수를 정의한다고 가정합니다.하지만 SnackMachine은 생성자의 값을 대체 할 수 있습니다. (나는 생각할 수없는 이유를 생각할 수 없다.) 어쨌든, 그것을 사용하기 전에 그것을 어딘가에 초기화해야한다. – jpmc26

0

VendingMachine 개체가 초기화 될 때 inventory이 초기화되는지 확인하십시오.

0

NullPointer 예외는 변수를 선언했지만 개체를 ​​만들지 않았으므로 null을 가리 킵니다. 이 유형의 예외 검사가 null을 방지하려면 객체 자체를 작성하지 않은 경우.

public boolean addItem(VendingMachineItem item) 
    { if(item == null)System.out.println("Item passed in must equal to null."); } 

재고는 내가없는이 또한뿐만 아니라 원인이 문제가 될 수 있다면, 당신은 전역 변수로이 있어야합니다 있으리라 믿고있어, 선언하지 않는 것 같습니다.