我正在开发一个非常基本的 Android 应用程序,我需要更新与循环遍历相对应的进度条,以查找输入的数字是否为素数。输入的数字必须是长数据类型。计划是遍历从 i = 2 到 sqrt(number) 的循环,并在每次迭代中将输入的数字除以 i。如果 i 除数,则循环结束,我们确定它不是素数。
否则,循环继续进行,同时更新进度。以下是相关代码的片段:
protected Void doInBackground(Long... params) {
String message;
Intent intent = new Intent(MainActivity.this, DisplayMessageActivity.class);
long lim = (long)Math.sqrt(params[0]);
for (int i = 2; i <= lim; i++) {
if (params[0] % i == 0) {
message = params[0] + " is not prime!";
int myProgressFinal = 100;
publishProgress(myProgressFinal);
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
return null;
}
else {
int myProgress = i/lim * 100;
publishProgress(myProgress);
if (isCancelled())
return null;
}
}
message = params[0] + " is prime!";
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
return null;
}
}
我的问题点是 else 语句:
else {
int myProgress = i/lim * 100;
publishProgress(myProgress);
我有一个整数 i 用于循环,显示我在循环中的进度,并且要找到我已经前进的百分比,我必须除以循环的最大数量 (lim = sqrt(number)),然后相乘100 得到适当的百分比。但是,我不能这样做 b/c myProgress 是一个整数,但 lim 是一个长整数,并且不能更改为 int。即使我将 lim 设为 int,我仍然有整数除法给我一个错误的值 (0 * 100)。它不会让我将其中一个类型转换为加倍 b/c myProgress 必须是 int 才能通过 publishProgress()。有什么建议么?