所以,我正在研究一个与遗传算法有关的Java项目。
我有一个main方法,该方法调用一个函数(称为函数1),该函数一直进行计算直到指定的迭代为止。我想运行main方法100次并收集数据,所以我决定在main方法中调用的函数1中使用FileWriter。
public static int Runcnt = 0;
static int o = 0;
public static File statText = new File("C:\\Users\\ShadyAF\\Desktop\\StatTest.txt");
public static void main(String [] args){
while(Runcnt <= 100)
{
final long startTime = System.nanoTime();
MainAlgorithm mA = new MainAlgorithm("config.xml");
mA.cMA();
final long duration = System.nanoTime() - startTime;
System.out.println(duration/1000000000 + " seconds");
o = 0;
}
上面的代码片段是我试图循环的主要内容。 (功能1)
System.out.println("best = "+Main.indx+" = "+Main.val);
System.out.println("max_cnt: " + Main.max_cnt);
try {
FileOutputStream is = new FileOutputStream(Main.statText);
OutputStreamWriter osw = new OutputStreamWriter(is);
Writer w = new BufferedWriter(osw);
w.write("#" + Main.Runcnt + " Best#: " + Main.indx + " BestScore: " + Main.val + " MaxCnt: " + Main.max_cnt + "\n");
w.close();
} catch (IOException e) {
System.err.println("Problem writing to file.");
}
上面的代码片段是主循环内的mA.cMa()函数。
我运行了一段时间的代码,看来程序仅在第一个循环中写入文件,而对其余的循环则不执行任何操作。
非常感谢您的帮助!
编辑:为什么我会被否决?至少留下有用的评论:/
答案 0 :(得分:0)
您应该从头开始更改模式……无论如何,您都可以在Main中尝试类似的操作:
public static Path pathFile = Paths.get("C:\\Users\\..blah..\\stats.txt");
然后在循环中使用
try {
String log = "#" + Main.Runcnt + " Best#: " + Main.indx + " BestScore: " + Main.val + " MaxCnt: " + Main.max_cnt + "\n";
Files.write(Main.pathFile, log.getBytes(), Files.exists(Main.pathFile) ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
} catch (IOException e) {
// exception handling
}
效率不高,特别是在记录很多的情况下,但是您编写的整个代码也需要强大的重构:)