【问题标题】:for-loop is neglecting several indices in an ArrayList datasetfor-loop 忽略了 ArrayList 数据集中的几个索引
【发布时间】:2017-04-21 17:28:59
【问题描述】:

在下面代码的 sn-p 中,我试图将stocks2 ArrayList 的内容写入stock_train.csv 文件。我正在使用一个 for 循环,它应该遍历 stocks2 ArrayList 的每个元素(调试器指示 stocks2 ArrayList 的大小为 2955)。

但是,我正在使用变量r 跟踪实际写入文件的数据行数。在 for 循环的运行时间结束时,r 的值只有 390。我已经彻底检查了这段代码,并且正在努力找出为什么我的 80% 以上的数据没有分配给文件的问题. (我的stock_train.csv 文件只显示了 390 行数据,而不是 2955 行)。是否有任何内存分配或语法问题阻止此 for 循环将所有 stock2 的数据写入 csv 文件?提前感谢您的宝贵时间。

    CSVWriter cd = new CSVWriter(new FileWriter("src/in/stock_train.csv"), ',', CSVWriter.NO_QUOTE_CHARACTER);
    int r=0;
    int dd=0; // Tracker variables

    for(int g=0; g<stocks2.size(); g++) {
        Stock q = stocks2.get(g); // stocks2: size = 2955
        String[] temp2 = new String[4];
        if(q.getTimestamp().startsWith("a")) {
            dd++; // dd: 1
            break; // This code is included to neglect any data whose timestamp begins with 'a'. As evidenced by the value of 'dd', it only happens once.
        }

        temp2[0] = q.getTimestamp();
        temp2[1] = Double.toString(q.getPrice());
        temp2[2] = Double.toString(q.getVWAP(pv,v));
        temp2[3] = Integer.toString(q.getStatus()); // Data I want allocated to the "stocks_train.csv" file
        r++; // r: 390

        System.out.println(g + " " + temp2);
        cd.writeNext(temp2);
    }

    cd.close();

    /* Comments depict values of variables after the for-loops run-time based on debugger information */

【问题讨论】:

  • @Turing85:我相信你已经做到了。他需要continue,而不是break。对此做出回答,我会投票!

标签: java csv arraylist


【解决方案1】:

如果相应的timestamp"a" 开头,您的评论建议您跳过 条目。您实际上使用了break; 关键字,它终止循环。这也解释了为什么dd 的值正好是1

您想要的是continue;,而不是break;。这具有程序执行继续循环的下一次迭代的效果。

【讨论】:

  • 太棒了!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2022-09-27
相关资源
最近更新 更多