我一直在用我的班级获得Null Pointer Exception。
客户类:
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int count = 0;
for (int i = 0; i < 100; i++){
count ++;
System.out.println(i);
Clip[] newClip = new Clip[100];
newClip[i] = new Clip();
menu();
int option = kb.nextInt();
switch(option){
case 1: System.exit(0);
break;
case 2: newClip[i].Input();
newClip[i].Output();
break;
case 3: int indexclip = 0;
int testclip = 0;
Scanner key = new Scanner(System.in);
System.out.println("Enter the index number of the clip: ");
testclip = key.nextInt();
for (int j = 0; j < 100; j++){
indexclip = newClip[j].getIndex(); // happens here
System.out.println(indexclip);
if(testclip == indexclip){
j = 120;
newClip[j].Output(); // and i would assume here too
}
}
break;
}
}
}
剪辑类:
import java.util.*;
public class Clip {
private int index;
private String surname;
private float length;
private float speed;
private String time = "testing";
public Clip(){
index = 0;
surname = "N/A";
length = (float) 0.00;
speed = (float) 0.00;
time = "0:00AM";
}
public void Output(){
System.out.println("Index: "+ index);
System.out.println("Surname: " + surname);
System.out.println("Length: " + length);
System.out.println("Speed: "+ speed + "m/s");
System.out.println("Time: "+ time);
}
public void Input(){
int testint;
float testfloat;
int spacePos;
String testString;
Scanner kb = new Scanner(System.in);
Scanner key = new Scanner(System.in);
System.out.println("Input an index number between 1 - 10000: ");
testint = kb.nextInt();
for (int i = 0; i < 100; i++){
if (testint < 1 || testint > 10000){
System.out.println("Input an index number between 1 - 10000: ");
testint = kb.nextInt();
}
else {
i = 120;
}
}
index = testint;
System.out.println("What is the competitor's Surname and their Given name: ");
surname = key.nextLine();
System.out.println("Length of the Tape in seconds: ");
testfloat = kb.nextFloat();
for (int i = 0; i < 100; i++){
if (testfloat < 1 || testfloat > 60){
System.out.println("Length of the Tape in seconds: ");
testfloat = kb.nextFloat();
}
else {
i = 120;
}
}
length = testfloat;
System.out.println("Estimated Speed of competitor in metres per second: ");
testfloat = kb.nextFloat();
for (int i = 0; i < 100; i++){
if (testfloat < 7 && testfloat > 13){
System.out.println("Estimated Speed of competitor in metres per second: ");
testfloat = kb.nextInt();
}
else {
i = 120;
}
}
speed = testfloat;
System.out.println("Time of recording between 0900 - 1700: ");
testString = key.nextLine();
for (int i = 0; i < 100; i++){
if (testString.length() != 4){
System.out.println("Time of recording between 09:00 - 17:00: ");
testString = key.nextLine();
}
else {
i = 120;
}
}
time = testString;
}
public int getIndex(){
return index;
}
public String getSurname(){
return surname;
}
public float getLength(){
return length;
}
public float getSpeed(){
return speed;
}
public String getTime(){
return time;
}
我知道Clip类必须初始化并且我已经完成了,并且我首先运行选项2,以便不使用其他类的构造函数。我只是想让它读取索引号并扫描剪辑数组以获得匹配的索引号
任何帮助都会有助于消磨时间
欢呼声
答案 0 :(得分:4)
您需要将数组的声明移到第一个for循环之外。
Clip[] newClip = new Clip[100];
for (int i = 0; i < 100; i++){
/**/
}
因为当你处于switch
语句的情况3时,你循环遍历数组Clip
的所有元素(但是因为你只设置了数组的一个元素,所以99个元素数组实际上设置为null
)。
答案 1 :(得分:1)
问题是你在循环中每次迭代都要创建数组,因此只有当前条目(i)不是null
。
要解决此问题,请移动以下行:
Clip[] newClip = new Clip[100];
需要在循环之外(for
语句之前)。
此外,在int j
的循环中,这仅适用于i == 100
。不确定这是否有保证。否则,在i之后的newClip中的条目也将是null
答案 2 :(得分:0)
NPE在这里:
Clip[] newClip = new Clip[100];
您需要从循环中获取该行。