2014-10-22 4 views
0

그래서 내가 만들고자하는 프로그램에 문제가 있습니다. 나는 여기에 내 코드의 관련 섹션 오류클래스의 배열을 채우는 방법 JAVA

Exception in thread "main" java.lang.NullPointerException 
    at Job_18028094.<init>(Job_18028094.java:24) 
    at BMAS_Main_18028094.main(BMAS_Main_18028094.java:76) 

없이 배열 int[] serviceCode에 데이터를 넣을 수 없습니다. 내 홈페이지에서

:

내 수업 '작업'에서
String[] tempRecords = fileScan.nextLine().split(","); 
jobList[loopCount] = new Job_18028094(tempRecords); 

:

private int[] serviceCode; 

public Job_18028094(String[] tempRecords) { 
    serviceCode[0] = Integer.parseInt(tempRecords[6]); 
} 

물건을 지우려면, 데이터 StringtempRecords[6]에가 개최됩니다 (그러나 모든 숫자)와이 그들을 변환하기 전에 Integer#parseInt을 사용하고있었습니다. 오류가 무엇을 의미하는지 조사하고 변수가 'null'값이라는 것을 의미하지만 변수를 변경하는 방법이나 tempRecords의 데이터로 작성하는 방법은 확실하지 않습니다.

은 사용이 전에이 array를 초기화해야 도움 :

+3

초기화하지 않았습니다. serviceCode –

+0

생성자에서 무엇을하려고합니까?당신이 썼다면,'tempRecords'의 7 번째 요소를'serviceCode'의 첫 번째 셀에 넣으려고합니다 (아직 배열이 초기화되지 않았기 때문에 존재하지 않습니다). – Joffrey

답변

1

에 미리 감사드립니다. 당신이 arraylength 확실하지 않은 경우

private int[] serviceCode; // else serviceCode is null 

당신은

private int[] serviceCode=new int[5]; 

를 사용할 수 있습니다. ServiceCode 배열이 초기화되지 않기 때문에 NullPointerException이가 throw됩니다 List

List<Integer> list=new ArrayList<>(); 
2

사용합니다. 배열은 정적 객체이므로 사용하기 전에 초기화해야합니다. 또한 배열을 사용하기 전에이 배열의 크기를 제공해야합니다! Job_18028094 생성자에 "size"매개 변수를 전달하십시오. 이렇게하면 문제가 해결됩니다.

0

private int[] serviceCode; 문을 사용하여 배열을 선언하면 컴파일러에서 serviceCode이라는 변수에 정수 배열이 저장된다는 것을 알립니다. 이 시점에서 컴파일에 배열이 보유 할 정수의 수를 알지 못합니다. 따라서 정수를 보유하기위한 실제 메모리 할당은 이번에는 발생하지 않습니다.

정수를 배열에 넣기 시작하려면 해당 메모리 할당이 이미 수행되어 있어야합니다. 컴파일러는 다음 문을 사용하여 배열을 초기화 할 때만이 메모리 할당을 처리합니다. 상기 초기화 후에

int[] serviceCode = new int[5] 

는 메모리 할당 5의 정수를 유지하도록 배열 완료되고 배열 ('0'으로한다) 정수의 디폴트 값으로 충전 될 것이다. 이제 다른 값을 배열에 넣을 수 있습니다.

배열을 초기화하지 않았으므로 메모리 할당이 수행되지 않아 배열 액세스를 시도 할 때 NullPointerException이 발생합니다.

관련 문제