我目前正在开发一个模仿彩票并从文件包括的File
读取以下信息的程序:
5
Durant Kevin
1 15 19 26 33 46
Schofield Michael
17 19 33 34 46 47
Black Joe
1 4 9 16 25 36
Elroy Jetson
17 19 34 46 47 48
Simone Raven
5 10 17 19 34 47
我在
Scan
的内容中File
并创建了一个Ticket对象来保存一个人的名字和票号,但是当我尝试将该信息放入ArrayList
时,会出现我的问题,我们将不胜感激。这是我的代码:
try
{
Scanner scan = new Scanner(new FileInputStream(file));
ArrayList<Ticket> info = new ArrayList<Ticket>();
int lim = scan.nextInt();
for(int i = 0; i < lim; i++)
{
String name = scan.nextLine();
String num = scan.nextLine();
String[] tarr = num.split(" ");
int[] arr = new int[tarr.length];
for(int j = 0; j < tarr.length; j++)
{
arr[j] = Integer.parseInt(tarr[j]);
}
info.add(new Ticket(name, arr[]);
}
scan.close();
}
catch(FileNotFoundException fnfe)
{
System.out.println("Error! The file was not found!");
}
}
public class Ticket
{
public String name;
public int[] tarray;
public Ticket(String name, int[] tarray)
{
this.name = name;
this.tarray = tarray;
}
}
最佳答案
您的原始代码实际上看起来很干净,我仅发现以下问题:
info.add(new Ticket(name, arr[]);
这是用于传递变量AFAIK的无效Java语法。如果要将数字的
arr
传递给Ticket
类的构造函数,则应该这样做:info.add(new Ticket(name, arr));
更新:
我已经使用IntelliJ在本地测试了您的代码,而我发现的唯一其他潜在问题是在以下行中:
int lim = scan.nextInt();
调用
Scanner.nextInt()
不会将光标更新到下一行。这意味着当您尝试阅读第二行时,您仍将位于第一行。快速解决方案是更改为以下代码:int lim = scan.nextInt(); // read in number of people
scan.nextLine(); // advance to second line of input file