我做了一个应用程序,用MySQL做一些操作,并给用户选择他可以做的操作的可能性,我创建了一个有几个选择的men循环。下面是代码:
public void MainMenu() throws DatabaseConnectionException, SQLException, ParseException, AuthorPublisherNotFoundException {
ConnectionMySQL cd = new ConnectionMySQL();
cd.initConnection();
BookDao BookDao = new BookDao(cd.getConnection());
AuthorDao AuthorDao = new AuthorDao(cd.getConnection());
PublisherDao PublisherDao = new PublisherDao(cd.getConnection());
DeleteAuthor deleteAuthor = new DeleteAuthor(cd.getConnection());
DeletePublisher deletePublisher = new DeletePublisher(cd.getConnection());
CheckAuthorFromBook checkA = new CheckAuthorFromBook(cd.getConnection());
CheckPublisherFromBook checkP = new CheckPublisherFromBook(cd.getConnection());
GetAuthorName getAuthorName = new GetAuthorName(cd.getConnection());
GetPublisherName getPublisherName = new GetPublisherName(cd.getConnection());
System.out.println("\n***BOOKSHOP APPLICATION***\n");
int choice;
while (true) {
System.out.println("\nPOSSIBILE ACTION:");
System.out.println("1" + " Insert new author");
System.out.println("2" + " Delete an author");
System.out.println("3" + " Browse authors");
System.out.println("4" + " Insert a new publisher");
System.out.println("5" + " Delete a publishern");
System.out.println("6" + " Browse publishers");
System.out.println("7" + " Insert a new book");
System.out.println("8" + " Delete a book");
System.out.println("9" + " Browse books");
System.out.println("10" + " Update quantity of a book(+/-)");
System.out.println("0" + " Terminate program");
System.out.println("\nWhat you want to do?");
Scanner inputA = new Scanner(System.in);
choice = inputA.nextInt();
switch (choice) {
case 1:
String fName = null;
String lName;
String biography;
System.out.println("Insert the name, the last name and the biography of the author");
Scanner input1 = new Scanner(System.in);
System.out.println("Name:");
fName = input1.next();
System.out.println("Surname:");
lName = input1.next();
System.out.println("Biography:");
biography = input1.next();
AuthorDao.insertAuthor(fName, lName, biography);
input1.close();
break;
case 2:
int id;
System.out.println("Insert the identifier of the author (drop the author will drop even his books)");
Scanner input2 = new Scanner(System.in);
System.out.println("Identifier:");
id = input2.nextInt();
deleteAuthor.deleteAutCascade(id);
input2.close();
break;
case 3:
System.out.println("Authors list:");
List<Author> listaAuthor = AuthorDao.getAllAuthor();
for (Author author : listaAuthor) {
System.out.println("Id author: " + author.getAuthor_id() + " Name: " + author.getFname() + " Surname: " + author.getLname());
}
break;
case 4:
String name = null;
String location = null;
System.out.println("Insert the name and the location of the new publisher");
Scanner input3 = new Scanner(System.in);
System.out.println("Name:");
name = input3.next();
System.out.println("Location:");
location = input3.next();
PublisherDao.insertPublisher(name, location);
input3.close();
break;
case 5:
int idPub;
System.out.println("Insert the identifier of the publisher (drop the publisher will drop even his books)");
Scanner input4 = new Scanner(System.in);
System.out.println("Identifier:");
idPub = input4.nextInt();
deletePublisher.deletePubCascade(idPub);
input4.close();
break;
case 6:
System.out.println("Publisher list:");
List<Publisher> listaPublisher = PublisherDao.getAllPublisher();
for (Publisher publisher : listaPublisher) {
System.out.println("Id publisher: " + publisher.getPublisher_id() + " Name: " + publisher.getName() + " Location: " + publisher.getLocation());
}
break;
case 7:
String title;
Float price = null;
String category;
int pubblicationYear;
int numPages;
Integer idPublisher;
int quantity;
Integer idAuthor;
System.out.println("Insert the features of the new book");
Scanner input = new Scanner(System.in);
System.out.println("Title:");
title = input.nextLine();
System.out.println("Price:");
price = input.nextFloat();
System.out.println("Category:");
category = input.nextLine();
System.out.println("Year of publication:");
pubblicationYear = input.nextInt();
System.out.println("Number of pages:");
numPages = input.nextInt();
System.out.println("Publisher:");
idPublisher = input.nextInt();
System.out.println("Quantity");
quantity = input.nextInt();
System.out.println("Author");
idAuthor = input.nextInt();
try {
if (checkA.checkAuthor(idAuthor)) {
if (checkP.checkPublisher(idPublisher)) {
BookDao.insertBook(title, price, category, pubblicationYear, numPages, idPublisher, quantity, idAuthor);
input.close();
} else {
}
} else {
}
} catch (Exception e) {
throw new AuthorPublisherNotFoundException("Please add the publisher or the author in respective section before inserting a book with them!");
}
input.close();
break;
case 8:
int idB;
System.out.println("Insert the identifier of the book that you want to drop: ");
Scanner input5 = new Scanner(System.in);
System.out.println("Identifier:");
idB = input5.nextInt();
BookDao.deleteBook(idB);
input5.close();
case 9:
System.out.println("Books list:");
List<Book> listaBook = BookDao.getAllBooks();
for (Book book : listaBook) {
System.out.println("Id Book: " + book.getBook_id() + " Title: " + book.getTitle() + " Price: " + book.getPrice()
+ " Category: " + book.getCategory() + " Year of publication: " + book.getYear() + " Number of pages: "
+ book.getNumPage() + " Publisher: " + getPublisherName.publisherName(book.getPublisher_id()) + " Quantity: "
+ book.getQuantity() + " Author: " + getAuthorName.authorName(book.getAuthor_id()));
}
break;
case 10:
int qty; int idBook;
System.out.println("Insert the ID of the book that you want to update with the new quantity in stock:");
Scanner input6 = new Scanner(System.in);
System.out.println("Identifier:");
idBook = input6.nextInt();
System.out.println("Qty:");
qty=input6.nextInt();
BookDao.modifyQuantity(idBook,qty);
input6.close();
break;
case 0:
System.out.println("Exiting program...");
cd.closeConnection();
System.exit(0);
break;
default:
System.out.println("This is not a valid menu option... Please try again!");
break;
}
}
}
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at utilities.menu.MainMenu(menu.java:58)
at Main.main(Main.java:11)
扫描仪肯定有问题,但是什么原因造成的?提前谢谢你。
正如注释中的statet:您需要使用一个扫描器,您不应该编写while(true),因为它会使更多的代码无法访问,并且最终需要关闭那个扫描器(inputA)。
我为你的函数写了一个简化版本:
public void MainMenu() {
System.out.println("\n***BOOKSHOP APPLICATION***\n");
int choice = 1;
Scanner inputA = new Scanner(System.in);
while (choice != 0) {
System.out.println("\nPOSSIBILE ACTION:");
System.out.println("1" + " Insert new author");
System.out.println("2" + " Delete an author");
System.out.println("3" + " Browse authors");
System.out.println("4" + " Insert a new publisher");
System.out.println("5" + " Delete a publishern");
System.out.println("6" + " Browse publishers");
System.out.println("7" + " Insert a new book");
System.out.println("8" + " Delete a book");
System.out.println("9" + " Browse books");
System.out.println("10" + " Update quantity of a book(+/-)");
System.out.println("0" + " Terminate program");
System.out.println("\nWhat you want to do?");
choice = inputA.nextInt();
System.out.println();
switch (choice) {
case 1:
String fName = null;
String lName;
String biography;
System.out.println("Insert the name, the last name and the biography of the author");
System.out.println("Name:");
fName = inputA.next();
System.out.println("Surname:");
lName = inputA.next();
System.out.println("Biography:");
biography = inputA.next();
break;
default:
System.out.println("This is not a valid menu option... Please try again!");
break;
}
}
inputA.close();
}
嗨,我正在编写一个程序,它使用Scanner从用户那里获取输入,然后使用布尔方法检查输入的长度是否不超过六个字符。问题是,如果长度小于六个,我使用了while循环来不断请求输入;但是在第一次错误输入后,如果你插入一串六个字母或更长的字符串,循环仍然会继续。这是程序: 谢谢
我开发了一个字符排序器,我想每次字符串排序后提示用户输入一个新的字符串。我遇到的问题是扫描仪一直在扫描用户的第一个输入。如果我使用scanner.next(),它不会计算输入末尾的空白,这不是解决方案。 这是while循环的开始。一旦代码完成,它将再次从“inputtext”开始。
我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。
问题内容: 我必须在 while 循环中显示Scanner输入:用户必须插入输入,直到他写下“ quit”为止。因此,我必须验证每个输入以检查他是否写出“ quit”。我怎样才能做到这一点? 这行不通。如何验证每个用户的输入? 问题答案: 问题是nextLine() “使该扫描程序前进到当前行之外”。因此,当您调用该条件并且不保存返回值时,您将丢失用户输入的那一行。对第3行的调用返回另一行。 您可
问题内容: 如何将扫描仪的定界符设置为;或换行? 我试过: 但这不起作用。 问题答案: 通常,在模式中,您需要将翻倍。 所以,尝试 要么 编辑 :如果是问题,则可能要尝试以下操作: 它匹配的一个或多个,和。 注意 :我还没有尝试过这些。
问题内容: 我正在尝试读取具有多个单词的字符串,即。洛杉矶或纽约市。如果有两个词并将它们分割在变量之间,则使用scanner.next()进行“出发”和“到达”只会读取第一个。nextLine()也不是很幸运。这是我的代码: 我知道这很简单,但我还没有弄清楚。 这是上面的代码的输入/输出: 输入航班号:29 输入出发城市:(立即跳至下一行) 输入到达城市: -—我真正想要的是---- 输入航班号: