我正在構建一個接口,根據用戶的輸入執行一個操作。如果用戶輸入'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時,行「Invalid input。Client destroyed!」。被打印。有沒有人有一個想法如何解決這個問題,並使其按照我的意圖工作
不要吞下一行,因爲你正在做。首先將它放入一個String變量,然後對該變量運行測試。但更重要的是,你需要學習通過代碼精神遍歷的技巧,在代碼運行時詢問它和數據在做什麼。做到這一點,你的問題對你和我自己和@Pshemo都是顯而易見的。 –
每次你調用'nextLine()'你都會移動到下一行。你需要存儲它的結果,並將它存儲在你的if語句中,而不是直接調用'nextLine()'。 (現在在那裏重複)。 – Pshemo