我目前正在开发一个模仿彩票并从文件包括的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

10-07 23:54