简体   繁体   English

我如何限制 Java 中的“新扫描仪(System.in)”系统,不进一步处理用户输入数据,除非它是正确的输入值?

[英]How can I restrict the "new Scanner(System.in)" system in Java, to not go further with the user input data, unless it's the correct inputted value?

I'm learning Java and I've gotten somewhat further with my knowledge.我正在学习 Java,并且我的知识有所提高。 I want the app to go further with the user inputted value, only if it's the correct one, otherwise I want for the same question(console input) to repeat it self(not go further with the app) until the user types in the correct value!我希望应用程序根据用户输入的值走得更远,前提是它是正确的,否则我希望相同的问题(控制台输入)自行重复(不使用应用程序走得更远),直到用户输入正确的价值! My code looks like this:我的代码如下所示:

package oop.project;

import java.util.Scanner;

/**
 *
 * @author Dragos
 */
public class OOPProject {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner sc = new Scanner(System.in);
        Car Honda = new Car(2018, 20000, "Honda", "Civic", 200, 6, 0, 0);
        System.out.println("Manufacturer is: " + Honda.maker + ", model: " + Honda.model + 
                           ", year of fabrication: " + Honda.year + ", price: " + Honda.price + 
                           "!");
        System.out.println("Please start the engine of your vehicle, by typing in 'Yes' or 'Start' 
                           or 'Turn on'!");
        System.out.print("Do you wish to start the engine?");
        System.out.println(" ");
        Honda.StartEngine(sc);
}

Constructor class & it's functions:构造函数类及其功能:

public class Car {

    public int year;
    public int price;
    public String maker;
    public String model;

    public int maximumSpeed;
    public int numberOfGears;
    public int currentSpeed;
    public int currentGear;
    public boolean isEngineOn;

    public Car(int year, int price, String maker, String model, int maximumSpeed,
               int numberOfGears, int currentSpeed, int currentGear) {
        this.year = year;
        this.price = price;
        this.maker = maker;
        this.model = model;
        this.maximumSpeed = maximumSpeed;
        this.numberOfGears = numberOfGears;
        this.currentSpeed = currentSpeed;
        this.currentGear = currentGear;
    }

    public String StartEngine(Scanner in) {
        String input = in.nextLine();
        do{
            isEngineOn = true; 
        } while(input.equals("Yes") || input.equals("Start") || input.equals("Turn on"));

        if(isEngineOn) {
            System.out.println("Engine is on!");
        } else {
            System.out.println("Your input is not correct! Please start the engine!");
            isEngineOn = false;
        }  
        return input;
    }

Before the do & while, I had only the if-else statements with the (input.equals("Yes") || input.equals("Start") || input.equals("Turn on")) in the if statement, but regardless of the fact that the user inputs the wrong words in the IDE console, the app keeps going further anyway, it does display the correct messages, when the wrong word(s) are input, but does not stop or constrain the user to type in the correct value!在 do & while 之前,我只有 if-else 语句与(input.equals("Yes") || input.equals("Start") || input.equals("Turn on"))在 if语句,但不管用户在 IDE 控制台中输入了错误的单词这一事实,该应用程序无论如何都会继续前进,当输入错误的单词时,它确实会显示正确的消息,但不会停止或限制用户输入正确的值! Attempted to restrict the user to type in the correct value, by adding the do-while statement, but it's not working very well.试图通过添加 do-while 语句来限制用户输入正确的值,但效果不佳。

You have to be on loop untill you get the valid input.在获得有效输入之前,您必须处于循环状态。 Try the snippet below.试试下面的片段。

while(in.hasNext()) {
    String input = in.nextLine();
    if(input.equals("Yes") || input.equals("Start") || input.equals("Turn on")) {
        System.out.println("Engine is on!");
        break;
    } else {
        System.out.println("Your input is not correct! Please start the engine!");
    }
}

If you want to return input from the function, you can do like the one as follows.如果你想从函数中返回输入,你可以像下面那样做。

while (in.hasNext()) {
    String input = in.nextLine();
    if (input.equals("Yes") || input.equals("Start") || input.equals("Turn on")) {
        System.out.println("Engine is on!");
        return input;
     } else {
        System.out.println("Your input is not correct! Please start the engine!");
     }
}
return null;
    while(!isEngineOn) {
      String input = in.nextLine();
      isEngineOn = input.equals("Yes") || input.equals("Start") || input.equals("Turn on"));
      if (!isEngineOn) System.out.println("Your input is not correct! Please start the engine!");
    }

Or like this if you need the answer later:或者像这样,如果你以后需要答案:

    String input;
    while(!isEngineOn) {
      input = in.nextLine();
      isEngineOn = input.equals("Yes") || input.equals("Start") || input.equals("Turn on"));
      if (!isEngineOn) System.out.println("Your input is not correct! Please start the engine!");
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Java Scanner(System.in)在用户输入后不打开文件 - Java Scanner(System.in) does not open file after user input 如何使用 java.util.Scanner 从 System.in 正确读取用户输入并对其采取行动? - How to use java.util.Scanner to correctly read user input from System.in and act on it? 如何使用Scanner / System.in中尚未设置的字符串的值-Java - How to use the value of a string that is yet to be set by scanner/system.in - Java Scanner input = new Scanner(System.in) 到底是什么意思? - What does Scanner input = new Scanner(System.in) actually mean? Java charset - 如何从System.in获得正确的输入? - Java charset - How to get correct input from System.in? Java:try(Scanner scan = new Scanner(System.in){}导致异常 - Java: try(Scanner scan = new Scanner(System.in) { } causing an exception 从 System.in 读取时,如何防止 java.util.Scanner 抛出 NoSuchElementException? - How can I prevent java.util.Scanner from throwing NoSuchElementException when reading from System.in? Java Scanner分隔符和System.in - Java Scanner delimiter and System.in Java 扫描器类 (System.in) - Java Scanner Class ( System.in) Java不会使用Scanner和System.in分解具有多个double和char变量的用户输入 - java won't break up a user input with multiple double and char variables using Scanner and System.in
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM