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