Java 打破然后继续;在爪哇

Java 打破然后继续;在爪哇,java,break,continue,Java,Break,Continue,我有一个代码,它从一个按钮获取一个值,然后输出一些东西。 如果我不休息;而我按下左键,它会输出几千个左键。enter和right也一样 我不是Java大师,我几周前才开始从事Java编程 我希望我的代码永远不会停止读取按钮值,但我不希望我的代码在按下按钮时输出数千个左、右或enter。我该怎么做?此代码正在工作,但在我按下一个按钮后停止。若我按下向左按钮,它将向左输出一次,然后停止运行。没有休息;它将输出数千个剩余的数据 for (int i = 0; ; i++) { //

我有一个代码,它从一个按钮获取一个值,然后输出一些东西。 如果我不休息;而我按下左键,它会输出几千个左键。enter和right也一样

我不是Java大师,我几周前才开始从事Java编程

我希望我的代码永远不会停止读取按钮值,但我不希望我的代码在按下按钮时输出数千个左、右或enter。我该怎么做?此代码正在工作,但在我按下一个按钮后停止。若我按下向左按钮,它将向左输出一次,然后停止运行。没有休息;它将输出数千个剩余的数据

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 {}

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

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

如果传感器值1>100{ ..... 传感器值1=0; }

对于传感器值2

否则,如果传感器值2>100{ ..... 传感器值2=0; }

对于传感器值3

如果传感器值3>100{ ..... 传感器值3=0; }

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

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

如果传感器值1>100{ ..... 传感器值1=0; }

对于传感器值2

否则,如果传感器值2>100{ ..... 传感器值2=0; }

对于传感器值3

如果传感器值3>100{ ..... 传感器值3=0; }


设置一个变量以指示最后的输出是左、右等。。然后,在再次输出之前,检查变量是否设置为要输出的值。如果是,跳过输出;如果没有,则执行输出并重置变量

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;
        }
    . . .
}

设置一个变量以指示最后的输出是左、右等。。然后,在再次输出之前,检查变量是否设置为要输出的值。如果是,跳过输出;如果没有,则执行输出并重置变量

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;
        }
    . . .
}

您可以跟踪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;
}

您可以跟踪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;
}

您需要做的是跟踪按钮值,当按钮值低于100,然后超过100时,只打印向右或向左。当按钮值高于100时,您需要等待它回到100以下,直到您再次检查它是否回到100以上

您需要为每个按钮保留一些状态变量,可能只是一个类似didPrintMessage的布尔值,当按钮高于100时,您将其设置为true,当按钮低于100时,您将其重置为false。然后,当按钮的值超过100时,如果didPrintMessage为false,则只打印LEFT或RIGHT。在将didPrintMessage设置为true之前执行此操作


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

您需要做的是跟踪按钮值,当按钮值低于100时,仅向右或向左打印,然后超过100。当按钮值高于100时,您需要等待它回到100以下,直到您再次检查它是否回到100以上

您需要为每个按钮保留一些状态变量,可能只是一个类似didPrintMessage的布尔值,当按钮高于100时,您将其设置为true,当按钮低于100时,您将其重置为false。然后,当按钮的值超过100时,如果didPrintMessage为false,则只打印LEFT或RIGHT。在将didPrintMessage设置为true之前执行此操作


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

我只需在最后将所有传感器值指定为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){
 ......
 ......

我只需在最后将所有传感器值指定为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构造背后有什么原因。我真的不明白你想要什么。你不能在代码中添加eventHandling吗?当按下哪个按钮时做些什么?我看不出你最外层的if构造背后有什么原因..我真的不明白你想要什么..你不能在代码中添加eventHandling吗?当按下哪个按钮时做些什么?太棒了,这一个工作得很好!这正是我想要的!感谢
你真是太棒了,这一次很成功!这正是我想要的!非常感谢这可能会奏效,但在看到这一点之前,我使用了Tom Gerken提供的代码。无论如何,谢谢你,+1这可能有用,但在看到这一点之前,我使用了Tom Gerken提供的代码。无论如何,谢谢你,+1这可能有用,但在看到这一点之前,我使用了Tom Gerken提供的代码。无论如何,谢谢你,+1这可能有用,但在看到这一点之前,我使用了Tom Gerken提供的代码。无论如何,谢谢你和+1这不起作用,但它现在已修复,谢谢你无论如何+1这不起作用,但它现在已修复,谢谢你无论如何+1这可能起作用,但在看到这一点之前,我使用了Tom Gerken提供的代码。无论如何,谢谢你,很高兴知道,你的问题已经解决了。我只是试图通过不改变任何现有条件和不引入新变量来简化解决方案。这两个答案在概念上是相似的:这可能有效,但在看到这一点之前,我使用了Tom Gerken提供的代码。无论如何,谢谢你,很高兴知道,你的问题已经解决了。我只是试图通过不改变任何现有条件和不引入新变量来简化解决方案。这两个答案在概念上是相似的: