错误发生在第26行
import java.util.*;
import java.io.*;
public class PG1gbm {
public static void main(String[] args) {
try {
File input = new File("input.txt");
Scanner infile = new Scanner(input);
Scanner i1 = new Scanner(input);
int count= 0;
while(infile.hasNext()) {
infile.nextLine();
count++;
}
User[] userArray = new User[count];
int loopCount = 0;
while(infile.hasNext()) {
//userArray[loopCount] = new User(i1.next(), Integer.parseInt(i1.next()), Integer.parseInt(i1.next()), Integer.parseInt(i1.next()),Integer.parseInt(i1.next()));
userArray[loopCount] = new User(i1.next(), i1.nextInt(), i1.nextInt(), i1.nextInt(), i1.nextInt());
//userArray[count] = user;
loopCount++;
}
for(int i = 0; i < count; i++) {
System.out.println(userArray[i].getid());
}
}
catch(FileNotFoundException e) {
System.out.println("There is no file present.");
}
}
}
这是我要从
中提取的课程public class User
{
private String userID;
private int in_time;
private int out_time;
private int priority;
private int plotter_sheets;
public User (String id, int t1, int t2, int prio, int pc)
{
userID=id;
in_time=t1;
out_time=t2;
priority=prio;
plotter_sheets=pc;
}
return userID;
}
public int getintime(){
return in_time;
}
public int getouttime(){
return out_time;
}
public int getPriority(){
return priority;
}
public int getSheets(){
return plotter_sheets;
}
public String toString()
{
String description;
description = userID + "\t" + in_time + "\t"+ out_time +
"\t"+priority+"\t"+plotter_sheets;
return description;
}
}
答案 0 :(得分:1)
我认为这里的问题是你的文件上的第二个循环从未实际执行过,所以当你创建一个userArray
数组User
时,数组元素是单元化的。
仔细观察,你的第二个循环可能应该使用i1
:
while(i1.hasNext())
答案 1 :(得分:1)
似乎第二个while(infile.hasNext()) {
应为while(i1.hasNext()) {
答案 2 :(得分:1)
userArray
将填充null
个值。塔卡一看,你正在消耗扫描仪直到最后一行,然后继续阅读直到结束,没有重置:
while(infile.hasNext()) {
infile.nextLine();
count++;
}
User[] userArray = new User[count];
int loopCount = 0;
while(infile.hasNext()) {
// ...
}
for(int i = 0; i < count; i++) {
System.out.println(userArray[i].getid());
}
第一次执行println(userArray[i].getid())
行时,NullPointerException
将会加注。
答案 3 :(得分:0)
您可能希望在这些循环之间回放流。现在第二个循环不会读取任何东西,因为扫描仪已经在最后了。
或者甚至更好,只需将对象收集到ArrayList
中,这样就不需要第一个循环。
答案 4 :(得分:0)
看起来你遍历扫描仪项目一次以获得计数,但实际填充数组中项目的第二个循环不会运行,因为您已经完成了输出。我认为你需要结合你的循环。