如何解决JAVA 显示 ArrayList 索引中的所有元素
我正在创建一个基于菜单的程序来生成发票,此发票用于月租。
当用户选择某个选项时,系统会提示他们输入多个用户输入,这些输入将存储在变量中(所有双精度和 1 个字符串)。这些用户输入被存储在一个 ArrayList 中。
我创建了一个类 BudgetInvoice,其中声明了变量,我有合适的 getter 和 setter 以及构造函数。
我创建了一个单独的类 InvoicerHub ,其中还声明了 ArrayList 类型,我将在其中创建函数来收集用户输入并存储在 arrayList 中以及在 ArrayList 中显示这些元素。
在我的主类中,我正在测试 2 个函数(generateInvoice 和 showInvoice),我将在其中收集用户输入并显示另一个函数。
我可以毫无问题地收集用户输入,但是当我立即调用 showInvoice 函数时,没有任何显示并且程序终止。
下面我将展示有问题的类和函数以及我的主类,以便深入了解这里可能出现的问题。
感谢您的帮助!
import java.util.Scanner;
public class BudgetInvoice {
protected double monthlyRent;
protected double waterBill;
protected double energyBill;
protected double carRent;
protected double internetRent;
protected String invoiceID;
Scanner myScan = new Scanner(System.in);
public double getMonthlyRent() {
return monthlyRent;
}
public void setMonthlyRent(double monthlyRent) {
this.monthlyRent = monthlyRent;
}
public double getWaterBill() {
return waterBill;
}
public void setWaterBill(double waterBill) {
this.waterBill = waterBill;
}
public double getEnergyBill() {
return energyBill;
}
public void setEnergyBill(double energyBill) {
this.energyBill = energyBill;
}
public double getCarRent() {
return carRent;
}
public void setCarRent(double carRent) {
this.carRent = carRent;
}
public double getInternetRent() {
return internetRent;
}
public void setInternetRent(double internetRent) {
this.internetRent = internetRent;
}
public String getInvoiceID() {
return invoiceID;
}
public void setInvoiceID(String invoiceID) {
this.invoiceID = invoiceID;
}
public BudgetInvoice (double monthlyRent,double waterBill,double energyBill,double carRent,double internetRent,String invoiceID)
{
this.monthlyRent = monthlyRent;
this.waterBill = waterBill;
this.energyBill = energyBill;
this.carRent = carRent;
this.internetRent = internetRent;
this.invoiceID = invoiceID;
}
public BudgetInvoice() {
// TODO Auto-generated constructor stub
}
public String toString() {
return "BudgetInvoice [monthlyRent=" + monthlyRent + ",waterBill=" + waterBill + ",energyBill=" + energyBill
+ ",carRent=" + carRent + ",internetRent=" + internetRent + ",invoiceID=" + invoiceID + ",myScan="
+ myScan + "]";
}
}
import java.util.ArrayList;
public class InvoicerHub extends BudgetInvoice{
protected ArrayList <BudgetInvoice> InvoiceHub ;
public InvoicerHub()
{
InvoiceHub = new ArrayList<BudgetInvoice>();
}
public InvoicerHub(ArrayList<BudgetInvoice> InvoiceHub)
{
super();
this.InvoiceHub = InvoiceHub;
}
public void generateInvoice (BudgetInvoice b )
{
System.out.println("Enter your Monthly Rent");
double rent = myScan.nextDouble();
System.out.println("Enter Your monthly Water bill");
double waterBill = myScan.nextDouble();
System.out.println("Enter your Energy Costs");
double energyBill = myScan.nextDouble();
System.out.println("Enter your monthly car payment");
double carPayment = myScan.nextDouble();
System.out.println("Enter your monthly Internet costs");
double internetBill = myScan.nextDouble();
myScan.nextLine(); // to catch the enter input
System.out.println("Enter your desired Invoice ID");
String invoiceID = myScan.nextLine();
BudgetInvoice B = new BudgetInvoice ( rent,waterBill,energyBill,carPayment,internetBill,invoiceID);
InvoiceHub.add(B);
}
public String toString() {
return "InvoicerHub [InvoiceHub=" + InvoiceHub + "]";
}
public String showInvoice()
{
String temp = "Here is your Invoice";
for(BudgetInvoice p : InvoiceHub)
{
temp += p.toString();
}
return temp;
}
}
import java.util.ArrayList;
public class Tester {
public static void main(String[] args) {
InvoicerHub myInvoice = new InvoicerHub();
myInvoice.generateInvoice(myInvoice);
myInvoice.showInvoice();
}
}
解决方法
您没有打印 showIncoice() 方法的结果。 请注意您返回的是 String 而不是在方法本身内部打印。
,您的 showInvoice
方法应该做到这一点(即显示发票)。打印语句应在该方法中,并且该方法的返回类型应为 void
。否则,您可能希望将该方法重命名为更有意义的名称,例如 getFormattedInvoice()
您还可以修改您的 toString()
方法以正确格式化发票以进行打印。然后,您只需打印对象即可打印发票。
注意:当覆盖 toString()
之类的方法时,最好在它们之前添加 @Override
注释。这将确保您的方法签名与覆盖方法的签名相匹配。这样做通常可以通过在编译时捕获不正确的签名来帮助防止调试问题。
import java.util.ArrayList;
public class Tester {
public static void main(String[] args) {
InvoicerHub myInvoice = new InvoicerHub();
myInvoice.generateInvoice(myInvoice);
System.out.println(myInvoice.showInvoice());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。