2017-08-15 20 views
-2

我正在構建一個接口,根據用戶的輸入執行一個操作。如果用戶輸入'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!」。被打印。有沒有人有一個想法如何解決這個問題,並使其按照我的意圖工作

+2

不要吞下一行,因爲你正在做。首先將它放入一個String變量,然後對該變量運行測試。但更重要的是,你需要學習通過代碼精神遍歷的技巧,在代碼運行時詢問它和數據在做什麼。做到這一點,你的問題對你和我自己和@Pshemo都是顯而易見的。 –

+2

每次你調用'nextLine()'你都會移動到下一行。你需要存儲它的結果,並將它存儲在你的if語句中,而不是直接調用'nextLine()'。 (現在在那裏重複)。 – Pshemo

回答

0

您當前的代碼,您需要輸入「2」 兩次觸發第二if。在您第一次輸入代碼後,代碼將在第二個if條件的調用scanner.nextLine()並等待輸入。

但是當我再次按ENTER時,行「Invalid input。Client destroyed!」被打印。

因爲您第二次沒有輸入任何東西。

不要掃描輸入兩次。只需掃描一次並將結果存儲在一個變量中。然後在該變量上執行你的邏輯:

String inputValue = scanner.nextLine(); 
if(inputValue.equals("1")) { 
    // ... 
} 
else if(inputValue.equals("2")) { 
    // ... 
} 
// etc. 
0

您應該將nextLine()輸出存儲在變量中,然後執行if/elseif比較。

否則,您正在使用第一個用戶輸入來檢查if,然後請求else的第二個用戶輸入。

0

您已閱讀並檢查條件,並且第一行丟失,否則子句檢查接下來的值不一樣。 保持變量。

String wrk = scanner.nextLine(); 
    if(wrk.equals("1")){ 
    ... 
    } 

    else if(wrk.equals("2")){ 
     .... 
    }