【问题标题】:Making an If Statement for first round of Switch Java为第一轮 Switch Java 做一个 If 语句
【发布时间】:2017-12-08 01:11:16
【问题描述】:

我试图通过开关为 for 循环的第一次迭代设置特定图像。对于case 'f',我想在第一次迭代时添加不同的图像。

我该怎么做?甚至可以在交换机内跟踪吗?

    for (char c : symbols) {
            switch (c) {
            case 'X':
                g2.setColor(Color.BLACK);
                g2.drawImage(wallImg, x, y, width, height, null);
                break;
            case 's':
                g2.setColor(Color.GREEN);
                g2.drawImage(snakeImg, x, y, width, height, null);
                break;
            case 'f':
                g2.setColor(Color.ORANGE);
                g2.drawImage(burgerImg, x, y, width, height, null);
                break;
            case '.':
                g2.setColor(Color.WHITE);
                g2.fillRect(x, y, width, height);
                break;
            case '\n':
                y += height;
            }

【问题讨论】:

  • 在 switch 之前添加一个布尔标志,然后执行 if(boolean flag) 检查它是否为真/假,如果为真则进入 else,以便加载不同的图像。
  • 迭代计数根本不应该是绘画过程的一部分,因为您无法控制绘画的方式、是否或何时发生。对象状态的变化应该在您的游戏循环中(可能是 Swing Timer)。绘制方法应该只反映模型的状态,而不是改变它。
  • 这是否解决了您的问题@user5402 您尚未将其标记为解决方案 - 您从中收到了什么问题?
  • 谢谢@Artemis,是的,它解决了我的问题

标签: java swing switch-statement


【解决方案1】:

添加一个标志以查看您是否已经迭代,然后在您的 switch-case 中采用 if 语句来解释它,如下所示:

        boolean flag = false;    

        for (char c : symbols) {
            switch (c) {
            case 'X':
                g2.setColor(Color.BLACK);
                g2.drawImage(wallImg, x, y, width, height, null);
                break;
            case 's':
                g2.setColor(Color.GREEN);
                g2.drawImage(snakeImg, x, y, width, height, null);
                break;
            case 'f':
                //check to see if your flag is true/false
                if(flag){
                    g2.setColor(Color.ORANGE);
                    g2.drawImage(burgerImg, x, y, width, height, null);
                }else{
                    //set first image
                    flag = true;
                }
                break;
            case '.':
                g2.setColor(Color.WHITE);
                g2.fillRect(x, y, width, height);
                break;
            case '\n':
                y += height;
                break;
        }

【讨论】:

  • 尽管@Artemis 标志不是总是为假的吗?
  • @user5402 否,因为您在 else 语句中设置了 flag = true 并且从未将其设置回 false
  • 你为什么使用Boolean flag(大写B)而不是boolean flag(小写b)?
  • 我错过了,我的错误(虽然两者都有效,但我应该使用原始类型而不是对象/引用类型)。
猜你喜欢
  • 2014-09-07
  • 2018-10-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多