此问题已在此处有答案:
Scanner is skipping nextLine() after using next() or nextFoo()?(25个回答)
上个月关门了。
我在这个程序中遇到了一个我无法解释的问题。具体来说,当我选择选项3、4或5并完成操作时,选项菜单会在屏幕上打印两次。
我尝试使用if
语句和switch case
语句来解决这个问题,但问题仍然存在。
这是类:
package esercizio4;
public class Automobile {
private String marca;
private String modello;
private double benzina;
private boolean accesa;
private double velocita;
public Automobile(String marca, String modello) {
this.marca = marca;
this.modello = modello;
setBenzina(1);
setAccesa(false);
setVelocita(0);
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getModello() {
return modello;
}
public void setModello(String modello) {
this.modello = modello;
}
public double getBenzina() {
return benzina;
}
public void setBenzina(double benzina) {
this.benzina = benzina;
}
public boolean getAccesa() {
return accesa;
}
public void setAccesa(boolean accesa) {
this.accesa = accesa;
}
public double getVelocita() {
return velocita;
}
public void setVelocita(double velocita) {
this.velocita = velocita;
}
public void accendi() {
if(getAccesa() == false && benzina > 0) {
setAccesa(true);
System.out.println("Hai acceso la macchina");
}
else if(getAccesa() == true){
System.out.println("La macchina è già accesa");
}
else if(getAccesa() == false && benzina == 0) {
System.out.println("Errore: non c'è benzina");
}
}
public void spegni() {
if(getAccesa() == true) {
setAccesa(false);
System.out.println("Hai spento la macchina");
} else {
System.out.println("La macchina è già spenta");
}
}
public boolean isAccesa() {
if(getAccesa() == true) {
System.out.println("La macchina è accesa");
} else {
System.out.println("La macchina è spenta");
}
return accesa;
}
public void addBenzina(int benzina) { //Problema: ripropone 2 volte il menu opzioni
int livMaxSerbatoio = 10;
if (benzina < livMaxSerbatoio) {
this.benzina += benzina;
System.out.println("Hai inserito " + benzina + " litri");
}
else if(benzina > livMaxSerbatoio){
System.out.println("Non c'è abbastanza spazio");
}
}
public void viewBenzina() {
if(getBenzina() == 10) {
System.out.println("Il serbatoio è pieno: 10 litri presenti");
} else {
System.out.println("Il livello di benzina è: " + getBenzina() + " litri");
}
}
//DA MIGLIORARE
public void accelera(int kmh) { //Problema: ripropone 2 volte il menu opzioni
if(velocita < 200 && accesa == true) {
setVelocita(getVelocita() + kmh);
System.out.println("Hai accelerato di " + kmh + "kmh");
System.out.println("Stai andando a " + getVelocita() + "kmh");
}
if(accesa == false) {
System.out.println("Errore: la macchina è spenta");
}
else if(velocita > 200 && accesa == true) {
System.out.println("Errore: non puoi andare a piu di 200 kmh");
}
}
//DA MIGLIORARE
public void decelera(int kmh) { //Problema: ripropone 2 volte il menu opzioni
if(velocita > 0 && accesa == true) {
setVelocita(getVelocita() - kmh);
System.out.println("Hai decelerato di " + kmh + "kmh");
System.out.println("Stai andando a " + getVelocita() + "kmh");
}
if(accesa == false) {
System.out.println("Errore: la macchina è spenta");
}
else if(kmh > getVelocita()) {
setVelocita(0);
}
}
public void ferma() {
if(velocita > 0 && accesa == true) {
for(int i = (int) getVelocita(); i >= 0; i--) {
setVelocita(i);
//System.out.println("Stai andando a " + getVelocita() + " kmh");
}
System.out.println("Ti sei fermato");
} else {
System.out.println("Sei già fermo");
}
}
public boolean isInMoto() {
if(getVelocita() > 0) {
System.out.println("La macchina sta andando a " + getVelocita() + " kmh");
return true;
} else {
System.out.println("La macchina è ferma");
}
return false;
}
public String toString() {
String toString = "Informazioni:" + "\n" +
"Marca: " + getMarca() + "\n" +
"Modello: " + getModello() + "\n" +
"Livello serbatoio: " + getBenzina() + " litri \n" +
"Stato accensione: " + getAccesa() + "\n" +
"Velocità: " + getVelocita() + " kmh";
return toString;
}
public static void stampaOpzioni() {
System.out.println("Premi 1 per accendere la macchina");
System.out.println("Premi 2 per spegnere la macchina");
System.out.println("Premi 3 per aggiungere la benzina");
System.out.println("Premi 4 per accelerare");
System.out.println("Premi 5 per decelerare");
System.out.println("Premi 6 per fermarti");
System.out.println("Premi 7 per visualizzare lo stato attuale");
System.out.println("Premi EXIT per terminare la simulazione");
}
}
这是ClassTest:
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();
auto.addBenzina(benzina);
break;
case "4":
System.out.println("Di quanto vuoi accelerare? (velocità max 200 kmh)");
int kmh = input.nextInt();
auto.accelera(kmh);
break;
case "5":
System.out.println("Di quanto vuoi decelerare?");
kmh = input.nextInt();
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");
}
}
这就是我所看到的:
希望您在奎斯塔会议上对您的机器进行指导和模拟
因塞里西拉马尔卡
菲亚特
Inserisci il modello
Punto
Premi 1 per accendere la macchina
Premi 2 per spegnere la macchina
Premi 3 per aggiungere la benzina
Premi 4 per accelerare
Premi 5 per减速
Premi 6 per fermarti
Premi 7 per visualizzare lo stato attuale
PREMI 3 EXIT per terminare la simulazione
你有多少汽油?(capienza max 10 litri)
Hai inserito 8公升
Premi 1 per accendere la macchina
Premi 2 per spegnere la macchina
Premi 3 per aggiungere la benzina
Premi 4 per accelerare
Premi 5 per减速
Premi 6 per fermarti
Premi 7 per visualizzare lo stato attuale
Premi EXIT per terminare la simulazione
Premi 1 per accendere la macchina
Premi 2 per spegnere la macchina
Premi 3 per aggiungere la benzina
Premi 4 per accelerare
Premi 5 per减速
Premi 6 per fermarti
Premi 7 per visualizzare lo stato attuale
Premi EXIT per terminare la simulazione
1条答案
按热度按时间uinbv5nw1#
根据您提供的代码,我注意到在执行Automobile.stampaOpzioni()方法之后,您使用nextInt()方法来读取用户输入。注意,nextInt()方法将只读取一个整数,但是在阅读整数之后,换行符可能会保留在输入流中。这意味着下一次调用input.nextLine()时,它将读取之前输入的换行符,而无需等待用户输入新字符串。