Java 输入无效(初学者)
Java Input not working (Beginner)
出于某种原因,我的代码不接受最后一行的输入 "What would you like to order: "
谁能告诉我这里的错误是什么?它正在正确编译和一切。我只是一个初学者,所以请用基本术语告诉我。
import java.util.Scanner;
import java.util.*;
class RestaurantMain {
public static void main(String[] args)
{
//Create an array list
ArrayList menu = new ArrayList();
//Variables//
int choice;
int customerChoice;
boolean trueFalse;
int restart = 0;
String choice2;
String addItems = "";
int menuCount = 0;
int indexCount = 0;
String item = "";
//Import input device
Scanner in = new Scanner(System.in);
ArrayList theMenu = new ArrayList();
System.out.println("Welcome to the Cooper's restaurant system!");
System.out.println("How can I help?");
System.out.println("");
System.out.println("1. Customer System");
System.out.println("2. Management System");
System.out.println("");
System.out.println("");
System.out.print("Which option do you choose: ");
choice = in.nextInt();
if (choice == 1) {
System.out.println("Our menu's are as follows:");
System.out.println("");
System.out.println("1. Drinks");
System.out.println("2. Starters");
System.out.println("3. Mains");
System.out.println("4. Desserts");
System.out.println("");
System.out.println("Please note - You MUST order 5 items.");
System.out.println("");
System.out.print("What menu would you like to follow? ");
customerChoice = in.nextInt();
if (customerChoice == 1) {
System.out.println("Drinks Menu");
System.out.println("Would you like to order? ");
choice2 = in.nextLine();
if (choice2 == "yes") {
System.out.println("Please enter the amount of items you want to order: ");
while (indexCount <= menuCount);
System.out.println("Please enter your item: ");
item = in.nextLine(); {
theMenu.add(item);
}
}
}
if (customerChoice == 2) {
System.out.println("Starters Menu");
}
if (customerChoice == 3) {
System.out.println("Mains menu");
}
if (customerChoice == 4) {
System.out.println("Desserts Menu");
}
您需要在调用 in.nextInt()
的行之后调用 in.nextLine()
原因是仅要求下一个整数不会消耗输入中的整行,因此您需要通过调用 in.nextLine()
跳到输入中的下一个换行符
customerChoice = in.nextInt();
in.nextLine();
每当您在调用不消耗整行的方法后需要换行时,几乎都必须这样做。考虑改用 BufferedReader
对象!
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int integer = Integer.parseInt(reader.readLine());
如果输入不能被解析为整数,这将抛出与 Scanner.nextInt()
相同的错误。
关于您对错误的评论,有一个:
while (indexCount <= menuCount);
System.out.println("Please enter your item: ");
item = in.nextLine(); {
theMenu.add(item);
}
}
应该像下面这样:
while(indexCount <= menuCount){
System.out.println("Please enter your item: ");
item = in.nextLine();
theMenu.add(item);
}
此外,这不是绝对必要的,但我建议您在实例化列表时声明 ArrayList 的通用类型,这样就不需要将对 theMenu.get() 的进一步调用强制转换为一个字符串。
ArrayList<String> theMenu = new ArrayList<String>();
比较字符串时,确保使用 str.equals("string to compare with")
方法,而不是相等运算符 (==
)。因此,例如,choice2 == "yes"
应该改为 choice2.equals("yes")
。使用 equalsIgnoreCase
而不是 equals
会忽略大小写差异,这在这种情况下可能很有用。
您的代码缺少三个大括号。
Arraylist 必须这样声明
ArrayList<class> list = new ArrayList<class>();
如果你想要一个整数数组列表
ArrayList<Integers> in = new ArrayList<Integers>();
代替了in.nextLine();您只需尝试另一个扫描仪功能,如 'in.next()'。只需使用已经为 JVM 本身提供的方法进行研发。
您只需使用正确的逻辑并使用“=”运算符的 equal() 或 equlIgnoreCase() 方法。
出于某种原因,我的代码不接受最后一行的输入 "What would you like to order: "
谁能告诉我这里的错误是什么?它正在正确编译和一切。我只是一个初学者,所以请用基本术语告诉我。
import java.util.Scanner;
import java.util.*;
class RestaurantMain {
public static void main(String[] args)
{
//Create an array list
ArrayList menu = new ArrayList();
//Variables//
int choice;
int customerChoice;
boolean trueFalse;
int restart = 0;
String choice2;
String addItems = "";
int menuCount = 0;
int indexCount = 0;
String item = "";
//Import input device
Scanner in = new Scanner(System.in);
ArrayList theMenu = new ArrayList();
System.out.println("Welcome to the Cooper's restaurant system!");
System.out.println("How can I help?");
System.out.println("");
System.out.println("1. Customer System");
System.out.println("2. Management System");
System.out.println("");
System.out.println("");
System.out.print("Which option do you choose: ");
choice = in.nextInt();
if (choice == 1) {
System.out.println("Our menu's are as follows:");
System.out.println("");
System.out.println("1. Drinks");
System.out.println("2. Starters");
System.out.println("3. Mains");
System.out.println("4. Desserts");
System.out.println("");
System.out.println("Please note - You MUST order 5 items.");
System.out.println("");
System.out.print("What menu would you like to follow? ");
customerChoice = in.nextInt();
if (customerChoice == 1) {
System.out.println("Drinks Menu");
System.out.println("Would you like to order? ");
choice2 = in.nextLine();
if (choice2 == "yes") {
System.out.println("Please enter the amount of items you want to order: ");
while (indexCount <= menuCount);
System.out.println("Please enter your item: ");
item = in.nextLine(); {
theMenu.add(item);
}
}
}
if (customerChoice == 2) {
System.out.println("Starters Menu");
}
if (customerChoice == 3) {
System.out.println("Mains menu");
}
if (customerChoice == 4) {
System.out.println("Desserts Menu");
}
您需要在调用 in.nextInt()
的行之后调用 in.nextLine()
原因是仅要求下一个整数不会消耗输入中的整行,因此您需要通过调用 in.nextLine()
customerChoice = in.nextInt();
in.nextLine();
每当您在调用不消耗整行的方法后需要换行时,几乎都必须这样做。考虑改用 BufferedReader
对象!
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int integer = Integer.parseInt(reader.readLine());
如果输入不能被解析为整数,这将抛出与 Scanner.nextInt()
相同的错误。
关于您对错误的评论,有一个:
while (indexCount <= menuCount);
System.out.println("Please enter your item: ");
item = in.nextLine(); {
theMenu.add(item);
}
}
应该像下面这样:
while(indexCount <= menuCount){
System.out.println("Please enter your item: ");
item = in.nextLine();
theMenu.add(item);
}
此外,这不是绝对必要的,但我建议您在实例化列表时声明 ArrayList 的通用类型,这样就不需要将对 theMenu.get() 的进一步调用强制转换为一个字符串。
ArrayList<String> theMenu = new ArrayList<String>();
比较字符串时,确保使用 str.equals("string to compare with")
方法,而不是相等运算符 (==
)。因此,例如,choice2 == "yes"
应该改为 choice2.equals("yes")
。使用 equalsIgnoreCase
而不是 equals
会忽略大小写差异,这在这种情况下可能很有用。
您的代码缺少三个大括号。 Arraylist 必须这样声明
ArrayList<class> list = new ArrayList<class>();
如果你想要一个整数数组列表
ArrayList<Integers> in = new ArrayList<Integers>();
代替了in.nextLine();您只需尝试另一个扫描仪功能,如 'in.next()'。只需使用已经为 JVM 本身提供的方法进行研发。 您只需使用正确的逻辑并使用“=”运算符的 equal() 或 equlIgnoreCase() 方法。