我正在为一个书店写一个库存程序,该书店由两个类和这些类中的多个方法组成。
我最麻烦的方法是我的purchase()方法,该方法应该以交互方式处理购买,在购买后更新数组,并显示当天销售的商品总数和总金额。
该方法应遵循以下10个步骤:
要求用户输入他们想要购买的图书的ISBN号。
在数组中搜索包含该ISBN的对象。
如果在阵列中找不到ISBN,请显示一条消息,说明我们没有该书。
如果找到ISBN但副本数为0,则会显示一条消息,说明该书已缺货。
如果找到ISBN并且份数大于0,请询问用户他们想要购买多少份。
如果他们输入的数字大于数组中该图书的副本数量,请显示一条消息,说明并输入另一个数量。
当他们为ISBN输入0时,扫描仪应该关闭
购买完成后,我需要通过减去购买的特定图书的副本数量来更新阵列。
打印更新后的数组。
显示购买书籍的数量,以及购买的金额。
但是当我的代码被写入时,在程序提示我输入ISBN后,没有任何反应,它只是不断地让我输入数字而没有额外的输出。
以下是此方法的代码。我很确定这可能是我的循环问题,因为我对循环不是很好。谁能发现我做错了什么?
public static Book[] purchase(Book[] books) {
int itemsSold = 0;
double totalMade = 0;
double price;
int copies;
String isbn;
Scanner input = new Scanner(System.in);
int desiredCopies = 0;
int index;
double total = 0;
System.out.println("Please enter the ISBN number of the book you would like to purchase: ");
String desiredIsbn = input.next();
for (index = 0; index < books.length; index++) {
if (books[index].getISBN().equals(desiredIsbn) && books[index].getCopies() > 0) {
System.out.println("How many copies of this book would you like to purchase?");
if (!books[index].getISBN().equals(desiredIsbn))
System.out.println("We do not have that book in our inventory.");
if (books[index].getISBN().equals(desiredIsbn) && books[index].getCopies() == 0)
System.out.println("That book is currently out of stock.");
desiredCopies = input.nextInt();
}
if (desiredCopies > books[index].getCopies())
System.out.println("We only have " + books[index].getCopies() + "in stock. Please select another quantity: ");
desiredCopies = input.nextInt();
books[index].setCopies(books[index].getCopies() - desiredCopies);
if (input.next().equals(0))
System.out.println("Thank you for your purchase, your order total is: $" + total);
input.close();
total = books[index].getPrice() * desiredCopies;
itemsSold += desiredCopies;
totalMade += total;
System.out.print(books[index]);
System.out.println("We sold " + itemsSold + " today.");
System.out.println("We made $" + totalMade + "today.");
}
return books;
}
非常感谢任何帮助。
答案 0 :(得分:2)
您的if
陈述并未明确涵盖所有可能的条件排列。
您应始终使用if/else if/else
块来确保涵盖所有条件。除此之外,绝对没有办法任何人都可以提供任何实际的解决方案,而这一点很少。
Scanner
和StringTokenizer
是Date
和Calendar
之外的JDK中设计最差的两个类。它们给新人带来了无穷无尽的麻烦,并且被退伍军人所避免。