【问题标题】:I can't modify my boolean fields?我不能修改我的布尔字段?
【发布时间】:2015-04-26 05:03:00
【问题描述】:

这个问题解释了它,无论我做什么,我都无法修改我的布尔字段。以下代码是我正在做的作业中的一个类,但我需要能够修改布尔值才能做到这一点,由于某种原因我不能这样做,所以我不确定发生了什么:

    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);            
    }
}

【问题讨论】:

  • 您的问题中有很多不必要且完全不相关的代码,例如与您的问题无关的所有 Swing 代码。它真的可以而且应该用最多 10 行可编译和可运行的代码来询问。以后请大家多多体谅这里的志愿者,尽量让大家更容易的看懂你的代码,然后回答你的问题。有关这方面的更多信息,请查看:minimal example program.
  • 试试if(!something)if(something == false) == 是比较,而= 是赋值!相当于没有。所以 !true 会(不是真的)那么假。在您的 if(something = false) 中,您实际上是在设置或分配 false 给某些东西,所以在该语句之后某些东西将是 false 并且 if 将永远不会被执行。
  • @HovercraftFullOfEels 我提供了所有代码,因为问题可能与与布尔值无关的其他事情有关,我试图像其他人提到的那样提供尽可能多的信息.
  • 我的建议是,在来到这里之前,您可以缩减代码以尝试隔离您的错误。这当然不是要求太多的努力,因为你要求志愿者付出努力。新手提问者的其他要点:专注于正确的代码格式,因为这也将使您的代码更易于阅读和理解。您当前的格式有点偏离过多的空白行和非常规缩进。我们将非常感谢您在这方面的努力。
  • @HovercraftFullOfEels 好的,不过有一个问题,所以在这种情况下,我应该提供我的完整代码(我上面的测试类)以及隔离错误?

标签: java swing boolean awt


【解决方案1】:

您正在使用赋值检查变量something,该变量将始终为false,因此您的print 语句将永远无法到达:

if (something = false) {

使用布尔检查的简写形式可以避免此类错误:

if (!something) {

【讨论】:

  • 应该是if(!something) {
  • 1+ 或更好if (!something)
【解决方案2】:

if 语句由一个布尔表达式后跟一个或 更多语句。

改变这个

if(something=false){

           System.out.print("Something");

       }

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

if(something) //  for true check

示例为什么 if(boolean=boolean) 不是编译时错误

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);
}

【讨论】:

  • 是的,确实如此,但最终它应该返回一个布尔值,这就是为什么在此之后添加引号以更清楚地解释
  • 同样的评论赞成 :) ,但我有疑问 int a=10; if(a=2){ } 给我编译时错误。
  • 那是因为a=2 不是布尔表达式,它不会返回真或假。 boolean b = true; if(b = false) 是一个布尔表达式。
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2020-01-25
  • 1970-01-01
相关资源
最近更新 更多