Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数独计时规则_Java_Timing_Sudoku - Fatal编程技术网

Java 数独计时规则

Java 数独计时规则,java,timing,sudoku,Java,Timing,Sudoku,我用蛮力递归写了一个数独解谜器。现在,我想看看解决10个类似类型的难题需要多长时间。因此,我制作了一个名为easy的文件夹,并在文件夹中放置了10个“easy”拼图。当我第一次运行解算器时,可能需要171毫秒,第二次需要37毫秒,第三次运行需要16毫秒。为什么重复解决完全相同的问题需要不同的时间?时间不应该是一致的吗 第二个问题是只显示最后一个解决的谜题,即使我告诉它在加载谜题后重新绘制屏幕,并在解决谜题后再次绘制屏幕。如果我只加载一个谜题而不解决它,它将显示初始谜题状态。如果我随后调用Solv

我用蛮力递归写了一个数独解谜器。现在,我想看看解决10个类似类型的难题需要多长时间。因此,我制作了一个名为easy的文件夹,并在文件夹中放置了10个“easy”拼图。当我第一次运行解算器时,可能需要171毫秒,第二次需要37毫秒,第三次运行需要16毫秒。为什么重复解决完全相同的问题需要不同的时间?时间不应该是一致的吗

第二个问题是只显示最后一个解决的谜题,即使我告诉它在加载谜题后重新绘制屏幕,并在解决谜题后再次绘制屏幕。如果我只加载一个谜题而不解决它,它将显示初始谜题状态。如果我随后调用Solve方法,最终的解决方案将绘制在屏幕上。这是我解决多个难题的方法

void LoadFolderAndSolve() throws FileNotFoundException {

    String folderName = JOptionPane.showInputDialog("Enter folder name");
    long startTime = System.currentTimeMillis();

    for (int i = 1; i < 11; i++) {
        String fileName = folderName + "/puzzle" + i + ".txt";
        ReadPuzzle(filename);  // this has a call to repaint to show the initial puzzle
        SolvePuzzle();         // this has a call to repaint to show the solution
        // If I put something to delay here, puzzle 1-9 is still not shown only 10.
    }

    long finishTime = System.currentTimeMillis();
    long difference = finishTime - startTime;

    System.out.println("Time in ms - " + difference);
}
void LoadFolderAndSolve()抛出FileNotFoundException{
字符串folderName=JOptionPane.showInputDialog(“输入文件夹名称”);
long startTime=System.currentTimeMillis();
对于(int i=1;i<11;i++){
字符串文件名=folderName+“/puzzle”+i+“.txt”;
ReadPuzzle(filename);//此函数调用重新绘制以显示初始拼图
SolvePuzzle();//这有一个重新绘制的调用来显示解决方案
//如果我在这里延迟一些事情,谜题1-9仍然没有显示,只有10个。
}
long finishTime=System.currentTimeMillis();
长差=完成时间-开始时间;
System.out.println(“以毫秒为单位的时间-”+差值);
}

JVM第一次运行时,需要加载类、创建正在使用的对象等—这需要更多的时间。此外,JVM“开始启动”总是需要时间,这就是为什么在分析时,通常运行数千个循环并对结果进行分割以获得更好的估计


对于第二个问题,如果看不到代码,就无法帮助您,但是一个好的猜测是您没有“刷新”数据。

您所说的“刷新”数据是什么意思?您所说的“重新绘制”是什么意思?(我先问:P)我又找了一些,才找到那幅画的答案。在Java中,当您得到一个repait方法时,似乎会尽快调用它repaits。如果重新绘制快速连续发生,它只需等待最后一次调用。如果我将repaint()更改为paintimmediate(0,0,maxX,maxY),可以绕过这个问题;这就完成了在屏幕上绘制所有内容的工作。谢谢您的帮助。@user1429254现在您知道什么是“刷新”;)