私は非常に基本的なAndroidアプリに取り組んでおり、ループトラバーサルに対応してプログレスバーを更新して、入力された数値が素数であるかどうかを確認する必要があります。入力する番号は、長いデータ型である必要があります。計画は、i = 2からsqrt(number)までのループをトラバースし、入力された数値を反復ごとに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ずつ。ただし、これを行うことはできません。myProgressは整数ですが、limは長く、intに変更できません。limをintにしたとしても、整数除算で間違った値(0 * 100)が返されます。それらの1つを型キャストしてb/cを2倍にすることはできません。publishProgress()を通過するには、myProgressをintにする必要があります。助言がありますか?