如果使用Scanner时语句没有触发

时间:2017-08-15 11:34:09

标签: java

我正在构建一个根据用户输入执行操作的界面。如果用户输入' 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时,该行"输入无效。客户被销毁!"打印出来。有没有人知道如何解决这个问题,让它按照我的意图运作

3 个答案:

答案 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.