2015-02-24 35 views
0

那麼這個問題解釋它,不管我做什麼我不能修改我的布爾字段。下面的代碼是我正在做的任務中的一個類,但我需要能夠修改布爾值,以便做到這一點,我不能出於某種原因,所以我不知道發生了什麼事情:我無法修改我的布爾字段?

使用
import java.awt.Color; 
    import java.awt.Component; 
    import java.awt.Font; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.Shape; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.geom.Rectangle2D; 

    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.Timer; 
    @SuppressWarnings("serial") 

    public class Test extends JPanel implements ActionListener { 

    private String senderName,reciverName,message; 
    private int w=250,velx=13,x=330,senderW=350,senderH=100,reciverW=350,reciverH=270,messageW=350,messageH=50; 
    private Timer tm = new Timer(50, this); 
    private boolean something=true; 

    public void setSomething(boolean s){    
     something=s; 
    } 

    public Test(String s1,String s2, String s3){ 
      String cutString1 = s1.substring(0, Math.min(15, s1.length())); 
      String cutString2 = s2.substring(0, Math.min(15, s2.length())); 
      String cutString3 = s3.substring(0, Math.min(30, s3.length())); 

      senderName=cutString1; 
      reciverName=cutString2; 
      message=cutString3;     
      setSomething(false); 
      //Even though I set it to false it still holds true and won't print it out 
      if(something=false){     
       System.out.print("Something");     
      }     
      setLayout(null);     
      timer(); 
    } 

    public void timer(){    
     tm.setInitialDelay(10000); 
     tm.start();   
    } 

    public void paintComponent(Graphics g){ 
     setOpaque(true);    
     super.paintComponent(g); 
     Font font1 = new Font( "TimesRoman", Font.BOLD, 17); 
     Font font2 = new Font( "TimesRoman", Font.BOLD, 30);   
     g.setColor(Color.CYAN); 
     g.fillRect(330, 30, 250, 390); 
     g.setFont(font1); 
     g.setColor(Color.BLUE); 
     g.drawString(message, messageW, messageH); 
     g.setColor(Color.RED); 
     g.fillRect(x, 30, w, 390); 
     g.setColor(Color.BLUE); 
     g.setFont(font2); 
     g.drawString(senderName, senderW, senderH); 
     g.drawString("To",430, 200); 
     g.drawString(reciverName, reciverW, reciverH); 
     } 

    public void anime(){    
     w=w-velx; 
     repaint(); 
    } 

    public void actionPerformed(ActionEvent e){     
       anime(); 
    }  

    public static void main(String[] args){ 
     JFrame frame2 = new JFrame(); 
     frame2.add(new Test("something","something","something")); 
     frame2.setTitle("Title"); 
     frame2.setSize(700,500); 
     frame2.setResizable(true); 
     frame2.setLocationRelativeTo(null); 
     frame2.setVisible(true);    
    } 
} 
+2

在你的問題中你有很多不必要的和完全不相關的代碼,例如所有與你的問題無關的Swing代碼。實際上可能並且應該已經被詢問了最多10行可編譯和可運行的代碼。將來,請對這裏的志願者表示憐憫,並試着讓你更容易理解你的代碼,然後回答你的問題。有關更多信息,請參閱:[最小示例程序](http://stackoverflow.com/help/mcve)。 – 2015-02-24 14:20:33

+2

嘗試'if(!something)'或'if(something == false)'==比較= =時的賦值!相當於沒有。所以!真實會是(不真實)如此虛假。在你的'if(something = false)'中,你實際上正在設置或賦值false,所以在該語句之後,某些內容將是錯誤的,並且if將永遠不會被執行。 – brso05 2015-02-24 14:20:34

+0

@HovercraftFullOfEels我給了我所有的代碼,因爲問題可能與其他與布爾無關的事情有關,我試圖儘可能地提供儘可能多的信息,就像其他人提到的一樣。 – user4601488 2015-02-24 14:38:49

回答

4

特殊照顧賦值檢查變量something這將永遠是false所以你print聲明將永遠不會達到:

if (something = false) { 

使用布爾檢查的縮寫形式避免了這種類型的錯誤:

if (!something) { 
+1

它應該是'if(!something){' – 2015-02-24 14:17:13

+1

1+或更好'if(!something)' – 2015-02-24 14:17:22

2

An if statement consists of a Boolean expression followed by one or more statements.

更改此

if(something=false){ 

      System.out.print("Something"); 

     } 

if(!something){ // for false check } 

if(something) // for true check 

例爲什麼如果(布爾=布爾值)不是編譯時間錯誤

public static void main(String[] args) { 
    boolean test = true; 
    int a = 0; 
    boolean test1 = false; 
    test1 = (test = true); // no error boolean expression 
    test = (a = 1); // compile error not a boolean expression 
    if(test = false) 
    { 

    } 
    System.out.println("" + test); 
} 
+0

是的,但它最終應該返回一個布爾值,這就是爲什麼後面加上引號可以更清楚地解釋 – 2015-02-24 14:26:36

+0

@ brso05,謝謝,1+,現在就學會了:) – 2015-02-24 14:35:03

+0

沒問題!給你一個upvote! – brso05 2015-02-24 14:35:37