打破;然后继续;在java中

时间:2012-10-11 14:57:31

标签: java break continue

我有一个代码从button获取值,然后输出一些东西。 如果我不使用break;我按下left button,它将输出数千左。 enterright也是如此。

我不是Java大师,几周前我开始使用Java编程。

我希望我的代码永远不会stop reading button value,但我不希望我的代码输出数千左,右或输入button is pushed。我怎样才能做到这一点?此代码正常运行,但在push one button之后停止。如果我向左按下按钮,它将向左输出一次,然后停止运行。没有休息;它会输出数千个。

for (int i = 0; ; i++) {

        // Get the data from analog input 5
        int sensorValue1 = phidget.getSensorValue(1);
        int sensorValue2 = phidget.getSensorValue(2);
        int sensorValue3 = phidget.getSensorValue(3);

        if (sensorValue1 > 100 || sensorValue2 > 100 || sensorValue3 > 100){
        // printing value
        //System.out.println("sensorValue1 = " + sensorValue1 + ", sensorValue2 = " + sensorValue2 + ", sensorValue3 = " + sensorValue3 + ", Count = " + i);
            if (sensorValue1 > 100){

                System.out.println("RIGHT");

                // simulates RIGHT key
                try { 
                Robot robot = new Robot(); 
                robot.keyPress(KeyEvent.VK_RIGHT); 
                } catch (AWTException e) { 
                e.printStackTrace(); 
                }
                break;

            } else if (sensorValue2 > 100)
            {
                System.out.println("LEFT");

                // simulates LEFT key
                try { 
                Robot robot = new Robot(); 
                robot.keyPress(KeyEvent.VK_LEFT); 
                } catch (AWTException e) { 
                e.printStackTrace(); 
                }
                break;
            } else if (sensorValue3 > 100)
            {
                System.out.println("ENTER");

                // simulates ENTER key
                try { 
                Robot robot = new Robot(); 
                robot.keyPress(KeyEvent.VK_ENTER); 
                } catch (AWTException e) { 
                e.printStackTrace(); 
                }
                break;
            } 
        } else {}

    }

5 个答案:

答案 0 :(得分:3)

设置变量以指示最后一个输出是什么(“LEFT”,“RIGHT”等)。然后,在再次输出之前,检查变量是否设置为您要输出的值。如果是,跳过输出;如果没有,请输出并重置变量。

private static final String LEFT = "LEFT";
private static final String RIGHT = "RIGHT";
private static final String ENTER = "ENTER";

String lastOutput = null;
for (i = 0; ; i++) {
    . . .
    if (sensorValue1 > 100){
        if (lastOutput != RIGHT) {
            System.out.println(RIGHT);
            lastOutput = RIGHT;
        }
    . . .
}

答案 1 :(得分:1)

从所有break条件中删除if语句。它正在从for循环中删除执行。

我只想说重新初始化IF条件中的传感器值

  

if(sensorValue1> 100){     .....     sensorValue1 = 0;   }

对于sensorValue2

  

else if(sensorValue2> 100){     .....     sensorValue2 = 0;   }

对于sensorValue3

  

if(sensorValue3> 100){     .....     sensorValue3 = 0;   }

答案 2 :(得分:1)

你需要做的是跟踪按钮值,只在按钮值低于100时打印RIGHT或LEFT,然后超过100.当按钮值高于100时,你需要等到它出现退回到100以下,直到你再次检查它是否回到上面。

你需要为每个按钮保留一些状态变量,可能只是当按钮超过100时设置为didPrintMessage的{​​{1}}这样的布尔值,并重置为true当它低于100.然后,当按钮的值超过100时,如果falsedidPrintMessage,则只打印LEFT或RIGHT。在将false设置为didPrintMessage之前执行此操作。

true

看起来这是在嵌入式系统上运行的Java,就像微控制器一样。将来,这将是有用的信息。

答案 3 :(得分:1)

我只是在最后将所有传感器值分配给0,并在开头添加一个if条件。这也可以帮助您区分用户是否输入了相同的密钥两次,而没有输入任何内容。我没有看到使用旧值变量的任何用法。

// Get the data from analog input 5
int sensorValue1 = phidget.getSensorValue(1);
int sensorValue2 = phidget.getSensorValue(2);
int sensorValue3 = phidget.getSensorValue(3);

 if (sensorValue1 == 0 && sensorValue2 == 0 && sensorValue3 ==0){
     /don't do anything
 else if (sensorValue1 > 100 && oldSensorValue1 < 100){
 ......
 ......

在底部(if-else除外),添加

sensorValue1 = 0;
sensorValue2 = 0;
sensorValue3 = 0;

答案 4 :(得分:0)

您可以跟踪sensorValue的上次处理值,当sensorValue1的新值超过100而旧值低于100时,认为发生了点击。

int oldSensorValue1 = 0;
int oldSensorValue2 = 0;
int oldSensorValue3 = 0;
for (int i = 0; ; i++) {

    // Get the data from analog input 5
    int sensorValue1 = phidget.getSensorValue(1);
    int sensorValue2 = phidget.getSensorValue(2);
    int sensorValue3 = phidget.getSensorValue(3);

        if (sensorValue1 > 100 && oldSensorValue1 < 100){

            System.out.println("RIGHT");

            // simulates RIGHT key
            try { 
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_RIGHT); 
            } catch (AWTException e) { 
            e.printStackTrace(); 
            }

        } else if (sensorValue2 > 100 && oldSensorValue2 < 100)
        {
            System.out.println("LEFT");

            // simulates LEFT key
            try { 
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_LEFT); 
            } catch (AWTException e) { 
            e.printStackTrace(); 
            }
        } else if (sensorValue3 > 100 && oldSensorValue3 < 100)
        {
            System.out.println("ENTER");

            // simulates RIGHT key
            try { 
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_RIGHT); 
            } catch (AWTException e) { 
            e.printStackTrace(); 
            }
        }
        oldSensorValue1 = sensorValue1;
        oldSensorValue2 = sensorValue2;
        oldSensorValue3 = sensorValue3;
}