如何使用long和int数据类型更新进度条的进度(使用0-100个整数)?

时间:2013-01-29 04:21:52

标签: java android progress-bar

我正在开发一个非常基本的Android应用程序,我需要更新与循环遍历相对应的进度条,以查找输入的数字是否为素数。输入的数字必须是长数据类型。计划是遍历从i = 2到sqrt(数字)的循环,并在每次迭代时将输入的数字除以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(数字))然后乘以100得到适当的百分比。但是,我不能这样做b / c myProgress是一个整数,但lim是一个long,并且不能改为int。即使我使lim成为int,我仍然有整数除法给我一个错误的值(0 * 100)。它不会让我将其中一个加入b / c myProgress必须是int才能通过publishProgress()传递。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

首先,如果'i'的范围一直到lim,'我'也需要很长时间。否则,一旦'i'命中Integer.MAX_VALUE,下一次迭代就会导致溢出。

我相信你想宣布我是一个长期的,并在你的其他声明中做

“int myProgress =(int)((((double)i)/ lim)* 100)”