Java应用程序崩溃
我用Java制作了一个简单的库管理应用程序。当我运行它并输入一本书的标题,例如“Java:如何编程”时,它崩溃了。但是,如果我只输入“Java”而不是“Java:如何编程”,事情就会进展顺利 怎么了?请帮忙Java应用程序崩溃,java,Java,我用Java制作了一个简单的库管理应用程序。当我运行它并输入一本书的标题,例如“Java:如何编程”时,它崩溃了。但是,如果我只输入“Java”而不是“Java:如何编程”,事情就会进展顺利 怎么了?请帮忙 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExcep
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
public class MainSystem {
static String fileName = null;
static Library lib = new Library();
static Scanner in = new Scanner(System.in);
static Boolean running = true;
public static void main(String[] args) {
while (running) {
System.out.println("\nEnter 0 for load a library."
+ "\nEnter 1 for save and quit"
+ "\nEnter 2 for list all books in library"
+ "\nEnter 3 for add book to library");
int answer = in.nextInt();
switch (answer) {
case 0:
System.out.println("Enter the file name to load");
loadScript(in.next());
break;
case 1:
saveAndQuit();
break;
case 2:
System.out.println(lib.toString());
break;
case 3:
addBook();
break;
}
}
System.exit(0);
}
private static void addBook() {
// TODO Auto-generated method stub
int isbn;
String title, author;
double price;
System.out.println("\nEnter Title: ");
title = in.next();
System.out.println("\nEnter Author: ");
author = in.next();
System.out.println("\nEnter ISBN: ");
isbn = in.nextInt();
System.out.println("\nEnter Price: ");
price = in.nextDouble();
Book b = new Book(isbn, title, author, price);
lib.addBook(b);
}
private static void saveAndQuit() {
// TODO Auto-generated method stub
System.out.println("Enter file name: ");
fileName = in.next() + ".ser";
running = false;
FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
fos = new FileOutputStream(fileName);
out = new ObjectOutputStream(fos);
out.writeObject(lib);
fos.close();
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void loadScript(String name) {
// TODO Auto-generated method stub
FileInputStream fis = null;
ObjectInputStream in = null;
File file = new File(name + ".ser");
if (file.exists()) {
try {
fis = new FileInputStream(file);
in = new ObjectInputStream(fis);
lib = (Library) in.readObject();
fis.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("\nThe file does not exist!");
}
}
}
当您想/需要阅读整行时,您正在阅读下一个
字符串。更改此项:
in.next();
借
在为您的书询问数据时:
private static void addBook() {
// TODO Auto-generated method stub
int isbn;
String title, author;
double price;
System.out.println("\nEnter Title: ");
title = in.nextLine();
System.out.println("\nEnter Author: ");
author = in.nextLine();
System.out.println("\nEnter ISBN: ");
isbn = in.nextInt();
System.out.println("\nEnter Price: ");
price = in.nextDouble();
Book b = new Book(isbn, title, author, price);
lib.addBook(b);
}
评论如下:
当我在in.next中更改in.nextLine时,在运行程序时,输入Title和输入Author`同时出现;取而代之的是,首先输入标题,然后输入作者
请注意,nextLine
将使用每个输入,直到扫描仪
找到新的换行输入。这意味着您必须在读取书籍数据之前添加额外的nextLine()
:
private static void addBook() {
// TODO Auto-generated method stub
int isbn;
String title, author;
double price;
in.nextLine(); //consume the data...
System.out.println("\nEnter Title: ");
title = in.nextLine();
System.out.println("\nEnter Author: ");
author = in.nextLine();
System.out.println("\nEnter ISBN: ");
isbn = in.nextInt();
System.out.println("\nEnter Price: ");
price = in.nextDouble();
Book b = new Book(isbn, title, author, price);
lib.addBook(b);
}
更多信息:
当您想/需要阅读整行内容时,您正在阅读下一个字符串。更改此项:
in.next();
借
在为您的书询问数据时:
private static void addBook() {
// TODO Auto-generated method stub
int isbn;
String title, author;
double price;
System.out.println("\nEnter Title: ");
title = in.nextLine();
System.out.println("\nEnter Author: ");
author = in.nextLine();
System.out.println("\nEnter ISBN: ");
isbn = in.nextInt();
System.out.println("\nEnter Price: ");
price = in.nextDouble();
Book b = new Book(isbn, title, author, price);
lib.addBook(b);
}
评论如下:
当我在in.next中更改in.nextLine时,在运行程序时,输入Title和输入Author`同时出现;取而代之的是,首先输入标题,然后输入作者
请注意,nextLine
将使用每个输入,直到扫描仪
找到新的换行输入。这意味着您必须在读取书籍数据之前添加额外的nextLine()
:
private static void addBook() {
// TODO Auto-generated method stub
int isbn;
String title, author;
double price;
in.nextLine(); //consume the data...
System.out.println("\nEnter Title: ");
title = in.nextLine();
System.out.println("\nEnter Author: ");
author = in.nextLine();
System.out.println("\nEnter ISBN: ");
isbn = in.nextInt();
System.out.println("\nEnter Price: ");
price = in.nextDouble();
Book b = new Book(isbn, title, author, price);
lib.addBook(b);
}
更多信息:
这仍然会导致问题,因为在大多数系统上,:
字符在路径或文件名中无效。@hexafrance这不是本文的目的。无论如何,更新了。@hexafrance顺便说一句,你甚至可以写文件:name
,然后被扫描仪#next
读取,这是没有救的。当我在.next中将更改为in.nextLine
时,运行程序输入标题和输入作者`同时出现;相反,应该先显示输入标题
,然后在给出标题后显示输入作者
。@LuiggiMendoza:您能详细说明一下为什么我们在.nextLine()中使用了额外的在阅读本书之前进行编码>?这仍然会导致问题,因为在大多数系统中,:
字符在路径或文件名中无效。@hexafrance这不是本文的目的。无论如何,更新了。@hexafrance顺便说一句,你甚至可以写文件:name
,然后被扫描仪#next
读取,这是没有救的。当我在.next中将更改为in.nextLine
时,运行程序输入标题和输入作者`同时出现;相反,应该先显示输入标题
,然后在给出标题后显示输入作者
。@LuiggiMendoza:您能详细说明一下为什么我们在.nextLine()中使用了额外的代码>阅读书籍前?分享重现问题的步骤。有时阅读规范会有所帮助:如果在阅读文件时出现异常,应在finally
块中关闭文件。一旦将自己的代码放入方法中,就不需要保留IDE中的//TODO自动生成的方法存根
注释。它们充其量只是一种干扰。@Braj:这是源代码——抓住它,试着做我在问题中尝试做的事情。我在询问步骤。您是否正在添加新书?请分享复制该问题的步骤。有时阅读规范会有所帮助:如果在阅读文件时出现异常,应在finally
块中关闭文件。一旦将自己的代码放入方法中,就不需要保留IDE中的//TODO自动生成的方法存根
注释。它们充其量只是一种干扰。@Braj:这是源代码——抓住它,试着做我在问题中尝试做的事情。我在询问步骤。你在增加一本新书吗?