こんな感じのが落ちてる。
int f = 120;
for(int ff = 1; ff <= f; ff++){
while (f % ff != 0){
}
因子を求めるループに何か問題があるのでしょうか?for文とwhile文の仕組みがよくわからないので、完全に間違っている可能性があります。
この後、前記因子に変数を代入するにはどうすればよいのでしょうか?
しかし、「while&log」ループを使うのは間違っています。
あなたの for
ループのロジックは、次のとおりです。
ff <= f
まで続けます。for
に1を足します。これで思い通りになりそうです。
しかし、while
ループは正しくありませんね。 コード>ffがf
の係数である限り、あなたがそこに書いたどんなコードも実行し続けるので、あなたがコード>whileでそれらを変えない限り、無限ループになってしまうのです。 しかし、これを if
の文に変更すると、望みのものが得られます。
因子を調べているのですから、実際にはfまでのすべての可能性を調べる必要はなく、fの平方根までの可能性を調べればよいのです。
少し修正した解答です。変数xが変数yで割り切れるかどうかをまず確認し、割り切れる場合は1をカウントし、この処理を繰り返します。ループカウンタにはx/yを使用し、xが0になったがまだループが終了していない場合の繰り返しを避けるため、x>0をチェックする必要があります。
public class Factor {
public static void main(String[] args) {
int x = 48;
int x1 = x;
int y = 2;
int k = x / y;
int j = 0;
for (int i = 1; i < k; i++) {
if ((x % y) == 0 && x > 0)
j++;
x = x / 2;
}
System.out.println(+x1 + " is a factor of " + y + " for " + j
+ " times.");
}
}