2016-03-23 19 views
0

sのロットの例として、最初にifの後に多くのelse ifがあります。以下にいくつかの疑似コードを追加しました。複数のif文を使う方が効率的ですか?

if (x=1) 
    print x; 
if (x=2) 
    print x; 
if (x=3) 
    print x; 

それとも

if (x=1) 
    print x; 
else if (x=2) 
    print x; 
else if (x=3) 
    print x; 
+2

'他if'はかつてのように間違いなく良いはずです条件が真であれば、残りの評価はスキップされます。 – Harsh

+0

あなたは 'x = 1'に割り当てられているわけではありませんか? –

+2

[if if "if if" if else if "のパフォーマンスの重複の可能性のある複製](http://stackoverflow.com/questions/7970275/performance-difference-of-if-vs-if-else-if) – elhefe

答えて

2

条件が真の場合、それは他の「if」のをチェックしませんので、「esle場合」を使用する方が効率的ですが、あなたの最初の構造にそれはdoesnのif "if"はまだ他のすべてのif文をチェックします。

+0

私はintボックスのユーザー入力を取っているので、私の場合、平均で2倍の効率があります。私は現時点ではうまく動作していますが、私のデバイスは私が使っているデバイスのほうがずっと速いです。現時点で毎回最高ランニングのループ30の200行が表示されます。 –

1

効率は実際に実行しているコンパイラ/コンパイラのバージョンによって異なります。しかし、あなたが何千ものことをやっているのでなければ、それ以外の場合は実際には影響はありません。条件が真であるときにif文の残りの部分を実行する必要はありません。他の場合は実行します。

4

あなたのコードはコンパイルされません。実際に条件を確認する場合は、=の代わりに==を使用する必要があります。以上の2つの手法は、要件に応じて使用されます。あなたは、次のシナリオの最初のケースを使用することができます。

if (x==1) 
//Do something 
// 'x' may change here 
if (x==2) // check for next condition 
// Do another thing 
// 'x' may change 
if (x==3) // check for another condition 
// Do something more 
//'x' may change 

xの値が変更されていない場合は、コードの第2のセットを行うことができます。真の状態が見つかったら、残りの条件を評価するのをスキップすることができます。 x=1を考慮してください。実行時間を短縮できるように、x==2x==3をチェックすることはありません。あなたがチェックする複数のエントリを持っている場合は

x=1; 
if (x==1) // Evaluates to true; 
    // Do Something 
    // Exit the if 
else if (x==2) // will not check for this 
    //Do another thing 
else if (x==3) // will not check for this 
    //Do another thing 

あなたは、これら二つのための代わりにswitchを使用する必要があります。

+0

私が取り組んでいるのは、約200行のif文です。最長の伸縮は、条件1または条件2のステートメントでそれぞれ15回連続しています。ユーザの入力がない場合2つの条件があり、C#でボイドの更新ループがすべて破損しています。 –

+0

@MalcolmSmith:サンプルコード –

1

どちらも効率的で、どちらもそれぞれ独自の用途があります。

If else ifを使用してください。数が奇数か偶数であれば例えば、要件や問題が発見された場合:

$num = 0 

if($num == 0) 
    // print 'neutral' 
else if($num % 2 == 0) 
    // print even 
else 
    // print odd 

出力:

neutral 

1つの条件が満たされている場合は、上記の例でわかるように、私たちがいません我々はすでに答え、資源の廃棄物を持っていると我々はをすれば、誤った結果が得られるため、他の条件と比較する必要があります。

$num = 0 

if($num == 0) 
    // print neutral 
if($num % 2 == 0) 
    // print even 
if($num % 2 != 0) 
    // print odd 

出力:

Ifsを使用します。

$num1 = 2 
$num2 = 30 
$num3 = 31 

$large = $num1  

if($num2 > $large) 
    $large = $num2 
if($num3 > $large) 
    $large = $num3 

出力:

largest is $num3 or 31 

上記の例でわかるように、私たちはすべてのを比較する必要がありますが、1が最も大きい3つの数字とチェックを比較している場合は、別の実際の生活の例があるかもしれません数字のが最大になります。我々はこれを行う場合、私たちは誤った結果が得られます:

$num1 = 2 
$num2 = 30 
$num3 = 31 

$large = $num1  

if($num2 > $large) 
    $large = $num2 
else if($num3 > $large) 
    $large = $num3 

出力:

largest is $num2 or 30 
0

さらに良いことには - switch caseを使用します。

int x = 3; 

switch (x) 
{ 
    case 1: 
     print "1"; 
     break; 
    case 2: 
     print "2"; 
     break; 
    case 3: 
     print "3"; 
     break; 
    default: 
     print "something else"; 
     break; 
} 
+0

を含めてもらえますか?ありがとうございます。しかし、それを使うために私の現在のコードをすべて変更するのはずっと時間がかかり、難しいでしょう。 –

関連する問題