[英]Comparison between the JFormattedTextField and Integer objects
我有些奇怪的问题。
我正在编写一个简单的Sudoku程序。 现在,除以下方法外,一切都可以正常运行:
public static void checkAnswerKey()
{
int rowCounter = 0;
int columnCounter = 0;
System.out.println("The answers that are correct are (F is incorrect): ");
for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
{
for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
{
if (gui.userInputFormattedArray[rowCounter][columnCounter].getText() == io.puzzleAnswerArray[rowCounter][columnCounter].toString())
{
gui.userInputFormattedArray[rowCounter][columnCounter].setBackground(gui.correctAnswer);
System.out.print(gui.userInputFormattedArray[rowCounter][columnCounter].getText() + " ");
}
else
{
gui.userInputFormattedArray[rowCounter][columnCounter].setBackground(gui.incorrectAnswer);
System.out.print(gui.userInputFormattedArray[rowCounter][columnCounter].getText() + io.puzzleAnswerArray[rowCounter][columnCounter].toString() + " ");
//System.out.print("F" + " ");
}
}
System.out.println();
}
这取自game.java文件。
现在,该方法应该根据内部答案检查用户输入。 是的。 但是一切都变得不正确。
这是io.java和gui.java文件中的声明/实例。
public class gui extends JFrame implements ActionListener{
...
public static JFormattedTextField[][] userInputFormattedArray = new JFormattedTextField[9][9];
//Create the container.
public Container pane = getContentPane();
//The font the game uses.
public Font gameFont = new Font("Arial", Font.PLAIN, 30);
//Correct and incorrect answer colors.
static Color correctAnswer = new Color(100, 255, 100);
static Color incorrectAnswer = new Color(255, 100, 100);
这两个方法在构造函数中启动:
public void showTextFields()
{
int rowCounter = 0;
int columnCounter = 0;
for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
{
for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
{
userInputFormattedArray[rowCounter][columnCounter] = new JFormattedTextField();
pane.add(userInputFormattedArray[rowCounter][columnCounter]);
userInputFormattedArray[rowCounter][columnCounter].setFont(gameFont);
userInputFormattedArray[rowCounter][columnCounter].setHorizontalAlignment(JTextField.CENTER);
}
}
}
public void setTextFields()
{
String heldString;
boolean notEditable = false;
int rowCounter = 0;
int columnCounter = 0;
for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
{
for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
{
if (game.puzzleUserShownArray[rowCounter][columnCounter] != 0)
{
heldString = game.puzzleUserShownArray[rowCounter][columnCounter].toString();
userInputFormattedArray[rowCounter][columnCounter].setText(heldString);
userInputFormattedArray[rowCounter][columnCounter].setEditable(notEditable);
}
}
}
}
这是答案的来源:
public static Integer[][] puzzleAnswerArray = new Integer[9][9];
public void getPuzzle() throws FileNotFoundException
{
Scanner puzzlesInFile = new Scanner(new FileReader("C:\\Users\\owner\\Desktop\\eclipse\\projects\\Sudoku\\Sudoku\\src\\puzzles.dat"));
String searchParameter = "#puzzle" + intPuzzleSeed;
int rowCounter = 0;
int columnCounter = 0;
//Prints the search parameter into the console, ensuring accuracy with the RNG.
System.out.print(searchParameter);
System.out.println();
//
puzzlesInFile.findWithinHorizon(searchParameter, 0);
while (puzzlesInFile.hasNextInt())
{
for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
{
for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
{
puzzleAnswerArray[rowCounter][columnCounter] = puzzlesInFile.nextInt();
System.out.print(puzzleAnswerArray[rowCounter][columnCounter].toString() + " ");
}
System.out.println();
}
}
puzzlesInFile.close();
}
我希望这是足够的信息。 我是否缺少明显的东西? 顺便说一下,这是一个完成的难题的控制台输出:
正确的答案是(F不正确):11 22 33 44 55 66 77 88 99 44 55 66 77 88 99 11 22 33 77 88 99 11 22 33 44 55 66 22 33 44 55 66 77 88 99 11 55 66 77 88 99 11 22 33 44 88 99 11 22 33 44 55 66 77 33 44 55 66 77 88 99 11 22 66 77 88 99 11 22 33 44 55 99 11 22 33 44 55 66 77 88
这是GUI:
---编辑:我无法发布GUI,因为我的信誉不到10。 到达那里后,我将发布.png的GUI。---
我的猜测是,即使“字符串”是相同的,由于某种原因还是另一个原因,它也无法将其识别为相同的字符串。 让我知道是否需要查看更多代码,但我想我已经介绍了所有内容。
您正在使用==
进行字符串相等性检查。
if(gui.userInputFormattedArray[rowCounter][columnCounter].getText() == io.puzzleAnswerArray[rowCounter][columnCounter].toString()) {
请改用.equals()
方法。 这不仅适用于字符串,而且适用于任何类型的对象。 如果是对象,则==
检查对象的身份。
尝试:
if(gui.userInputFormattedArray[rowCounter][columnCounter].getText().equals(io.puzzleAnswerArray[rowCounter][columnCounter].toString())) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.