Java方法返回结果在main打印及折扣未生效问题求助
我编写的Java程序无法让40%的折扣显示在第二次打印输出中,以下是我的代码:
public static void main(String[] args) { // 创建数组 Book[] bookArray = new Book[6]; // 使用带参构造器创建书籍 bookArray[0] = new Book("Java Programming", "Liang", 1320, 145.00); bookArray[1] = new Book("Horton Hears a Who!", "Dr. Suess", 72, 19.99); bookArray[2] = new Book("The Hobbit", "Tolkien", 320, 9.25); bookArray[3] = new Book("Born a Crime", "Noah", 304, 17.33); // 使用无参构造器创建书籍 bookArray[4] = new Book(); bookArray[5] = new Book(); // 打印初始数组 for (Book book: bookArray) { System.out.println(book); } System.out.println(); finishArray(bookArray); System.out.println("补全书籍信息并应用40%折扣后的列表"); // 第二次打印数组 for (Book book: bookArray) { System.out.println(book); } System.out.println("折扣后价格最高的书籍:\n" + reduceBooks(bookArray)); System.out.println("图书馆书籍总数: " + bookArray.length + " 本"); } public static void finishArray(Book bookArray[]) { Book book; book = bookArray[4]; book.setTitle("Dark Territory"); book.setAuthor("Kaplan"); book.setPages(352); book.setPrice(11.24); book = bookArray[5]; book.setTitle("Born to Run"); book.setAuthor("Springsteen"); book.setPages(508); book.setPrice(12.17); } public static Book reduceBooks(Book bookArray[]) { Book most = bookArray[0]; for (int i = 0; i < bookArray.length; i++) { Book book = bookArray[i]; // 判断当前书籍是否比当前最高价更贵 if(book.getPrice() > most.getPrice()) { most = book; } // 应用折扣 book.setPrice(book.getPrice() * 0.6); } return most; // 返回最高价书籍 }
当前输出
Title: Java Programming
Author: Liang
Pages: 1320
Price: 145.00Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 19.99Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 9.25Title: Born a Crime
Author: Noah
Pages: 304
Price: 17.33Title: null
Author: null
Pages: 0
Price: 0.00Title: null
Author: null
Pages: 0
Price: 0.00补全书籍信息并应用40%折扣后的列表
Title: Java Programming
Author: Liang
Pages: 1320
Price: 145.00Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 19.99Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 9.25Title: Born a Crime
Author: Noah
Pages: 304
Price: 17.33Title: Dark Territory
Author: Kaplan
Pages: 352
Price: 11.24Title: Born to Run
Author: Springsteen
Pages: 508
Price: 12.17折扣后价格最高的书籍:
Title: Java Programming
Author: Liang
Pages: 1320
Price: 87.00图书馆书籍总数: 6 本
reduceBooks()方法要求
- 该方法返回一个Book实例;
- 使用任意类型循环将数组中每本书的价格降低40%;
- 确定折扣后价格最高的书籍并将其返回给main方法。
问题原因与修正方案
1. 调用顺序错误
第二次打印数组的代码在reduceBooks(bookArray)调用之前执行,此时书籍还未被打折,所以打印的是原价。需要将reduceBooks的调用移到第二次打印之前。
2. 逻辑顺序错误
原reduceBooks方法先比较原价再打折,导致返回的是原价最高的书籍,而非要求的折扣后价格最高的书籍。需要调整顺序:先给当前书籍打折,再比较折扣后的价格。
修正后的代码
public static void main(String[] args) { // 创建数组 Book[] bookArray = new Book[6]; // 使用带参构造器创建书籍 bookArray[0] = new Book("Java Programming", "Liang", 1320, 145.00); bookArray[1] = new Book("Horton Hears a Who!", "Dr. Suess", 72, 19.99); bookArray[2] = new Book("The Hobbit", "Tolkien", 320, 9.25); bookArray[3] = new Book("Born a Crime", "Noah", 304, 17.33); // 使用无参构造器创建书籍 bookArray[4] = new Book(); bookArray[5] = new Book(); // 打印初始数组 for (Book book: bookArray) { System.out.println(book); } System.out.println(); finishArray(bookArray); // 先调用reduceBooks完成折扣计算 Book mostExpensiveAfterDiscount = reduceBooks(bookArray); System.out.println("补全书籍信息并应用40%折扣后的列表"); // 第二次打印数组 for (Book book: bookArray) { System.out.println(book); } System.out.println("折扣后价格最高的书籍:\n" + mostExpensiveAfterDiscount); System.out.println("图书馆书籍总数: " + bookArray.length + " 本"); } public static void finishArray(Book bookArray[]) { Book book; book = bookArray[4]; book.setTitle("Dark Territory"); book.setAuthor("Kaplan"); book.setPages(352); book.setPrice(11.24); book = bookArray[5]; book.setTitle("Born to Run"); book.setAuthor("Springsteen"); book.setPages(508); book.setPrice(12.17); } public static Book reduceBooks(Book bookArray[]) { // 初始化most为折扣后的第一本书 Book most = bookArray[0]; most.setPrice(most.getPrice() * 0.6); for (int i = 1; i < bookArray.length; i++) { Book book = bookArray[i]; // 先应用折扣 book.setPrice(book.getPrice() * 0.6); // 再比较折扣后的价格 if(book.getPrice() > most.getPrice()) { most = book; } } return most; // 返回折扣后价格最高的书籍 }
修正后的输出
Title: Java Programming
Author: Liang
Pages: 1320
Price: 145.00Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 19.99Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 9.25Title: Born a Crime
Author: Noah
Pages: 304
Price: 17.33Title: null
Author: null
Pages: 0
Price: 0.00Title: null
Author: null
Pages: 0
Price: 0.00补全书籍信息并应用40%折扣后的列表
Title: Java Programming
Author: Liang
Pages: 1320
Price: 87.00Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 11.99Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 5.55Title: Born a Crime
Author: Noah
Pages: 304
Price: 10.40Title: Dark Territory
Author: Kaplan
Pages: 352
Price: 6.74Title: Born to Run
Author: Springsteen
Pages: 508
Price: 7.30折扣后价格最高的书籍:
Title: Java Programming
Author: Liang
Pages: 1320
Price: 87.00图书馆书籍总数: 6 本
内容的提问来源于stack exchange,提问作者Abigail Curtis

