2014-06-13 61 views
-7

我想知道爲什麼這段代碼給了我這個問題,請記住它已經在同一個項目的早期表單中工作,但它拒絕在這裏工作。否則沒有,如果錯誤?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){           
if (jCheckBox1.isSelected()== true) 
jCheckBox1.equals(56); 
if (jCheckBox2.isSelected()== true) 
jCheckBox2.equals(50); 
if (jCheckBox3.isSelected()== true) 
jCheckBox3.equals(56); 
if (jCheckBox4.isSelected()== true) 
jCheckBox4.equals(56); 
if (jCheckBox5.isSelected()== true) 
jCheckBox5.equals(56); 
if (jCheckBox6.isSelected()== true) 
jCheckBox6.equals(56); 
new Form6().setVisible(true); 

else 
if (jCheckBox1.isSelected()== false) 
jCheckBox1.equals(0); 
if (jCheckBox2.isSelected()== false) 
jCheckBox2.equals(0); 
if (jCheckBox3.isSelected()== false) 
jCheckBox3.equals(0); 
if (jCheckBox4.isSelected()== false) 
jCheckBox4.equals(0); 
if (jCheckBox5.isSelected()== false) 
jCheckBox5.equals(0); 
if (jCheckBox6.isSelected()== false) 
jCheckBox6.equals(0); 

JOptionPane.showMessageDialog(this, "Please Choose An Option and Try Again"); 

,如果有任何辦法,我計算使用不同的方法jCheckBox值,那麼我非常渴望學習。我的教授說,他幾乎知道關於java netbeans和東西的所有內容,但到目前爲止,他沒有什麼幫助。

+3

這就是爲什麼初學者應該在所有的使用括號的if語句(我喜歡做它內嵌以節省空間)。 (jCheckBox6.isSelected()== false){jCheckBox6.equals(0); if(jCheckBox6.isSelected()== false) }' 將它們關閉應該是一種先進的操作,而不是默認設置。 – Gavin42

+1

@ Gavin42:只有初學者? –

+4

就個人而言,我使用它們的時間爲99.9%。我更喜歡視覺確認塊在哪裏開始和結束。 – Gavin42

回答

1

讓我們來看看你的代碼的條件結構細看通過正確分離和使用縮進:

我喜歡有點空白添加到清楚知道發生了什麼。

private void main(void){ 
    //Indentation shows how program blocks are related to one another 
    if (this.condition(parameters) == true) 
     // Indentation here shows the following statement is clearly associated with the above condition. 
     this.DoSomething(parameters); 

現在,考慮到這一點,讓我們檢查你的代碼:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){           

    if (jCheckBox1.isSelected()== true) 
     jCheckBox1.equals(56); 

    if (jCheckBox2.isSelected()== true) 
     jCheckBox2.equals(50); 

    if (jCheckBox3.isSelected()== true) 
     jCheckBox3.equals(56); 

    if (jCheckBox4.isSelected()== true) 
     jCheckBox4.equals(56); 

    if (jCheckBox5.isSelected()== true) 
     jCheckBox5.equals(56); 

    if (jCheckBox6.isSelected()== true) 
     jCheckBox6.equals(56); 

    new Form6().setVisible(true); // This statement will always run because it's not associated with a condition. 

    else // Oops! Here is an else that is not associated with an if statement! This probably doesn't compile 
     if (jCheckBox1.isSelected()== false) // This if is conditional on the else above. 
      jCheckBox1.equals(0); 

    if (jCheckBox2.isSelected()== false) 
     jCheckBox2.equals(0); 

    if (jCheckBox3.isSelected()== false) 
     jCheckBox3.equals(0); 

    if (jCheckBox4.isSelected()== false) 
     jCheckBox4.equals(0); 

    if (jCheckBox5.isSelected()== false) 
     jCheckBox5.equals(0); 

    if (jCheckBox6.isSelected()== false) 
     jCheckBox6.equals(0); 

    JOptionPane.showMessageDialog(this, "Please Choose An Option and Try Again"); 
} // I assume you mean to close the method 

這是我看到的 - 這個代碼不使用{}塊將代碼與條件相關聯。如果這很好,但是要意識到如果不使用{}塊,則只有在if語句之後纔會運行下一行。

例子:

if (someCondition) 
    this.runSingleLine(); 

if (someCondition) 
    this.runSingleLine(); 
else 
    this.runSomeOtherSingleLine(); 


if (someCondition) 
{ 
    this.doSomething(); 
    this.doSomethingElse(); 
    ... 
    this.finishProcedure(); 
} 
10

使用curly brackets (braces)並縮進到避免這種微不足道的錯誤。

代碼

if (jCheckBox6.isSelected()== true) 
jCheckBox6.equals(56); 
new Form6().setVisible(true); 

else 
if (jCheckBox1.isSelected()== false) 
jCheckBox1.equals(0); 

相當於

if (jCheckBox6.isSelected()== true) { 
    jCheckBox6.equals(56); 
} 
new Form6().setVisible(true); // <-- WHAT??? 

else if (jCheckBox1.isSelected()== false) { // <-- WHERE IS MY IF? 
    jCheckBox1.equals(0); 
} 

雖然上面解釋了語法錯誤,所得到的程序將仍然是無義 - 這既是由於無意義「其他「配對,因爲所有的陳述都沒有(或者說)意味着什麼。然而,沒有問題描述的進一步猜測似乎並不明智。

+2

+1爲程序困惑的評論。 – christopher

0

我不明白這可能在以前的項目中有效。

這else語句本身(沒有對應的if語句):

else 
      if (jCheckBox1.isSelected()== false) 

而這個又是什麼意義呢?你是不是賦予這個新對象的引用:

new Form6().setVisible(true);