【问题标题】:ArrayList will not populate within a for loop while reading a text file [closed]读取文本文件时,ArrayList 不会在 for 循环中填充 [关闭]
【发布时间】:2014-11-06 02:08:03
【问题描述】:

我正在尝试编写一个程序,以查看哪些数字显示了百万富翁中每个球的最佳结果(只是为了好玩,我知道它不能帮助您预测未来的任何事情)。

问题:

ArrayLists 不会从 BufferedReader 的输入中填充,但我可以将任何内容打印到控制台,只是不能将其添加到 Array 或 ArrayList。

我很抱歉这是多么草率和所有奇怪的命名:

    public static void main(String[] args) {
    MathStats mathStats = new MathStats();
    getFileInfo(); //Same class as main.
    System.out.println();
    System.out.println(mathStats.num1.size());
    //num1 should be populated after calling getFileInfo();

} //End of main


    private static void getFileInfo() {
    File listOfTickets = new File(**FILE**);
    MathStats mathStats = new MathStats();

    try {
        BufferedReader getInfo = new BufferedReader(new FileReader(
                listOfTickets));

        String ticketInfo = getInfo.readLine();

        for (int i = 0; ticketInfo != null; i++) {

            ticketInfo.split("\n");

            System.out.println(ticketInfo);

            int a = Integer.parseInt(ticketInfo.substring(25,
                    27));
            int b = Integer.parseInt(ticketInfo.substring(28,
                    30));
            int c = Integer.parseInt(ticketInfo.substring(31,
                    33));
            int d = Integer.parseInt(ticketInfo.substring(34,
                    36));
            int e = Integer.parseInt(ticketInfo.substring(37,
                    39));
            int f = Integer.parseInt(ticketInfo.substring(40,
                    42));

            mathStats.setArrayValues(a, b, c, d, e, f);
            mathStats.setCount(i);

            ticketInfo = getInfo.readLine();
        }

        getInfo.close();

    } catch (FileNotFoundException e) {
        System.out.println("Can't find file");
        System.exit(0);

    } catch (IOException e) {
        System.out.println("An I/O Error Occured");
        System.exit(0);

    }


}

setArrayValues 方法只是将每个相应的 int 添加到它的 ArrayList 或至少它的假设中。它使用普通的 list.add(a);添加每个 int。

问题,在main中测试每个ArrayList的大小时(调用该方法后)每次都返回0。

如果您想测试,这里有一些数据可以放入文本文件中(删除中间多余的行)

11/04/2014 Mega Millions 09-15-24-39-41[01],Megaplier®:X4

10/31/2014 Mega Millions 11-29-36-58-67[15],Megaplier®:X2

10/28/2014 Mega Millions 03-50-57-58-60[11],Megaplier®:X5

10/24/2014 Mega Millions 02-14-21-28-55[03],Megaplier®:X3

10/21/2014 百万富翁 05-35-37-41-66[11],Megaplier®:X5

10/17/2014 Mega Millions 21-31-43-56-60[12],Megaplier®:X4

这里是 setArrayValues

    public void setArrayValues(int a, int b, int c, int d, int e, int f) {
    num1.add(a);
    num2.add(b);
    num3.add(c);
    num4.add(d);
    num5.add(e);
    num6.add(f);

}

【问题讨论】:

  • 你能显示setArrayValues的代码吗?
  • 你的 catch 块没有做任何异常。至少尝试添加打印堆栈跟踪。
  • @NikhilTalreja 我不明白为什么......“找不到文件”是不言自明的,我们通常不需要查看它发生在哪一行。
  • 问题很可能出在MathStats 类中,但您对我们隐瞒了。
  • 找不到文件是,但如果你把我提供的数据,把它扔到一个文本文件中,并使用我放置 FILE 的文本文件的路径,那么它将能够读取文件。

标签: java arraylist bufferedreader


【解决方案1】:

正如 Guido 所说,您在 getFileInfo 方法中实例化了一个新的 MathStats,因此不会填充 main 中实例化的那个。您可以通过将 main 中创建的引用传递给 getFileInfo 方法来解决此问题:

public static void main(String[] args) {
    MathStats mathStats = new MathStats();
    getFileInfo(mathStats); //Same class as main.
    System.out.println();
    System.out.println(mathStats.num1.size());
    //num1 should be populated after calling getFileInfo();

} //End of main


private static void getFileInfo(MathStats mathStats) {
    File listOfTickets = new File(**FILE**);
    try {
      //..

【讨论】:

  • 非常感谢!这解决了它!
猜你喜欢
  • 2017-11-25
  • 2020-07-18
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多