1

X が 0 に等しくなったときにループが終了することを期待しています。

テーブルはこのようになるはずです

X  | Y
10 | 1
8  | 2
6  | 3
4  | 4
2  | 5
0  | 6

しかし、実行すると、値 x = -8 および y = 10 が得られます

int x = 10;
int y = 1;
while ((y != 10) && ((x / y) >= 0))
{
x -= 2;
y += 1;
}

System.out.println("x: " + x);
System.out.println("y: " + x);

while ステートメントの 2 番目のステートメントがより大きいか等しい場合、-2 と 7 になり、ステートメントの 2 番目の部分が false になり、ループの実行が停止します。しかし、そうではありません。

4

3 に答える 3

3

while ステートメントの 2 番目のステートメントがより大きいか等しい場合、-2 と 7 になり、ステートメントの 2 番目の部分が false になり、ループの実行が停止します。

-2 / 7は、整数演算ではゼロに等しくなります。

これを試してください:

System.out.println((-2/7));

ヒント: IDEでコードを実行し、デバッガーでステップ実行する方法を学ぶために、今すぐ時間を割いてください。

于 2013-10-23T17:58:20.890 に答える
0

それは本当に簡単です、あなたは x がゼロよりも大きいという条件だけが欲しいです :)

    int x = 10;
    int y = 1;
    while ((y != 10) && (x > 0)) {
        x -= 2;
        y += 1;
    }

    System.out.println("x: " + x);
    System.out.println("y: " + y);

出力:

x: 0
y: 6

PS:ここに投稿されたコードに誤りがあります。変数xを2回印刷しています

System.out.println("x: " + x);
System.out.println("y: " + x);

そのはず :

System.out.println("x: " + x);
System.out.println("y: " + y);

また、次のことに注意してください。

Java ではルールが分割されているため、この条件は機能しませんでした。2 で割るとintegers、結果は常にinteger切り捨てられます。

したがって、が より小さい(x / y) >= 0場合、 は true を返します。xy

この種の分割で実際の例を得るには、たとえば double を integer で分割する必要があります。次のようになります。

((double) x / y) >= 0
于 2013-10-23T17:57:33.287 に答える
0

のせい>=です(x / y) >= 0)。-2/7 は 0 になり、条件を満たします。

それはループから抜け出し、(y != 10)したがって y の値は 10 になり、その間に x の値は -8 になりました。

于 2013-10-23T17:59:56.603 に答える