1

buttonから値を取得して何かを出力するコードがあります。使用しない場合break; を押すと、left button何千もの左が出力されます。enterとについても同じですright

私はJavaの第一人者ではなく、ほんの数週間前にJavaプログラミングを始めました。

私は自分のコードを決してにしstop readingたくbutton valueないのですが、コードが何千もの左、右を出力したり、。のときに入力したりしたくありませんbutton is pushed。これどうやってするの?このコードは機能していますが、Iの後で停止しpush one buttonます。ボタンを左に押すと、左に1回出力され、その後実行が停止します。休憩なしで; 残り数千を出力します。

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

    }
4

5 に答える 5

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;
        }
    . . .
}
于 2012-10-11T15:03:32.260 に答える
1

ボタンの値を追跡し、ボタンの値が 100 未満の場合にのみ RIGHT または LEFT を出力し、その後 100 を超える必要があります。ボタンの値が 100 を超える場合は、下に戻るまで待つ必要があります。上に戻ることを再度確認するまで100。

ボタンごとにいくつかの状態変数を保持する必要があります。おそらく、ボタンが 100 を超えたときにdidPrintMessage設定し、100 を下回ったときにtrueリセットするようなブール値falseです。次に、ボタンの値が 100 を超えたときにのみ出力します。が の場合didPrintMessageはLEFT または RIGHTですfalsedidPrintMessageに設定する前にこれを行ってくださいtrue

boolean didPrintMessage1 = false;
boolean didPrintMessage2 = false;
boolean didPrintMessage3 = false;
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 && !didPrintMessage1) {
        System.out.println("RIGHT");
        /* Robot stuff */
    } else if (sensorValue2 > 100 !didPrintMessage2) {
        System.out.println("LEFT");
        /* Robot stuff */
    } else if (sensorValue3 > 100 !didPrintMessage3) {
        System.out.println("ENTER");
        /* Robot stuff */
    }

    didPrintMessage1 = sensorValue1 > 100;
    didPrintMessage1 = sensorValue2 > 100;
    didPrintMessage1 = sensorValue3 > 100;
}

これは、マイクロコントローラーのような組み込みシステムで実行されている Java のようです。将来的には、それは有益な情報になるでしょう。

于 2012-10-11T15:06:34.063 に答える
1

すべての条件breakからステートメントを削除します。ifforループ内から実行を削除しています。

IF条件内のセンサー値を再初期化すると言うだけです

if (センサー値1 > 100){ ..... センサー値1 = 0; }

sensorValue2 の場合

それ以外の場合 (センサー値 2 > 100){ ..... センサー値 2 = 0; }

sensorValue3 の場合

if (センサー値3 > 100){ ..... センサー値3 = 0; }

于 2012-10-11T15:03:28.353 に答える
1

最後にすべてのセンサー値を割り当て、最初に 1 つの条件0を追加するだけです。ifこれは、ユーザーが同じキーを 2 回入力したか、何も入力しなかったかを区別するのにも役立ちます。古い値変数を使用する用途は見当たりません。

// 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;
于 2012-10-11T15:12:41.947 に答える
0

sensorValue の最後に処理された値を追跡できます。古い値が 100 未満である間に、sensorValue1 の新しい値が 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;
}
于 2012-10-11T15:04:49.883 に答える