繁体   English   中英

比较整数时出现问题

[英]Trouble with comparing integers

我目前正在为CS课程开发一个项目,该项目涉及制作GUI游戏,该游戏允许用户玩纸牌游戏浓度(或记忆)。 我的所有代码都可以正常工作,直到我开始比较每张卡的值为止。 我告诉卡牌当它们没有相同的价值时要翻转过来,但它们仍会保留。 我已经检查了我的代码,并且每当有代码时:

if (card1.returnValue() == card2.returnValue())

它指出值始终相等,即使我可以看到它们也不相等。

这是该问题的其余代码,对于提供的任何帮助,我将不胜感激:

//FORMAT TAKEN FROM HANDOUT IN CLASS

import java.awt.*;
import javax.swing.*;
import javax.swing.Timer;
import java.util.*;
import java.awt.event.*;

public class Cards extends JPanel
{

private static final long serialVersionUID = 1L;



ImageIcon back;
ActionListener timerPerformer;
Timer buttonTimer;
private int count = 0;
private int turnCounter = 0;
private int matchCounter = 0;


//randomization
public static void randomize(Button[] x) //http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle for algorithm
{

    Random randomButton = new Random();

    for (int i = x.length - 1; i > 0; i--)
    {

        int temp = randomButton.nextInt(i + 1);
        Button button = x[temp];
        x[temp] = x[i];
        x[i] = button;
    }

}

    public Cards()
    {
        setBackground(Color.gray);

        //CARD BACK
        back = new ImageIcon(getClass().getResource("b2fv.png"));
        Image i1 = back.getImage();
        Image i2 = i1.getScaledInstance(75, 100, Image.SCALE_DEFAULT);
        back.setImage(i2);


        //CARD FACES
        ImageIcon[] faces = new ImageIcon[55]; //creates an array of ImageIcons

        for (int i = 1; i <= 54; i++)
        {   
            faces[i] = new ImageIcon(getClass().getResource(i + ".png"));
            i1 = faces[i].getImage();
            i2 = i1.getScaledInstance(75, 100, Image.SCALE_DEFAULT);
            faces[i].setImage(i2);
        }


        //CREATE BUTTONS
        Button[] buttons = new Button[54]; //creates an array of Buttons


        for(int i = 0; i < 54; i++)
        {
            if(i / 4 == 0)
            buttons[i] = new Button(faces[i + 1], back, 14);
            if(i / 4 == 1)
            buttons[i] = new Button(faces[i + 1], back, 13);
            if(i / 4 == 2)
            buttons[i] = new Button(faces[i + 1], back, 12);
            if(i / 4 == 3)
            buttons[i] = new Button(faces[i + 1], back, 11);
            if(i / 4 == 4)
            buttons[i] = new Button(faces[i + 1], back, 10);
            if(i / 4 == 5)
            buttons[i] = new Button(faces[i + 1], back, 9);
            if(i / 4 == 6)
            buttons[i] = new Button(faces[i + 1], back, 8);
            if(i / 4 == 7)
            buttons[i] = new Button(faces[i + 1], back, 7);
            if(i / 4 == 8)
            buttons[i] = new Button(faces[i + 1], back, 6);
            if(i / 4 == 9)
            buttons[i] = new Button(faces[i + 1], back, 5);
            if(i / 4 == 10)
            buttons[i] = new Button(faces[i + 1], back, 4);
            if(i / 4 == 11)
            buttons[i] = new Button(faces[i + 1], back, 3);
            if(i / 4 == 12)
            buttons[i] = new Button(faces[i + 1], back, 2);
            if(i / 4 == 13)
            buttons[i] = new Button(faces[i + 1], back, 1);
        }



        //LISTENER
        for (int i = 0; i < 54; i++)
        {   

            buttons[i].addActionListener(new GameLogic());

        }


        //ADD
        randomize(buttons);

        for (int i = 0; i < 54; i++)
        {   
            add(buttons[i]);
        }       




        //TIMER - handout in class
        timerPerformer = new ActionListener()
        {
            public void actionPerformed(ActionEvent e) 
            {

                for(int i = 0; i < 54; i++)
                {
                    buttons[i].turn = buttons[i].turn = true;
                    buttons[i].turn();
                }

            }

        };
        buttonTimer = new Timer(500, timerPerformer);
        buttonTimer.setRepeats(false);


    } // end Cards()


    public class GameLogic implements  ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            Button card1 = (Button) e.getSource();
            Button card2 = (Button) e.getSource();

            if(!card1.turn && !buttonTimer.isRunning())
            {
                card1.turn();
                count++;
            }

            if (card1.returnValue() == card2.returnValue())
            {
                if (count > 1)
                {
                    matchCounter += 1;
                    turnCounter += 1;
                    count = 0;
                }
            }

            if (card1.returnValue() != card2.returnValue())
            {
                if (count > 1)
                {
                    buttonTimer.start();
                    turnCounter += 0;
                    count = 0;
                }

            }

        }

    }

}




//FORMAT TAKEN FROM HANDOUT IN CLASS
import javax.swing.*;


public class Button extends JButton 
{
private static final long serialVersionUID = 1L;

ImageIcon face, back;
int value;
boolean turn;
boolean faceUp;
boolean faceDown;

public Button(ImageIcon face, ImageIcon back, int value)
{

    this.face = face;
    this.back = back;
    this.value = value;
    turn = true;
    turn();

}


public void turn()
{

    turn = !turn;

    if (turn)
        this.setIcon(face);
    else
        this.setIcon(back);

}


    public boolean cardUp()
    {
        return faceUp;
    }

    public boolean cardDown()
    {
        return !faceUp;
    }

    public int returnValue()
    {
        return value;
    }


}

正确。 他们总是一样的。

Button card1 = (Button) e.getSource();
Button card2 = (Button) e.getSource();

由于e.getSource()是相同的card1 == card2

由于以下几行,您的编译器告诉您这些值相等:

Button card1 = (Button) e.getSource();
Button card2 = (Button) e.getSource();

您正在将完全相同的Button实例分配给两个不同的变量。 因此, if (card1.returnValue() == card2.returnValue())将始终为true。 由于相同的Button引用, if (card1 == card2)也为true。

您可以尝试以下方法:

添加实例变量Button firstSelectedCard ,然后在actionPerformed方法内部添加:

public void actionPerformed(ActionEvent e) {
   if (firstSelectedCard == null) {
       firstSelectedCard = (Button) e.getSource();
   } else {
       Button secondSelectedCard = (Button) e.getSource();
       // ... perform checks
       firstSelectedCard = null;
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM