Vì lý do nào đó mã này dẫn đến tệp text.txt bị cắt ngắn. Nó nên (theo tôi) viết ra 1000 kết quả, nhưng tập tin đầu ra có số lượng khác nhau của dòng (tùy thuộc vào chạy). Thật kỳ lạ, việc ghi vào tập tin dừng lại ở giữa lệnh viết, sao cho một dòng có thể không hoàn thành. Hiện tại, ba dòng cuối cùng của tệp văn bản cho lần chạy mới nhất như sau:Bufferedwriter dừng ở giữa văn bản
749, 78.97988, 97.80454, 99.6625, 94.00000015258789
750, 4.1745043, 86.64212, 107.59311, 71.00000008583069
751,
và thế là xong. Không có gì khác sau đó.
Đây là mã:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;
public class ColorGrayScale {
/**
* @param args
* @throws IOException
*/
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Writer out = new BufferedWriter(new FileWriter("test.txt"),16*1024);
Random generator = new Random();
float red = 0, green = 0, blue = 0;
int i = 0;
while (i<1000) {
float grey = generator.nextInt(127) + 64;
int sequence = generator.nextInt(6) + 1; // to pick from 1 of six
// orders
switch (sequence) { // the various orders that red green and blue
// are going to be in
case 1:
red = (float) (generator.nextFloat() * (grey/.21));
green = (float) (generator.nextFloat() * ((grey - (red * .21))/.71));
blue = (float) ((grey - (red * .21) - (green * .71))/0.08);
break;
case 2:
red = (float) (generator.nextFloat() * (grey/.21));
blue = (float) (generator.nextFloat() * ((grey - (red * .21))/.08));
green = (float) ((grey - (red * .21) - (blue * .08))/0.71);
break;
case 3:
green = (float) (generator.nextFloat() * (grey/.71));
red = (float) (generator.nextFloat() * ((grey - (green * .71))/.21));
blue = (float) ((grey - (red * .21) - (green * .71))/.08);
break;
case 4:
green = (float) (generator.nextFloat() * (grey/.71));
blue = (float) (generator.nextFloat() * ((grey - (green * .71))/.08));
red = (float) ((grey - (green * .71) - (blue * .08))/.21);
break;
case 5:
blue = (float) (generator.nextFloat() * (grey/.08));
red = (float) (generator.nextFloat() * ((grey - (blue * .08))/.21));
green = (float) ((grey - (blue * .08) - (red * .21))/.71);
break;
case 6:
blue = (float) (generator.nextFloat() * (grey/.08));
green = (float) (generator.nextFloat() * ((grey - (blue * .08))/.71));
red = (float) ((grey - (blue * .08) - (green * .71))/.21);
break;
}
if (red < 256 && blue < 256 && green < 256) {
out.write("" + i + ", " + red + ", " + green + ", " + blue
+ ", " + (.21 * red + .71 * green + 0.08 * blue + "\n"));
i++;
}
}
}
}
Tôi nghĩ bạn nên đảm bảo 'close()' được gọi trên đối tượng 'out'. –