【问题标题】:Unable to display elements stored in the arraylist [closed]无法显示存储在 arraylist 中的元素 [关闭]
【发布时间】:2022-01-18 04:15:09
【问题描述】:

我正在学习 Java 中的 arraylist,但遇到了一个我无法克服的挑战。 言归正传,我无法显示存储到数组列表中的元素。 我可以从构造函数文件中调用一个方法,但是当我将它们存储到数组列表中时,我无法显示它们。

以下是我所有 3 个文件的源代码:

这是我的主要 java 文件:


package test;

public class Client {
    public static void main(String[] args) {
        Basket basket = new Basket();
        addDVD();
        viewBasket();
        basket.printDetails();
        basket.printDetails1();
    }
    
    public static void addDVD() {
        Basket basket = new Basket();
        
        DVD gmc = new DVD("God Must be Crazy", "Comedy", "Director", 1990, 12.99);
        DVD interstellar = new DVD("Interstellar", "Sci-Fi", "Director2", 2016, 16.99);
        
        basket.addDVD(gmc);
        basket.addDVD(interstellar);
    }   
    
    public static void viewBasket() {
        DVD gmc = new DVD("God Must be Crazy", "Comedy", "Director", 1990, 12.99);
        DVD interstellar = new DVD("Interstellar", "Sci-Fi", "Director2", 2016, 16.99);
        
        gmc.printDetails();
        interstellar.printDetails();
    }
}

这是封装和构造文件:

package test;

public class DVD {
    private String title;
    private String genre;
    private int year;
    private String director;
    private double price;
    
    public DVD (String title, String genre, String director, int year, double price) {
        setTitle(title);
        setGenre(genre);
        setDirector(director);
        setYear(year);
        setPrice(price);
    }
    
    public String getTitle() {
        return title;
    }
    public String getGenre() {
        return genre;
    }
    public int getYear() {
        return year;
    }
    public String getDirector() {
        return director;
    }
    public double getPrice() {
        return price;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public void setGenre(String genre) {
        this.genre = genre;
    }
    public void setYear(int year) {
        this.year = year;
    }
    public void setDirector(String director) {
        this.director = director;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    
    public void printDetails() {
        System.out.println(
                "Title: " + getTitle() + "\n" +
                "Price: " + getPrice() + "\n"
                );
    }
    
}

最后,这是我正在尝试使其工作的 arraylist 文件:

package test;

import java.util.ArrayList;
import java.util.List;

public class Basket {
    List<DVD> DVDlist = new ArrayList<DVD>();
    
    public void addDVD (DVD dvd) {
        DVDlist.add(dvd);
        System.out.println("The dvd details has been stored into the array!");
    }
    
    /*
     * public double totalPrice() { double totalprice = 0; for (DVD dvd:DVDlist) {
     * totalprice = totalprice + dvd.getPrice(); } return totalprice; }
     */
    
    public void printDetails() {
        System.out.println("Displaying details");
        for (DVD dvd:DVDlist) {
            System.out.println("Title: " + dvd.getTitle());
            System.out.println("Price: " + dvd.getPrice());
        }
    }
    public void printDetails1() {
        System.out.println("Displaying Details from list");
        for(int i=0;i<DVDlist.size();i++) {
            System.out.println(DVDlist.get(i));
        }
    }
}

注意:调试代码时没有错误显示,并且我已经放置了各种打印行以确保所有功能都正常工作。当我运行代码时它们正在工作,但 arraylist 方法没有显示

【问题讨论】:

  • addDVD 中的basketmain 方法中的basket 不同。 DVD 没有通过main 方法进入basket。所以尝试做basket.printDetails() 不会给你任何东西
  • @NickDiv 所以要显示存储在数组列表中的元素,我必须在 addDVD() 中调用方法“basket.printDetails()”?
  • 不要在您的客户端 addDVD 方法中创建新篮子!
  • @Jimmy 你可以这样做,但你也有其他选择.. 要么使 basket 来自 main 方法成为类变量,而无需再次实例化 addDVD() 或其他选项就是你提到的。
  • 请问您所说的“将 main 方法中的篮子设为类变量,无需在 addDVD() 中实例化”是什么意思。 ?

标签: java arraylist


【解决方案1】:

问题是您在 addDVD 方法中创建了一个新元素,因此您使用 DVD 填充的不是 main 方法中的篮子,而是创建到 addDVD 中的篮子。

尝试将篮子作为 addDVD 的参数传递

package test;

public class Client {
    public static void main(String[] args) {
        Basket basket = new Basket();
        addDVD(basket);

        // no more needed 
        // viewBasket();

        basket.printDetails();
        basket.printDetails1();
    }
    
    public static void addDVD(Basket basket) {
        // No more needed
        // Basket basket = new Basket();
        
        DVD gmc = new DVD("God Must be Crazy", "Comedy", "Director", 1990, 12.99);
        DVD interstellar = new DVD("Interstellar", "Sci-Fi", "Director2", 2016, 16.99);
        
        basket.addDVD(gmc);
        basket.addDVD(interstellar);
    }   
    
    public static void viewBasket() {
        DVD gmc = new DVD("God Must be Crazy", "Comedy", "Director", 1990, 12.99);
        DVD interstellar = new DVD("Interstellar", "Sci-Fi", "Director2", 2016, 16.99);
        
        gmc.printDetails();
        interstellar.printDetails();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2023-04-01
    • 1970-01-01
    • 2012-04-25
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多