gpt4 book ai didi

java - 使用不同的值多次调用方法

转载 作者:行者123 更新时间:2023-11-29 08:21:27 25 4
gpt4 key购买 nike

我正在编写一些代码来控制储物柜系统,我想在其中定义将打开哪个储物柜并将值设置为 XY 参数(假设储物柜排列成矩阵X,Y)。我已经使用单个 (X,Y) 值测试了该方法并且它工作正常,但是当我尝试使用新值时它实际上更新了值。有人能告诉我我做错了什么吗?我实际上是java的新手。代码是这样的。这是我第一次在这里发帖,如果我有什么错误,请多多包涵。提前致谢。

public class MainApp extends Application{
...
LockerControl(3, 0);
LockerControl(1, 1);
}

private void LockerControl(int X,int Y) throws Exception {
LockerControl locker = new LockerControl();
locker.count(X, Y);
Thread.sleep(10000);
locker.reset();
}

public class LockerControl {

int counter;
boolean flagSensor;

public void count(int X, int Y) throws Exception{

final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput myLed[] = {
gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "LED_1", PinState.LOW),
gpio.provisionDigitalOutputPin(RaspiPin.GPIO_05, "LED_2", PinState.LOW),
gpio.provisionDigitalOutputPin(RaspiPin.GPIO_06, "LED_3", PinState.LOW)};
PCA9685GpioTester pca9685Gpio = new PCA9685GpioTester();
GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02);

myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(
GpioPinDigitalStateChangeEvent event) {
if (event.getState().isHigh()) {
if (!flagSensor) {
myButton.addTrigger(new GpioPulseStateTrigger(myLed[1], 1000));
++counter;
if (counter == X+1) {
flagSensor = true;
try {
pca9685Gpio.on(X, Y);
} catch (Exception ex) {
Logger.getLogger(LockerControl.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
else {
myButton.addTrigger(new GpioPulseStateTrigger(myLed[2], 1000));
--counter;
if (counter == 0 && flagSensor) {
try {
pca9685Gpio.off(X, Y);
} catch (Exception ex) {
Logger.getLogger(LockerControl.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} else {
myButton.addTrigger(new GpioSetStateTrigger(myLed[0], PinState.LOW));
myButton.addTrigger(new GpioSetStateTrigger(myLed[1], PinState.LOW));
myButton.addTrigger(new GpioSetStateTrigger(myLed[2], PinState.LOW));
}
}
});
}

public void reset() {
counter = 0;
flagSensor = false;
}

}

最佳答案

您正在为 counter 使用 static int 并为 flagSensor 使用 static boolean 但您已经获得了 LockerControl 的多个实例。静态变量对于一个类的所有实例都是通用的(参见 here )。您可以通过删除静态修饰符来解决此问题。

请注意,如果不同的线程可以修改各个 LockerControl 实例,请查看 concurrency和/或 Atomic Integer , Atomic Boolean类。

关于java - 使用不同的值多次调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com