Java If语句中未更改布尔值

Java If语句中未更改布尔值,java,android,Java,Android,我有两个类:GameScreen.java和KeyButton.java。有三个按钮是GameScreen类中引用的布尔值(无论是否按下),我想将它们与KeyButton类中的值进行比较。以下是相关代码: GameScreen.java: private void checkButtons() { // Log.d("GameScreen","Note and Bar Intersected"); KeyButton keybutton = new KeyButton(); if (B1

我有两个类:GameScreen.java和KeyButton.java。有三个按钮是GameScreen类中引用的布尔值(无论是否按下),我想将它们与KeyButton类中的值进行比较。以下是相关代码:

GameScreen.java:

private void checkButtons() {
// Log.d("GameScreen","Note and Bar Intersected");

KeyButton keybutton = new KeyButton();

  if (B1Pressed == keybutton.getB1() && B2Pressed == keybutton.getB2() && B3Pressed == keybutton.getB3()) {
     // Log.i("GameScreenTest", "Correct");
      score++;
  } else {
     // Log.i("GameScreenTest - Result", "Wrong");
     // Log.i("GameScreenTest - Button Pressed", Boolean.toString(B1Pressed));
     // Log.i("GameScreenTest - Button Required", Boolean.toString(keybutton.getB1()));
  }
}
KeyButton.java:

public class KeyButton {

public boolean B1 = false;
public boolean B2 = false;
public boolean B3 = false;

Rectangles Rectangles = new Rectangles();
{

    //C major
    if (ScalesScreen.scaleType.equals("C")) {
    //C
    if (GameScreen.intersected == Rectangles.rectangle1) {
            B1 = false;
            B2 = false;
            B3 = false;
        }
    //D
    if (GameScreen.intersected == Rectangles.rectangle2) {
            B1 = true;
            B2 = false;
            B3 = true;
        }
    //E
    if (GameScreen.intersected == Rectangles.rectangle3) {
            B1 = true;
            B2 = true;
            B3 = false;
        }
    //F
    if (GameScreen.intersected == Rectangles.rectangle4) {
            B1 = true;
            B2 = false;
            B3 = false;
        }
...
public boolean getB1() {
    // TODO Auto-generated method stub
    //Log.d("Key 1", Boolean.toString(B1));
    return B1;
}

public boolean getB2() {
    // TODO Auto-generated method stub
    //Log.d("Key 2", Boolean.toString(B2));
    return B2;
}

public boolean getB3() {
    // TODO Auto-generated method stub
    //Log.d("Key 3", Boolean.toString(B3));
    return B3;
}
出于某种原因,B1、B2和B3值在游戏屏幕代码中返回false(来自keybutton.getB1()),导致每次未按下按钮时分数增加。因此,出于某种原因,布尔值没有被更改为KeyButton类中应该有的值。我能做些什么来解决这个问题

增加:

 for (Rect rect : rectangles) {

   if(Rect.intersects(rect, bar)) {
     //  Log.d("GameScreen", "intersected");
    intersected = rect;
    //  Log.d("Intersected", intersected.toString());
    checkButtons();

  }
}

每当调用CheckButton方法时,您都在创建一个新的KeyButton对象。在这种情况下,每次都会重置标志

KeyButton keybutton = new KeyButton();
而不是使用Keybutton的全局实例或将Keybutton作为单个实例。这样旗帜就会持续存在

public class KeyButton
{
    public boolean B1 = false;
    public boolean B2 = false;
    public boolean B3 = false;

    // Singleton
    private static KeyButton sInstance;
    private KeyButton () {}

    public static synchronized KeyButton getInstance()
    {
        if (sInstance == null)
        {
            sInstance = new KeyButton();
        }
        return sInstance;
    }

    ..
}

四个交叉点检查是否意外嵌套在
if(scaleScreen.scaleType.equals(“C”))
块中?如果按下所有按钮或其中任何一个按钮,布尔值是否会更改pressed@ShashankUdupa它们应该根据相交矩形(添加的代码部分)的不同而变化与在不同类中定义的矩形(称为矩形,不会更改)相同。
keyButton.java
中的代码似乎在方法之外有语句(即如果方法中不包含
语句…)-我很惊讶您没有得到编译错误。或者您是否遗漏了更多的代码?很难判断何时调用将B1、B2、B3设置为期望值的代码。@user2712795查看下面的Sree解决方案,我相信这基本上是正确的答案。我将此添加到我的代码中,并将代码更改为
KeyButton KeyButton=KeyButton.getInstance()但所有布尔值仍返回false。