Как создать Arraylist с объектом внутри класса в Java - PullRequest
0 голосов
/ 12 февраля 2019

Упражнение состоит в том, чтобы создать класс с именем 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

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

В вашем коде много ошибок;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()));
0 голосов
/ 12 февраля 2019

Проблема с первым конструктором в классе 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 может быть сложно использовать, но это пример, где он может прояснить ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...