자바 프로그램에 문제가 있어요. 스레드 "main"의 예외
java.lang.NullPointerException
at twoten.TwoTenB.<init>(TwoTenB.java:29)
at javapractice.JavaPractice.main(JavaPractice.java:32)
Java Result: 1
제가 받는 오류입니다. 정말 도움이 필요할 것 같아. 난 이 자리에 몇 시간이나 갇혀있으니까...
package twoten;
import java.util.Scanner;
public class TwoTenB {
public TwoTenB() {
double percentage;
double a[] = null;
double total = 0;
double var;
System.out.print("\tRESULT\n\n");
Scanner scan = new Scanner(System.in);
//double[] mark = new double[7];
for (int i = 0; i < 7; i++) {
System.out.print("\nMarks in subject " + (i + 1) + "\t:\t");
var = scan.nextDouble();
a[i] = var;
total = total + a[i];
//percentage = first * second * third * fourth * fifth * sixth * seventh * 100 / 700;
}
percentage = total * 100 / 700;
if (a[0] > 35 && a[1] > 35 && a[2] > 35 && a[3] > 35 && a[4] > 35 && a[5] > 35 && a[6] > 35 && percentage > 35) {
if (percentage >= 60) {
System.out.print("\nCongratulation!!! you've got FIRST dividion\n");
} else if (percentage >= 45 && percentage < 60) {
System.out.print("\nCongratulation!!! you've got SECOND dividion\n");
} else if (percentage >= 35 && percentage < 45) {
System.out.print("\nCongratulation!!! you've got THIRD dividion\n");
}
} else {
System.out.print("\nSORRY!!! you've FAILED\n");
}
}
}
이것이 문제입니다.
double a[] = null;
a는 null이므로 nullPointer초기화할 때까지 사용할 때마다 예외가 발생합니다. 따라서 다음과 같습니다.
a[i] = var;
실패할 것입니다.
가능한 해결책은 다음을 선언할 때 초기화하는 것입니다.
double a[] = new double[PUT_A_LENGTH_HERE]; //seems like this constant should be 7
IMO는 이 예외를 해결하는 것보다 더 중요합니다. 문제를 감지하고 해결할 수 있도록 스택트레이스를 * 읽고 이해**해야 합니다.
java.devins.devins.NullPointer예외
이 예외는 'null' 값이 사용되는 변수가 있음을 의미합니다. 어떻게 풀까요? 사용하기 전에 변수가 'null'이 아닌지 확인하십시오.
2시에투텐비
(TwoTenB.java:29)
이 선에는 두 부분이 있습니다.
이 줄에서 다른 줄은 오류가 발생한 위치를 알려주는 것과 유사합니다. 이 글을 읽을 때:
자바프랙티스로.JavaPractice.main(JavaPractice).자바:32)
그것은 당신이 자바프랙티스에서 선언한 클래스 자바 프랙티스의 메인 방식 안에서 투텐비 객체 참조를 인스턴스화하려 했다는 것을 의미한다.