我运行此代码,它给了我一个巨大的问题。如果不接受用户的任何char,它只会跳过所有if语句,并自动将numOfCardsChosen更改为5。
public void keyTyped (KeyEvent e)
{
if (numOfCardsChosen == 0)
{
cardChosen1 = e.getKeyChar ();
numOfCardsChosen++;
cardChosen2 = e.getKeyChar ();
System.out.println (numOfCardsChosen);
}
if (numOfCardsChosen == 1)
{
cardChosen2 = e.getKeyChar ();
numOfCardsChosen = 2;
System.out.println (numOfCardsChosen);
}
if (numOfCardsChosen == 2)
{
cardChosen3 = e.getKeyChar ();
numOfCardsChosen = 3;
System.out.println (numOfCardsChosen);
}
if (numOfCardsChosen == 3)
{
cardChosen4 = e.getKeyChar ();
numOfCardsChosen = 4;
System.out.println (numOfCardsChosen);
}
if (numOfCardsChosen == 4)
{
cardChosen5 = e.getKeyChar ();
numOfCardsChosen = 5;
System.out.println (numOfCardsChosen);
repaint ();
}
}
答案 0 :(得分:0)
如果您只想检查其中一个if条件,请使用if-else if-else if-else-else
,而不是if-if-if-if
。
@JRowan已在您的问题评论中回答了您的问题。
int i = 0;
if (i == 0) {
System.out.println(i);
i++;
}
if (i == 1) {
System.out.println(i);
i++;
}
if (i == 2) {
System.out.println(i);
i++;
}
改为使用
int i = 0;
if (i == 0) {
System.out.println(i);
i++;
} else if (i == 1) {
System.out.println(i);
i++;
} else if (i == 2) {
System.out.println(i);
i++;
}
注意:对于这种情况,首先尝试调试代码(使用断点或使用记录器)。您将通过调试本身来解决问题。
答案 1 :(得分:0)
首先,numOfCardsChosen是什么?没有声明此变量。另外,您如何在代码中调用此方法?要捕获KeyEvent,您肯定希望在while循环中调用此方法。
答案 2 :(得分:0)
几个问题。首先,您的一系列“if”语句每个都递增numOfCardsChosen
,从而使下一个if
语句的条件成立(假设第一个条件为真)。例如,假设numOfCardsChosen
最初为0:
if (numOfCardsChosen == 0)
{
// snipped
numOfCardsChosen++; // <-- numOfCardsChosen is now 1
// snipped
}
if (numOfCardsChosen == 1) // <-- condition is now true
{
numOfCardsChosen = 2; // <-- numOfCardsChosen is now 2
}
if (numOfCardsChosen == 2) // <-- so this is true
// etc
这可以通过对第二个和后续的'if'语句使用'else if'来解决。
其次,你要求同一事件中的关键字符两次:
if (numOfCardsChosen == 0)
{
cardChosen1 = e.getKeyChar (); // <-- here you get the key character
numOfCardsChosen++;
cardChosen2 = e.getKeyChar (); // <-- here you get it again
在上面的代码段中,cardChosen1
和cardChosen2
将始终相同。