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

标签 java android progress-bar

我正在开发一个非常基本的 Android 应用程序,我需要更新与循环遍历相对应的进度条,以查找输入的数字是否为素数。输入的数字必须是长数据类型。计划是遍历从 i = 2 到 sqrt(number) 的循环,并在每次迭代时将输入的数字除以 i。如果 i 除该数字,则循环结束,我们确定它不是素数。

否则,循环将继续进行,同时更新进度。以下是相关代码 fragment :

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 即可得到正确的百分比。但是,我不能这样做,因为 myProgress 是一个整数,但 lim 是一个 long,并且不能更改为 int。即使我将 lim 设置为 int,我仍然有整数除法给我一个错误的值(0 * 100)。它不会让我将其中之一类型转换为 double b/c myProgress 必须为 int 才能通过publishProgress() 传递。有什么建议吗?

最佳答案

首先,如果 'i' 的范围要一直到 lim,那么 'i' 也需要是 long。否则,一旦“i”达到 Integer.MAX_VALUE,下一次迭代将导致溢出。

我相信您想将 i 声明为 long,并且在您的 else 语句中这样做

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

关于java - 如何使用 long 和 int 数据类型更新进度条的进度(使用 0-100 整数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575609/

相关文章:

Java HashMap 作为方法参数 - 未指定 "value"类型

java - 如何发布API?

android - 如何将按钮放在 android.support.design.widget.AppBarLayout 之上?

ios - 显示微调器事件,直到加载音频文件 IOS7

django - 带有客户端更新的异步 View ,用于长时间运行的进程/ View

java - Akka EventBus for Java 示例

java - 如何使 javadoc 继承适用于外部 API? (使用 Maven2)

android动画未在onAnimationEnd完成

android - drawable 中的 xml 文件,可用于所有分辨率

java - 从 .ser 加载数据时的进度