我正在构建一个根据用户输入执行操作的界面。如果用户输入' 1,程序将通过MQTT发送传感器数据,如果用户输入' 2'传感器由CoAP发送。以下是我的代码:
import java.util.Scanner;
import org.eclipse.paho.client.mqttv3.MqttException;
public class MainProgram {
public static void main(String[] args) throws MqttException {
System.out.println("Choose the communication protocol");
System.out.println("1. MQTT");
System.out.println("2. CoAP");
try(Scanner scanner = new Scanner(System.in)){
if(scanner.nextLine().equals("1")){
try {
new UltrasonicSensorMQTT().run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if(scanner.nextLine().equals("2")){
try {
new UltrasonicSensorCoAP().run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else
System.out.println("Invalid input. Client destroyed !");
}catch(Exception e){
e.printStackTrace();
}
}
}
然而,问题在于,程序只有在我输入' 1'之后才能工作,然后执行类UltrasonicSensorMQTT。如果我输入' 2'任何其他字母,没有任何反应,类UltrasonicSensorCoAP没有运行(这个类在独立版本中运行得非常好),但是当我再次按下ENTER时,该行"输入无效。客户被销毁!"打印出来。有没有人知道如何解决这个问题,让它按照我的意图运作
答案 0 :(得分:0)
你应该在变量中存储nextLine()输出,然后进行if / elseif比较。
否则,您正在使用第一个用户输入来检查if,然后为else请求第二个用户输入。
答案 1 :(得分:0)
你已经阅读并检查了条件,并且第一行丢失了,否则子句检查接下来,不是相同的值。 保持变量。
@Output() childSubmit = new EventEmitter<any>();
...
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.childSubmit.emit();
}
}
答案 2 :(得分:0)
您当前的代码要求您输入“2”两次以触发第二个if
。在您第一次输入后,代码就会在第二个if
条件调用scanner.nextLine()
时等待输入。
但是当我再次按下ENTER时,“无效输入。客户端被销毁!”这一行。打印出来。
因为你第二次没有输入任何东西。
不要扫描输入两次。只扫描一次并将结果存储在变量中。然后对该变量执行逻辑:
String inputValue = scanner.nextLine();
if(inputValue.equals("1")) {
// ...
}
else if(inputValue.equals("2")) {
// ...
}
// etc.