简单 "If" 语句在 keyTyped () 中不起作用
Simple "If" Statements not working in keyTyped ()
我正在运行这段代码,它给了我一个大问题。在不接受用户的任何字符的情况下,它只是跳过所有 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 ();
}
}
如果只想检查其中一个 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++;
}
注意:对于这种情况,首先尝试调试您的代码(使用断点或使用记录器)。您将通过调试本身找到问题的原因。
首先,什么是numOfCardsChosen?没有这个变量的声明。此外,您如何在代码中调用此方法?要捕获 KeyEvent,您肯定希望在 while 循环中调用此方法。
几个问题。首先,您的一系列 "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
将始终相同。
我正在运行这段代码,它给了我一个大问题。在不接受用户的任何字符的情况下,它只是跳过所有 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 ();
}
}
如果只想检查其中一个 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++;
}
注意:对于这种情况,首先尝试调试您的代码(使用断点或使用记录器)。您将通过调试本身找到问题的原因。
首先,什么是numOfCardsChosen?没有这个变量的声明。此外,您如何在代码中调用此方法?要捕获 KeyEvent,您肯定希望在 while 循环中调用此方法。
几个问题。首先,您的一系列 "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
将始终相同。