【问题标题】:How to validate user input in a range? And For Loop issue/confusion如何验证范围内的用户输入?和 For Loop 问题/困惑
【发布时间】:2021-03-21 08:56:35
【问题描述】:

当您输入年份时,如何验证用户的输入,范围必须在 1900-2021 之间。我也对在我的情况下使用 for 循环感到困惑。我需要打印出摩托车加速四次,然后在我需要代码打印出它制动/减速 3 次之后。我有一个 java 类和一个 Java 主类。我尝试实现一个单独的方法来验证年份,但最终导致程序崩溃。

public class Motorcycle {

private int year;
private String make;
private int speed;

/**
 * 
 * @param year
 * @param make 
 */
public Motorcycle(int year, String make) {
    this.year = year;
    this.make = make;
    this.speed = 0;
}
public Motorcycle(){
    this.year = 0;
    this.make = "";
    this.speed = 0;
}

public void setYear(int year) {
    this.year = year;
}

public void setMake(String make) {
    this.make = make;
}

public void setSpeed(int speed) {
    this.speed = speed;
}

public int getYear() {
    return year;
}

public String getMake() {
    return make;
}

public int getSpeed() {
    return speed;
}

public void accelerate() {
    this.speed += 5;
}

public void brake() {
    this.speed -= 5;
}

@Override
public String toString() {
    return "A " + year +" " + make + " going "+ speed +" miles per hour";



import java.util.*;

公共类 MotorcycleDemo {

public static void main(String[] args) {
    int year;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter the year of your Motorcycle");  //validate year 1900 -2021 
    year = keyboard.nextInt();

    System.out.println("Enter the make of your Motorcycle(such as, Harley, Kawasaki)");
    String maker = keyboard.next();

    Motorcycle motor1 = new Motorcycle(year, maker);

    System.out.println(motor1); //account for 0 speed toString()
    for (int i = 0; i <= 3; i++) {            //use for loop  //accelerate 4 times and brake 3 times 
        motor1.accelerate();
        System.out.println(motor1);
        //System.out.println("A " + year + " " + maker + " going " + motor1.getSpeed() + "miles per hour.");
        //to String method     
    }
    for (int i = 0; i <= 3; i++);
    {

        motor1.brake();
        System.out.println(motor1);

    }

}

}

如果摩托车加速 4 次并刹车 3 次,则输出应显示:“A year and make (motorcycle brand) is going speed mph。以 0 mph 的速度开始并达到 20 的最大速度,然后减速 4 次,最终 速度 为 5 mph。

任何帮助表示赞赏并提前致谢。 :)

【问题讨论】:

    标签: java validation for-loop computer-science


    【解决方案1】:

    然后尝试围绕您的输入处理设置一个 while/do-while 循环。如果输入不正确,则通过将布尔值设置为与 while 条件相同来保持循环运行,如果答案正确则退出循环

        public static void main(String[] args) {
    
            int year;
            int currentYear = Calendar.getInstance().get(Calendar.YEAR); //Creating current year
            boolean looping = false;
    
            do {
                Scanner keyboard = new Scanner(System.in);
                System.out.println("Enter the year of your Motorcycle");  //validate year 1900 -2021
                year = keyboard.nextInt();
    
                if (year < 1900 || year > currentYear) {
                    looping = true;
                    System.out.println("Invalid year!\nPlease type in valid year!");
                } else
                    System.out.println("Enter the make of your Motorcycle(such as, Harley, Kawasaki)");
                    String maker = keyboard.next();
                //Put condition here too if necessary, and put looping true if input is bad
            } while(looping);  //As long as looping is set true it reruns form
    
            Motorcycle motor1 = new Motorcycle(year, maker);
    
            System.out.println(motor1); //account for 0 speed toString()
            for (int i = 0; i <= 3; i++) {            //use for loop  //accelerate 4 times and brake 3 times
                motor1.accelerate();
                System.out.println(motor1);
                //System.out.println("A " + year + " " + maker + " going " + motor1.getSpeed() + "miles per hour.");
                //to String method
            }
            for (int i = 0; i <= 3; i++);
            {
    
                motor1.brake();
                System.out.println(motor1);
    
            }
        }
    

    【讨论】:

    • 这确实告诉用户他们输入了无效的年份,但代码仍将继续询问“make”,而不是再次要求用户输入正确的年份。
    • 这很有意义。非常感谢!
    • @jaKobT 请将答案标记为解决方案,这样问题就不会保持开放或未解决:D –
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2016-09-24
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多