You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java汽车模拟程序操作后菜单重复显示问题求助

Java汽车模拟程序菜单重复显示问题解决

问题根源

使用Scanner.nextInt()读取整数时,只会读取数字部分,输入时按下的换行符会留在输入缓冲区中。当循环回到input.nextLine()读取选项时,会直接读取这个空的换行符,导致opzione为空字符串,循环条件!opzione.equalsIgnoreCase("exit")仍然成立,于是菜单会被再次打印,出现重复显示的情况。

解决方法

在每个input.nextInt()之后,添加input.nextLine()语句,用于消费掉缓冲区中残留的换行符,确保下一次input.nextLine()能正确读取用户输入的选项。

修改后的TestAutomobile类代码

package esercizio4;

import java.util.Scanner;

public class TestAutomobile {

    public static void main(String[] args) {
        
        System.out.println("Benvenuto in questa sessione di simulazione di guida");
        System.out.println("Crea la tua macchina");
        
        Scanner input = new Scanner(System.in);
        
        System.out.println("Inserisci la marca");
        String marca = input.nextLine();
        
        System.out.println("Inserisci il modello");
        String modello = input.nextLine();
        
        Automobile auto = new Automobile(marca, modello);
        
        String opzione = "";
        while(!opzione.equalsIgnoreCase("exit")) {

            Automobile.stampaOpzioni();         
            
            opzione = input.nextLine();
            
            switch(opzione) {
                case "1":
                    auto.accendi();
                    break;
                case "2":
                    auto.spegni();
                    break;
                case "3":
                    System.out.println("Quanta benzina vuoi aggiungere? (capienza max 10 litri)");
                    int benzina = input.nextInt();
                    input.nextLine(); // 新增:消费换行符
                    auto.addBenzina(benzina);
                    break;
                case "4":
                    System.out.println("Di quanto vuoi accelerare? (velocità max 200 kmh)");
                    int kmh = input.nextInt();
                    input.nextLine(); // 新增:消费换行符
                    auto.accelera(kmh);
                    break;
                case "5":
                    System.out.println("Di quanto vuoi decelerare?");
                    kmh = input.nextInt();
                    input.nextLine(); // 新增:消费换行符
                    auto.decelera(kmh);
                    break;
                case "6":
                    auto.ferma();
                    break;
                case "7":
                    System.out.println(auto);
                    break;
            }
        }//Chiusura while
        
        input.close();
        System.out.println("Hai terminato la simulazione");
        System.out.println("Arrivederci");
    }
}

额外优化提示

  1. Automobile类的accelera方法逻辑修正:当前逻辑中多个if语句会独立判断,比如车辆未启动时会执行多个分支,建议改为else if链式结构:
public void accelera(int kmh) {
    if(!accesa) {
        System.out.println("Errore: la macchina è spenta");
    } else if(velocita + kmh > 200) {
        System.out.println("Errore: non puoi andare a piu di 200 kmh");
    } else {
        setVelocita(getVelocita() + kmh);
        System.out.println("Hai accelerato di " + kmh + "kmh");
        System.out.println("Stai andando a " + getVelocita() + "kmh");
    }
}
  1. Automobile类的decelera方法逻辑修正:同样调整为else if链式结构,避免重复判断:
public void decelera(int kmh) {
    if(!accesa) {
        System.out.println("Errore: la macchina è spenta");
    } else if(velocita <= 0) {
        System.out.println("Sei già fermo");
    } else {
        setVelocita(Math.max(getVelocita() - kmh, 0));
        System.out.println("Hai decelerato di " + kmh + "kmh");
        System.out.println("Stai andando a " + getVelocita() + "kmh");
    }
}
  1. addBenzina方法边界处理:当前未处理添加后超过最大容量的情况,建议修改为:
public void addBenzina(int benzina) {
    int livMaxSerbatoio = 10;
    if(benzina <=0 ){
        System.out.println("Errore: inserisci un valore positivo");
    } else if(this.benzina + benzina > livMaxSerbatoio) {
        int aggiungibile = livMaxSerbatoio - (int)this.benzina;
        this.benzina = livMaxSerbatoio;
        System.out.println("Non c'è abbastanza spazio: puoi aggiungere massimo " + aggiungibile + " litri");
    } else {
        this.benzina += benzina;
        System.out.println("Hai inserito " + benzina + " litri");
    }
}

内容的提问来源于stack exchange,提问作者Bartolomeo Cenisio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:52:45