【问题标题】:"Get" Method and Constructors Exercise Problem in JavaJava中的“Get”方法和构造函数练习题
【发布时间】:2020-04-25 16:57:29
【问题描述】:

代码应该从用户那里获得所需的卧室、浴室和租金,并向他展示满足他们需求的公寓。该代码正在运行,但它会询问 5 次问题而不是一次,并且只提供当时每间公寓的信息。例如,如果我想要一个三房两卫的公寓,租金300,它只会再问第二次,而不会显示错误消息“公寓号”+ aptNumber+“不适合您的需求。”

我只希望它工作一次,询问一次,然后列出每间合适的公寓。如果有人有任何想法,请帮忙!

import java.util.Scanner;

public class Apartment
{
   private int aptNumber;
   private int bedrooms;
   private int baths;
   private double rent;

   public int getAptNumber()
   {
       return aptNumber;
   }

   public int getBedrooms()
   {
       return bedrooms;
   }

   public int getBaths()
   {
       return baths;
   }

   public double getRent()
   {
       return rent;
   }

   public Apartment(int num, int bed, int bath, double ren)
   {
       aptNumber = num;
       bedrooms = bed;
       baths = bath;
       rent = ren;
   }

   public Apartment(int num, int bed, int bath)
   {
       this(num, bed, bath, 300);
   }

   public Apartment(int num, int bed)
   {
       this(num, bed, 2);
   }

   public Apartment(int num)
   {
       this(num, 2);
   }

   public void display()
   {
       int minbeds;
       int minbaths;
       double maxrent;

       Scanner input = new Scanner(System.in);
       System.out.print("Please enter: least amount of bedrooms >> ");
       minbeds = input.nextInt();
       System.out.print("Please enter: least amount of bathrooms >> ");
       minbaths = input.nextInt();
       System.out.print("Please enter: maximum amount of rent >> ");
       maxrent = input.nextDouble();

       if(minbeds <= bedrooms) {
           if(minbaths <= baths) {
               if(maxrent >= rent) {
                   System.out.println("Apartment number " + aptNumber + " has " + bedrooms + 
                                      " bedrooms, " + baths + " bathrooms and the rent is " + rent);
               }
            }
        }
       else if (minbeds > bedrooms) {
           System.out.println("Apartment number " + aptNumber + " isn't suitable for your needs.");
       }
       else if (minbaths > baths) {
           System.out.println("Apartment number " + aptNumber + " isn't suitable for your needs.");
       }
       else if (maxrent < rent) {
           System.out.println("Apartment number " + aptNumber + " isn't suitable for your needs.");
       }
   }    
}





public class ApartmentProperties
{
   public static void main(String[] args)
   {    
      Apartment first = new Apartment(1);
      Apartment second = new Apartment(2, 2);
      Apartment third = new Apartment(3, 3, 2, 400);
      Apartment fourth = new Apartment(4, 1, 1, 250);
      Apartment fifth = new Apartment(5, 1, 1, 200);    

      first.display();
      second.display();
      third.display();
      fourth.display();
      fifth.display();
   }
}

【问题讨论】:

  • display 设为静态方法,并将Apartment 对象数组作为参数
  • 不要每次都制作新的扫描仪。将 Scanner 作为参数传入

标签: java constructor


【解决方案1】:

试试这个代码。我将 display 方法从 Apartment 移动到 ApartmentProperties 类,使其成为静态并将公寓列表放入参数中。

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

class Apartment {
    private int aptNumber;
    private int bedrooms;
    private int baths;
    private double rent;

    public int getAptNumber() {
        return aptNumber;
    }

    public int getBedrooms() {
        return bedrooms;
    }

    public int getBaths() {
        return baths;
    }

    public double getRent() {
        return rent;
    }

    public Apartment(int num, int bed, int bath, double ren) {
        aptNumber = num;
        bedrooms = bed;
        baths = bath;
        rent = ren;
    }

    public Apartment(int num, int bed, int bath) {
        this(num, bed, bath, 300);
    }

    public Apartment(int num, int bed) {
        this(num, bed, 2);
    }

    public Apartment(int num) {
        this(num, 2);
    }
}

public class ApartmentProperties {
    public static void display(List<Apartment> apartmentList) {
        int minbeds;
        int minbaths;
        double maxrent;

        Scanner input = new Scanner(System.in);
        System.out.print("Please enter: least amount of bedrooms >> ");
        minbeds = input.nextInt();
        System.out.print("Please enter: least amount of bathrooms >> ");
        minbaths = input.nextInt();
        System.out.print("Please enter: maximum amount of rent >> ");
        maxrent = input.nextDouble();

        boolean apartmentIsFound = false;
        for (Apartment apartment : apartmentList) {
            if (minbeds <= apartment.getBedrooms() && minbaths <= apartment.getBaths()
                    && maxrent >= apartment.getRent()) {
                System.out.println("Apartment number " + apartment.getAptNumber() + " has " + apartment.getBedrooms() +
                        " bedrooms, " + apartment.getBaths() + " bathrooms and the rent is " + apartment.getRent());
                apartmentIsFound = true;
            }
        }
        if (apartmentIsFound == false) {
            System.out.println("There are no apartments with those requirements");
        }
    }

    public static void main(String[] args) {
        Apartment first = new Apartment(1);
        Apartment second = new Apartment(2, 2);
        Apartment third = new Apartment(3, 3, 2, 400);
        Apartment fourth = new Apartment(4, 1, 1, 250);
        Apartment fifth = new Apartment(5, 1, 1, 200);

        List<Apartment> apartmentList = new ArrayList<Apartment>();
        apartmentList.add(first);
        apartmentList.add(second);
        apartmentList.add(third);
        apartmentList.add(fourth);
        apartmentList.add(fifth);

        display(apartmentList);
    }
}

【讨论】:

  • 那行得通,谢谢,但我不太清楚练习需要什么。因此,每当用户提供他们所需公寓的信息时,它应该要么给他一份所有适合公寓的列表,要么给他一条消息,说“没有符合这些要求的公寓”。对不起,英语不是我的母语,所以我无法正确解释。你也可以帮我吗?如果让我感到困惑:(
  • 我更新了答案中的代码。没关系,英语是我的第三个:)
猜你喜欢
  • 2021-01-20
  • 2019-11-11
  • 1970-01-01
  • 2019-07-09
  • 2013-12-22
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多