简单"如果"在keyTyped()中不起作用的语句

时间:2015-01-06 04:28:57

标签: java applet

我运行此代码,它给了我一个巨大的问题。如果不接受用户的任何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 ();
    }
}

3 个答案:

答案 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

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