2012-08-28 266 views
0

我正在做一個簡單的應用程序,其中用戶單擊一個按鈕,將TextView更改爲相應的字符串,但是當我的第一個if語句被滿足時,它不會繼續執行以下if語句應該是。Java if語句被忽略

if (index == 0 && index > -1 && index < 5) { 
    one.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     index++; 
     text1.setText("1"); 
    } 
    }); 

這是我的第一個if語句,它設置TextView的「1」,然後應該添加到整數「指數」,這原來該指數的值設置爲「1」,這應該結束這種說法,因爲它不再有資格,如果聲明將開始以下內容。

if (index == 1 && index > -1 && index < 5) { 
    one.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     text2.setText("1"); 
     index++; 
    } 
    }); 

因爲以前if陳述,該指數的變量設置爲「1」,這if說法應該開始和以前結束的現在,但這種情況並非如此,即使變量不再有資格,這不是」不要停下來,下一個if語句不會開始。就好像if語句被忽略。

UPDATE。

我固定我的問題,這是我改變了代碼:

one.setOnClickListener(new View.OnClickListener(){public void onClick(View v){ 
    if(index == 0){ 
    text1.setText("1"); 
    index++; 
    }else if(index == 1){ 
    text2.setText("1"); 
    index++; 
    }else if(index == 2){ 
    text3.setText("1"); 
    index++; 
    }else if(index == 3){ 
    text4.setText("1"); 
    index++; 
    } 
}}); 
+6

'if(index == 0 && index> -1 && index <5)'等於'if(index == 0)' –

+4

基本代碼流的問題? ...你的if語句只被檢查一次(在onCreate中的prolly)而不是在每個按鈕點擊... – Selvin

+1

'if(index == 0 && index> -1 && index <5)'沒有什麼意義。 – rtheunissen

回答

2

您的問題是您的index++語句位於onClick回調中。所以這個代碼不會被執行,直到按鈕被點擊。那時候,你的第二條陳述將會被執行。換句話說:

您的第一條if語句是正確的,這會將一個onClick偵聽器添加到該按鈕。你的第二個陳述是錯誤的,這沒有任何作用。用戶點擊按鈕。現在只有執行第一個回調中的代碼:index增加,文本設置爲「1」。就這些。

[編輯這可能是你想要的東西]

one.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     if (index == 0) { 
      index++; 
      text1.setText("1"); 
     } else if (index == 1) { 
      text2.setText("1"); 
      index++; 
     } 
    } 
}); 
+0

但我的第二個if語句直到「index's」變量= 1才被執行,直到按下按鈕纔會執行該語句? – 8BitSensei

3

從你的if語句

if (index == 0 && index > -1 && index < 5) 

只有

if (index == 0) 

足夠

與第二個相同..

if (index == 1) 
+1

另外,如果條件在按鈕的onClick()驗證每個按鈕的點擊條件.. – user370305

+0

這個答案並不真正解決他的問題,我認爲。 user370305的評論很重要。 – Jochem

+0

我知道他們是毫無意義的,但我被告知由誰給我的任務 – 8BitSensei

3

這不是如何,如果聲明工作。當條件變爲錯誤時,控制流程不會突然離開程序段並跳轉到其他具有真實條件的if塊。

+0

+1,因爲我認爲你理解了這個問題(這並不容易) – erikkallen

+0

他可能已經使用梯形圖 – hogni89

+0

Jochem有這個權利,雖然 - 他/他也回答了正確的問題,但以更完整的方式這樣做。 – djechlin

0

索引== 1或索引== 0之後其他條件的相關性是什麼?

0

的原因,這是行不通的,是聽者可能是在「的onLoad」方法或在類的構造函數中添加。

由於您的setOnClickListener被if語句包圍,因此只有在該語句爲true的情況下才會設置偵聽器。在你的情況下,第一個陳述是真實的,而第二個陳述是錯誤的。

這意味着只添加第一個列表器,並且每次單擊該按鈕時,調用text1.setText("1")

你應該把你的if語句放在你的onClickListener中,而不是圍繞設置偵聽器的邏輯。所以下面的代碼:

if (index == 0 && index > -1 && index < 5) { 
     one.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       index++; 
       text1.setText("1"); 

      } 
     }); 

應該

one.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
    if (index == 0) { 
     index++; 
     // Do stuff 
    } else if(index == 1) { 
     index++; 
     // Do stuff 
    } 
    }); 
} 

每當用戶點擊按鈕 '一' 時,onClick函數調用。 在onClick語句中進行計算,並執行正確的「Do stuff」。

+0

這不會編譯。 if語句在打開匿名類定義後立即生效。 – Jochem

+0

現在應該改正 – hogni89

+0

至少保留原始縮進 –

0

另一種可行的解決方案:

if ((index > -1) && (index < 5)) { 
    one.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      text2.setText(index.toString()); 
      index++; 
    } 
}); 

-Obviously這取決於你需要明確,如果你確實需要另一個發生是在指數== 0,你就必須改變這種格式的邏輯:

if (index == 0) { 
    //Whatever you want to do here... eg: 
    one.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      text2.setText("0"); 
      index++; 
     } 
    }); 
} 
else if ((index > -1) && (index < 5)) { 
    one.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      text2.setText(index.toString()); 
      index++; 
    } 
}); 
+0

在這種情況下,你有一個if語句圍繞你的onClickListener。 將if語句放在onClickListener中不是更好嗎? – hogni89

+0

投票似乎苛刻+1。我的答案相似。 – Yoztastic