简单 "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

在上面的代码片段中,cardChosen1cardChosen2 将始终相同。