使用BufferedWriter& amp;保存来自2D JTextField数组的文本。环

时间:2017-06-12 08:07:32

标签: java arrays loops bufferedwriter

我有一个名为fields的2D数组,我需要能够保存其内容(颜色首字母)。

try {
    BufferedWriter outFile = new BufferedWriter(new FileWriter("Drawing_NEW.csv"));
    for (int y = 0; y < totalY; y++) {
        for (int x = 0; x < totalX - 1; x++) {
            outFile.write(fields[x][y].getText() + ",");
        }
        outFile.write(fields[totalX - 1][y].getText());
        outFile.newLine();
    }
    outFile.close();
} catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
}

上面的代码会像这样保存数组中的所有内容。请注意,数组是20乘20(下面的输出只是整个事物的片段)。

W,W,W,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,W,W
W,W,W,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,W,W

但我现在必须制作一个循环,如果颜色与下一个添加到计数器的颜色相同,如果没有,则写入新颜色并将计数器设置回1然后再次检查下一个和等等。下面是一个示例模板,并输出了它应该是什么样子。

(colour1,count1, colour2,count2, colour3,count3,)

W,3,G,15,W,2
W,3,G,3,Y,5,G,7,W,2

随意提问。谢谢。

1 个答案:

答案 0 :(得分:2)

这意味着您需要在循环中添加一些状态以跟踪以前的值。根据您的示例中的AFAIU,您只想为相同的&#34;行&#34;中的相同字符串的序列编写一个数字。数组。如果是这样,请尝试以下代码

for (int y = 0; y < totalY; y++) {
    string prev = ""; // this value doesn't equal anything you can see in the UI, so the first iteration of the loop works as expected 
    int cnt = 0;
    for (int x = 0; x < totalX - 1; x++) {
        string cur = fields[x][y].getText();
        if(cur.equals(prev)) {
            cnt ++;
        }
        else {
            if(cnt > 0) // skip the first empty line
              outFile.write(prev + "," + cnt + ",");
            prev = cur;
            cnt = 1;
        }
    }
    // write the last sequence
    outFile.write(prev + "," + cnt);
    outFile.newLine();
}