You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java方法返回结果在main打印及折扣未生效问题求助

问题:40%折扣未应用到第二次打印输出

我编写的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.00

Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 19.99

Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 9.25

Title: Born a Crime
Author: Noah
Pages: 304
Price: 17.33

Title: null
Author: null
Pages: 0
Price: 0.00

Title: null
Author: null
Pages: 0
Price: 0.00

补全书籍信息并应用40%折扣后的列表
Title: Java Programming
Author: Liang
Pages: 1320
Price: 145.00

Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 19.99

Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 9.25

Title: Born a Crime
Author: Noah
Pages: 304
Price: 17.33

Title: Dark Territory
Author: Kaplan
Pages: 352
Price: 11.24

Title: 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.00

Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 19.99

Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 9.25

Title: Born a Crime
Author: Noah
Pages: 304
Price: 17.33

Title: null
Author: null
Pages: 0
Price: 0.00

Title: null
Author: null
Pages: 0
Price: 0.00

补全书籍信息并应用40%折扣后的列表
Title: Java Programming
Author: Liang
Pages: 1320
Price: 87.00

Title: Horton Hears a Who!
Author: Dr. Suess
Pages: 72
Price: 11.99

Title: The Hobbit
Author: Tolkien
Pages: 320
Price: 5.55

Title: Born a Crime
Author: Noah
Pages: 304
Price: 10.40

Title: Dark Territory
Author: Kaplan
Pages: 352
Price: 6.74

Title: 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:55:24