0

2つの変数があり、ループ内の特定の条件で、の値をそれ自体との間MN切り替えたいと思います。だから次のコードが頭に浮かんだNM

MxN = M * N;

N = MxN/N;

しかし、Mとの値はN2 000 000 000である可能性があります。したがって、Imは疑わしいです。そのような巨大な値を切り替えるためのその素晴らしいバリアントですか、それともより良い(より速い)

counter = 2;
N = counter % 2 == 0 ? M : N; 
counter++;

編集 申し訳ありませんが、私はMの価値に影響を与えたくないとは言いませんでした
みんなありがとう)

4

3 に答える 3

2

非常に多くの方法があります。

1 http://jsfiddle.net/8NvVf/

m -= n
n += m
m = n - m

2 http://jsfiddle.net/eQGwL/ (FireFox とおそらく Rhino でのみ動作します)

[n, m] = [m, n]

3 http://jsfiddle.net/4MQXe/

m = (n += m -= n) - m

編集

値を変更したくない場合はm、一時値が必要です。

http://jsfiddle.net/Yjkn3/

var n = 5
var m = 8
var t = n

for (var i = 0; i < 10; ++i) {
    if(n != m) n = m
    else n = t
    console.log(n + ' ' + m)
}
于 2013-03-08T15:16:00.767 に答える
1

どちらのアプローチも、整数オーバーフローの可能性があります (以前のものは精度エラーの可能性もあります)。カウンターの範囲を制限して、2 番目のアプローチを採用してみませんか?

state = 0;
switch (state) {
case 0:
    // ...
    break;
case 1:
    // ...
    break;
// ...
}

state = state < maxState ? state + 1 : 0;

これを最適化するのはあなた次第ですが、可読性と保守性を念頭に置いてください。これに代わる方法switchは、配列を使用することです。

2 つの変数の場合、変数を交換しようとするときにハックをいじらないでください。必要xorなものを記述してください。

var temp = N;
N = M;
M = N;
于 2013-03-08T15:06:10.400 に答える
0

2 つの値を交換するための古典的なトリックは、XOR を使用することです。

x = x xor y
y = x xor y
x = x xor y
于 2013-03-08T15:06:14.947 に答える