当我输入一百万作为输入数字时,程序将冻结。我该如何解决?
我尝试将第二个for循环分隔为第二个功能,但这没用。
import java.io.*;
public class Array {
public static void main(String[] args) {
String line = System.console().readLine("How many digits of Pi do you want? ");
int n = Integer.parseInt(line);
int columns = (int)(10.0*n/3.0);
int[][] makedigitsofpi = new int[columns][2];
makedigitsofpi[0][0] = 30;
makedigitsofpi[0][1] = 10;
for(int i = 1; i < columns; i++) {
makedigitsofpi[i][0] = i;
makedigitsofpi[i][1] = i*2+1;
}
int[] make2s = new int[columns];
for(int i = 0; i < columns; i++) {
make2s[i] = 2;
}
int[] timesby10 = new int[columns];
int[] thirdrow = new int[columns];
int[] fourrow = new int[columns];
int[] fifthrow = new int[columns];
for(int four_rows = 0; four_rows < n; four_rows++) {
for(int i = 0; i < columns; i++) {
timesby10[i] = make2s[i]*10;
}
for(int column = (columns - 1); column >= 0; column--) {
if(columns == (column + 1)) { //last column
thirdrow[column] = 0; // add last
}
else { // Third Row
int[] cell0 = makedigitsofpi[(column+1)];
int cellfour = fourrow[(column+1)];
int cellfive = fifthrow[(column+1)];
int d = cellfour - cellfive;
thirdrow[column] = (d*cell0[0])/cell0[1];
}
}
}
}
}
我需要我的程序能够处理大量数字。该程序只是我项目的开始。该项目将创建一个程序,该程序将Pi生成为无限数量的数字。
答案 0 :(得分:1)
我该如何解决?
在后台线程中完成工作。
您的代码正在运行,使用了处理器,正在进行数学运算。
“冻结”是因为它没有处理您的输入并且没有完成他的工作。
要尽早完成工作,请减少课程数量。
要处理输入,您需要在单独的Thread
中对循环进行处理
该代码将不会更快地执行,但是您将不会有“冻结”的感觉。在这种情况下,如果您有一个要启动的按钮,则该按钮将被按下并保持按下状态,而无需其他输入。
在多线程上下文中,按钮将释放,您可以从“开始”状态切换到“停止”状态,如果再次按下该按钮,则可以设置布尔变量值切换:ex shouldCalculate = false;
循环执行,如果检查该值(如果为false),则退出线程,仅此而已。
请看一下here以使用线程。