[英]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.