有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java简单的“If”语句在keyTyped()中不起作用

我正在运行这段代码,这给了我一个巨大的问题。在不接受用户的任何字符的情况下,它只跳过所有if语句,并自动将numocardschosen更改为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) 个答案

  1. # 1 楼答案

    有几个问题。首先,您的一系列“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将始终相同

  2. # 2 楼答案

    首先,什么是numOfCardsChosen?此变量没有声明。另外,您如何在代码中调用此方法?要捕获KeyEvent,您肯定希望在while循环中调用此方法

  3. # 3 楼答案

    如果只想检查其中一个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++;
    }
    

    注意:对于这种情况,首先尝试调试代码(使用断点或使用记录器)。您将从调试本身中找到问题的原因