For some reason this code results in a truncated text.txt file. It should (according to me) write out 1000 results, but the output file has various amounts of lines (depending on the run). Weirdly, the writing to the file stops in the middle of the write command, such that a line may not be complete. Currently, the last three lines of the text file for the latest run was as follows:
749, 78.97988, 97.80454, 99.6625, 94.00000015258789
750, 4.1745043, 86.64212, 107.59311, 71.00000008583069
751,
and that's it. Nothing else after that.
Here is the code:
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++;
}
}
}
}
You forgot to close() the writer, so you never gave it a chance to flush buffered output to disk.