簡體   English   中英

如何在java中的類中創建一個帶有對象的Arraylist

[英]How to create an Arraylist with an object inside a class in java

練習是創建一個名為 Tenant 的類,該類將用於存儲公寓租戶的值。 在主類 Prog2 中,我試圖創建一個 ArrayList,它可以包含 4 個不同的值,所有值都與租戶類有關,它們是 - 租戶的姓名、公寓號、首付款和每月付款。 我希望能夠在單獨的行中打印這些值,這些值將為每個租戶提供所有 4 條信息 - 后跟一個空行,然后是另一個租戶的相同 4 條信息(如果有另一個租戶)。 我可以讓程序正確提示問題,但是我得到的只是空值和 0 打印出來(見下面的評論)。 我感謝所有的幫助 - 我不是最擅長的。

// this class is the tenant class that passes all the tenant's 
information

public class Tenant { 
    private String firstName;
    private String lastName;
    private String aptNumber;
    private double yearlyRent;
    private String fullName;
    private double firstPayment;
    private double monthlyPayment;

public Tenant(String name, String aptNum, double fPayment, double 
                                                    mPayment){
    name = fullName;
    aptNum = aptNumber;
    fPayment = firstPayment;
    mPayment= monthlyPayment;
}
public Tenant() {

}


public void setFirstName(String name) {
    firstName = name;
}
public void setLastName(String lName) {
    lastName= lName;
}
public void setAptNumber(String apt) {
    aptNumber = apt;
}
public void setRent(double rent) {
    yearlyRent = rent; 
}
public String getFirstName() {
    return firstName;
}
public String getLastName() {
    return lastName;
}
public String getAptNumber() {
    return aptNumber;
}
public double getRent() {
    return yearlyRent;
}
public double getFirstPayment() {
    double monthlyRent = yearlyRent/12;
    firstPayment = monthlyRent * 3;
    return firstPayment;
}
public double getmonthlyPayment() {
    double firstAndLast = yearlyRent/12;
    monthlyPayment = (yearlyRent - firstAndLast)/11;
    return monthlyPayment;
}
public String getFullName(){
    fullName = firstName + " " + lastName;
    return fullName;
}

}



// The below class contains the main method 





public class Prog2 {
    public static double getDouble(Scanner scan) {
        System.out.println("Enter yearly rent:");
        while (!scan.hasNextDouble()) {
           scan.next();
           System.out.println("Error: please enter a numeric 
           value");
        }
        return scan.nextDouble();
}

public static void main(String[] args) {
    Tenant tnt = new Tenant();
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter number of tenenats:");
    int numTenants = scan.nextInt();
    ArrayList<Tenant> list = new ArrayList<Tenant>();

    for (int i = 0; i<numTenants; i++) {
        System.out.println("Enter first name:");
        tnt.setFirstName(scan.next());
        System.out.println("Enter last name:");
        tnt.setLastName(scan.next());
        System.out.println("Enter apt number:");
        tnt.setAptNumber(scan.next());
        tnt.setRent(getDouble(scan));
        list.add(new Tenant(tnt.getFullName(), tnt.getAptNumber(), 
        tnt.getFirstPayment(), tnt.getmonthlyPayment()));             
    }
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i).getFullName());
        System.out.println(list.get(i).getAptNumber());
        System.out.println(list.get(i).getFirstPayment());
        System.out.println(list.get(i).getmonthlyPayment());
        System.out.println();
    }

}

}
// this prints out: 
null null
null
0.0
0.0

null null
null
0.0
0.0

問題在於Tenant類中的第一個構造函數。 請記住, =運算符將右操作數的值分配給左操作數中的變量。 在您的情況下,代碼應如下所示:

public Tenant(
        String name, 
        String aptNum, 
        double fPayment, 
        double mPayment)
{
    fullName = name;
    aptNumber = aptNum;
    firstPayment = fPayment;
    monthlyPayment = mPayment;
}

我通常對構造函數所做的是在字段之后命名參數,然后在字段賦值的左側使用this來引用字段而不是參數。 這最終看起來更清晰:

public Tenant(
        String fullName, 
        String aptNumber, 
        double firstPayment, 
        double monthlyPayment)
{
    this.fullName = fullname;
    this.aptNumber = aptNumber;
    this.firstPayment = firstPayment;
    this.monthlyPayment = monthlyPayment;
}

this可能很難使用,但這是一個可以解決問題的示例。

您的代碼有很多問題。

  1. 的構造函數

    公共租戶(字符串名稱,字符串 aptNum,雙 fPayment,雙 mPayment){ name = fullName; aptNum = aptNumber; fPayment = firstPayment; mPayment=每月付款; }

在這里,您不僅僅是為函數參數分配空值,而不是從函數參數為類字段分配值。

此外,當您調用函數 getFullName() 時,它將返回 null,因為 firstName 和 lastName 字段未初始化。

因此,您需要將構造函數修改為 -

public Tenant(String firstNamename, String lastName, String aptNum, double fPayment, double
                                                    mPayment){
    this.firstName = firstNamename;
    this.lastName = lastName;
    this.aptNumber = aptNum;
    this.firstPayment = fPayment;
    this.monthlyPayment = mPayment;
    this.fullName = getFullName();
}

同樣在 for 循環中,您需要更改

list.add(new Tenant(tnt.getFullName(), tnt.getAptNumber(), 
        tnt.getFirstPayment(), tnt.getmonthlyPayment())); 

到 -

list.add(new Tenant(tnt.getFirstName(),tnt.getLastName(), tnt.getAptNumber(),
        tnt.getFirstPayment(), tnt.getmonthlyPayment()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM