我有一个代码从button
获取值,然后输出一些东西。
如果我不使用break
;我按下left button
,它将输出数千左。 enter
和right
也是如此。
我不是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 {}
}
答案 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时,如果false
是didPrintMessage
,则只打印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;
}