当我在终端窗口输入帐号时,我收到此错误
我输入的数据是正确的,我把一个像“ste251”这样的字符串和一个像500这样的int放到了平衡状态。
当我尝试停止循环时,它会抛出不匹配的行为,我得到:
Java.util.inputMismatchException: null (in Java.util.scanner) java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:909) at java.util.Scanner.next(Scanner.java:1530) at java.util.Scanner.nextInt(Scanner.java:2160) at java.util.Scanner.nextInt(Scanner.java:2119) at WriteAccountBalances.writeToFile(WriteAccountBalances.java:58)
答案 0 :(得分:0)
调用其中一个nextInt()或next()方法时出现此错误,因为输入值与下一个*()方法的模式不匹配。尝试通过放置断点来调试代码,您会很容易找到。
它应该继续询问帐号和余额,直到 用户输入大写X
写下这样的东西:
while(true){
//....
//...
System.out.print("Enter account number or X for exit: ");
String option= myScanner.nextLine();
if("X".equals(option)){
break;
}
//....
//...
}
PS:
永远不要使用这种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");
}
答案 1 :(得分:0)
来自the docs for InputMismatchException:
由扫描程序抛出,表示检索到的令牌与预期类型的模式不匹配,或者令牌超出预期类型的范围。
这几乎说明了所有需要说的。检查意外输入。
答案 2 :(得分:0)
由于您的整个代码似乎不可用,所以像我这样的第三方进入并重建整个示例会很烦人。相反,由于这是一个微不足道的案例,我将为您提供一个类似的,完整的,易于理解的例子,我已经碰巧拥有它。此代码以类似于您需要的方式获取输入;你应该能够根据你的具体要求进行修改。
//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);
}
}
我尝试了你的代码;我不确定问题是什么,因为这似乎对我来说很好:
//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!