Input While循环和if语句出现问题
当我在终端窗口中输入帐号时,我得到了这个错误 我输入的数据是正确的,我在account中输入了一个字符串,比如“ste251”,在balance中输入了一个int,比如500 另外,当我试图在循环抛出不匹配的exeption时停止循环时,我得到:Input While循环和if语句出现问题,input,while-loop,try-catch,Input,While Loop,Try Catch,当我在终端窗口中输入帐号时,我得到了这个错误 我输入的数据是正确的,我在account中输入了一个字符串,比如“ste251”,在balance中输入了一个int,比如500 另外,当我试图在循环抛出不匹配的exeption时停止循环时,我得到: 调用这些nextInt()或next()方法之一时会出现此错误,因为输入值与next*()方法的模式不匹配。尝试通过设置断点来调试代码,您将很容易找到 它应该继续询问账号和余额,直到 用户输入大写字母X 这样写: while(true){
调用这些nextInt()或next()方法之一时会出现此错误,因为输入值与next*()方法的模式不匹配。尝试通过设置断点来调试代码,您将很容易找到 它应该继续询问账号和余额,直到 用户输入大写字母X 这样写:
while(true){
//....
//...
System.out.print("Enter account number or X for exit: ");
String option= myScanner.nextLine();
if("X".equals(option)){
break;
}
//....
//...
}
附言:
切勿使用此类try/catch
:
try {
output.println(account + " " + balance);
}
catch (NullPointerException e)
{
System.out.println("PrintWriter is not assigned");
}
而是用if语句检查它:
if(output!=null){
output.println(account + " " + balance);
}else{
System.out.println("PrintWriter is not assigned");
}
发件人:
由扫描程序引发,以指示检索到的令牌与预期类型的模式不匹配,或者该令牌超出预期类型的范围
这几乎说明了所有需要说的。检查意外输入。由于您的整个代码似乎都不可用,像我这样的第三方进来重新构建整个示例会让人感到厌烦。相反,由于这是一个微不足道的案例,我将为您提供一个类似的、完整的、易于理解的示例,我已经有了这个示例。此代码以类似于您需要的方式接收输入;您应该能够根据您的具体要求对其进行修改
//Filename: "Hotel.java"
import java.util.*;
class Customer
{
private String name;
private int room;
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return this.name;
}
public void setRoom(int room)
{
this.room=room;
}
public int getRoom()
{
return this.room;
}
}
class Hotel
{
public static void initialize(Customer RoomList[])
{
for(int i=0; i<RoomList.length; i++)
{
RoomList[i]=new Customer();
RoomList[i].setName("EMPTY");
RoomList[i].setRoom(i+1);
}
}
public static void viewList(Customer RoomList[])
{
for(int i=0; i<RoomList.length; i++)
{
if(RoomList[i].getName()=="EMPTY")
System.out.println("Room number "+RoomList[i].getRoom()+" is vacant.");
else
System.out.println("Room number "+RoomList[i].getRoom()+" is ocupied by "+RoomList[i].getName()+".");
}
System.out.println();
}
public static boolean addCustomer(Customer RoomList[], String name)
{
for(int i=0; i<RoomList.length; i++)
if(RoomList[i].getName().equals("EMPTY"))
{
RoomList[i].setName(name);
return true;
}
return false;
}
public static void showEmptyRooms(Customer RoomList[])
{
System.out.println("Available rooms are:");
for(int i=0; i<RoomList.length; i++)
if(RoomList[i].getName()=="EMPTY")
System.out.println(RoomList[i].getRoom());
System.out.println();
}
public static boolean deleteCustomer(Customer RoomList[], String name)
{
for(int i=0; i<RoomList.length; i++)
if(RoomList[i].getName().equals(name))
{
RoomList[i].setName("EMPTY");
System.out.println("Deletion successful.\n");
return true;
}
return false;
}
public static int getIndex(Customer RoomList[], String name)
{
for(int i=0; i<RoomList.length; i++)
if(RoomList[i].getName().equals(name))
return i;
return -1;
}
public static void main(String[] args)
{
Customer[] RoomList = new Customer[12];
String name;
initialize(RoomList);
Scanner input = new Scanner(System.in);
int option=0;
do
{
System.out.println(" Hotel Booking Options");
System.out.println("=====================================");
System.out.println("1: To View all rooms");
System.out.println("2: To Add customer to a room");
System.out.println("3: To Display empty rooms");
System.out.println("4: To Delete customer from a room");
System.out.println("5: Find room from customer name");
System.out.println("0: Exit");
System.out.print("\nEnter your choice: ");
option = input.nextInt();
System.out.println();
switch(option)
{
case 1:
{
viewList(RoomList);
break;
}
case 2:
{
System.out.print("Customer's name: ");
name=input.next();
System.out.println();
if(!addCustomer(RoomList, name))
System.out.println("No rooms available!");
break;
}
case 3:
{
showEmptyRooms(RoomList);
break;
}
case 4:
{
System.out.print("Customer's name: ");
name=input.next();
System.out.println();
deleteCustomer(RoomList, name);
break;
}
case 5:
{
System.out.print("Customer's name: ");
name=input.next();
System.out.println();
System.out.println("Customer's room: "+RoomList[getIndex(RoomList, name)].getRoom()+"\n");
break;
}
case 0:
{
System.out.println("\nThank you!\n");
break;
}
default:
{
System.out.println("Invalid option!\n");
break;
}
}
}while(option!=0);
}
}
这给了我在终端中的以下信息:
Enter account number: qwerty
Enter account balance: 123
qwerty 123
Enter account number: asdfgh
Enter account balance: 456
asdfgh 456
Enter account number: X
Code terminated successfully!
我很确定你之前已经问过这个问题了…真的需要帮助吗?真的很抱歉,但我对此感到非常抱歉,这是完整的代码还是我在现有代码的基础上进行了调整,我不太明白你在做什么?这是一个更一般的问题,你可以很容易地适应你的条件进行更多的搜索:)谢谢,很明显,我是个彻头彻尾的人novice@user2292357当前位置我已编辑了我的答案。您的代码似乎运行良好;你可以查看我在下面附上的略加编辑的版本。
//Filename: "myPrg.java"
import java.util.*;
class myPrg {
static Scanner myScanner = new Scanner(System.in);
static int count = 0;
public static void writeToFile(String account, int balance) {
while (!account.equals("X")) {
System.out.print("Enter account balance: ");
balance = myScanner.nextInt();
try {
System.out.println(account + " " + balance);
} catch (NullPointerException e) {
System.out.println("PrintWriter is not assigned");
}
count++;
System.out.print("Enter account number: ");
account = myScanner.next();
}
}
public static void main(String[] args) {
System.out.print("Enter account number: ");
String account = myScanner.next();
writeToFile(account, 0);
System.out.println("Code terminated successfully!");
}
}
Enter account number: qwerty
Enter account balance: 123
qwerty 123
Enter account number: asdfgh
Enter account balance: 456
asdfgh 456
Enter account number: X
Code terminated successfully!