2012-10-25 63 views
0

爲了我的問題的目的,我只包括情況1,但其他案件是相同的。假設值現在是1,我們轉到case 1,我們的for循環遍歷數組,以查看每個元素是否與whatever_value變量匹配。在這種情況下,如果是這樣,我們聲明值變量等於2,並且我們跳出循環。問題是,當我突出顯示另一個break(在eclipse中)時,它說break也附加到for語句中,但我只希望將for語句附加到if語句,而不是else if語句好。我認爲,因爲for語句沒有括號,只會循環使用if語句,但eclipse會另外聲明(否則,如果循環從0到數組的長度)。開關與if,否則如果,否則,並在案件內循環

switch (value) { 
    case 1: 
    for (int i = 0; i < something_in_the_array.length; i++) 
     if (whatever_value == (something_in_the_array[i])) { 
      value = 2; 
      break; 
     } else if (whatever_value == 2) { 
      value = 3; 
      break; 
     } else if (whatever_value == 3) { 
      value = 4; 
      break; 
     } 
    break; 
    case 2: 

    // code continues.... 
+4

小片建議:不要混合標籤和空格。你會清楚地看到它會破壞格式。 – Mysticial

+0

,因爲for語句也循環else if語句,我不想​​要但不知道如何使它只有if語句循環。因此,它不循環我們的數組的長度(如果else語句匹配),我插入一個休息。如果else if語句不匹配,它仍然會循環else if語句的整個數組長度。這是令人困惑的,我的代碼令人困惑,我明白。我的問題是,我如何使if語句成爲唯一,而不是如果得到循環。 – BubbleTree

回答

4

你的問題.....我覺得是你的for循環包含所有的ifelse if的東西 - 這就像一個語句,像晃阮指出。

更改爲此。請注意括號表示for循環所在的代碼塊,並將第一個else if更改爲if

switch(value){ 

    case 1: 
     for(int i=0; i<something_in_the_array.length;i++) { 
      if(whatever_value==(something_in_the_array[i])) { 
       value=2; 
       break; 
      } 
     } 

     if(whatever_value==2) { 
      value=3; 
      break; 
     } 
     else if(whatever_value==3) { 
      value=4; 
      break; 
     } 
     break; 


    case 2: 

code continues.... 
+0

哦!謝謝你,這就是你如何做到的,我試圖將if語句括在for循環中,但是如果連接到if,它不會讓我去做其他事情。但是,如果我爲循環做了單獨的if語句,它就像你展示的那樣工作。謝謝! – BubbleTree

+0

@eboix - *「//如果因爲如果前面的if語句是不會被執行的話,這實際上就像是一個else。」* - 不正確。 「for」循環中的「break」斷開到循環結尾。接下來的語句將會是下面的'if'語句! –

+0

@StephenC我在想什麼......你完全正確。我甚至不知道我是如何投票的:P – eboix

2

,但我只是想在for語句中的if語句,以及附着在if語句,而不是別的。

那好吧擺脫else然後。如果else if不應該是for的一部分,那麼把它寫成:

  for(int i=0; i<something_in_the_array.length;i++) 
       if(whatever_value==(something_in_the_array[i])) 
       { 
        value=2; 
        break; 
       } 

      if(whatever_value==2) 
      { 
       value=3; 
       break; // redundant now 
      } 

      else if(whatever_value==3) 
      { 
       value=4; 
       break; // redundant now 
      } 

說了:

  • 它不是完全清楚你真正想在這裏做,
  • 沒有else部分在循環中似乎沒有多大意義,
  • 許多人(包括我自己)認爲它總是使用大括號......所以人們不會得到不正確的縮進wh絆倒wh閱讀你的代碼。 (在這種情況下,它可能會幫助我們找出你真正想在這裏做...)

最後,括號是如果你把上一行的末尾左括號那麼突兀;例如

if (something) { 
    doSomething(); 
    } 

而不是:

if (something) 
    { 
    doSomething(); 
    } 
2

在這種情況下,我建議你用break標籤。

http://www.java-examples.com/break-statement

這樣你就可以專門調用它的外面循環。

+0

酷解決方案!直到今天,我才知道這些東西已經存在,並且我已經用Java編程了5年以上。 – Jiman

2

似乎是一種家常的做事方式,但如果你必須...... 你可以重組它是這樣來滿足您的需求:

boolean found = false; 

case 1: 

for (Element arrayItem : array) { 
    if (arrayItem == whateverValue) { 
     found = true;  
    } // else if ... 
} 
if (found) { 
    break; 
} 
case 2: 
2

如果您需要for聲明只包含if,你需要刪除其else,像這樣:

for(int i=0; i<something_in_the_array.length;i++) 
    if(whatever_value==(something_in_the_array[i])) 
    { 
     value=2; 
     break; 
    } 

    /*this "else" must go*/ 
    if(whatever_value==2) 
    { 
     value=3; 
     break; 
    } 

    else if(whatever_value==3) 
    { 
     value=4; 
     break; 
    }