微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不同类中的 Java 方法返回相同的变量

如何解决不同类中的 Java 方法返回相同的变量

我正在尝试根据以下 UML 类图为作业设计一个 java 程序,但我被卡住了。当我在 House 和 ApartmentBuilding 类的 create 方法中输入名称和 xPosition 时,我最终会得到所有创建的 House 对象的最近输入结果。

enter image description here

可绘制:

import javafx.scene.canvas.GraphicsContext;



 interface Drawable {

   void draw(GraphicsContext canvas);

   public double getXPosition();
   
}

村庄:

import javafx.scene.canvas.GraphicsContext;

import java.util.Scanner;

public class Village extends Building{

    public static final double Y_FLOOR = 300;
    private int size;
    private final String villageName;
    private final Building[] buildings;


    private Village(String villageName,int size){
        super(name,xPosition);
        this.size = size;
        this.villageName = villageName;
        this.buildings = new Building[size];
    }

    public static Village create() {

        Scanner scan = new Scanner(system.in);
        Village a;

        System.out.println("Enter name of village: ");
        String villageName = scan.nextLine();
        System.out.println("Enter number of buildings: ");
        int num = scan.nextInt();

        a = new Village(villageName,num);

        for(int i = 0; i < num; i++) {

            System.out.println("Enter type of Building: 1= House,2= Apartment,3= Store ");
            int choice = scan.nextInt();

            if (choice == 1){
                a.buildings[i] = House.create();
            }

            if (choice == 2){
                a.buildings[i] = ApartmentBuilding.create();
            }
        }

        return a;

    }


    public int getPopulation(){

        return size;
    }

    public void draw(GraphicsContext canvas){

    }

    public String toString(){

        String str = "\n"+ "Village of " + villageName + "\n\n";

        for (int i=0; i<buildings.length; i++) {
            str = str + buildings[i].toString() + "\n"; // this adds each buildings information to the string
        }
        return str;
    }
}

建筑:

import javafx.scene.canvas.GraphicsContext;

public class Building implements Drawable {


    static String name;
    static double xPosition;



    public Building(String name,double xPosition){
            Building.name = name;
            Building.xPosition = xPosition;
    }




    public String getName(){
        return name;
    }


    public void draw(GraphicsContext canvas) {

    }


    public double getXPosition() {
        return xPosition;
    }






    @Override
    public String toString(){
            return "Type... Building:  " + "name= " + getName() + ",xPosition= " + getXPosition() + "\n";}
    }

房子:

import javafx.scene.canvas.GraphicsContext;

import java.util.Scanner;

public class House extends Building implements Dwelling  {

    private int bedrooms;
    private int occupants;

    House(String name,double xPosition,int bedrooms,int occupants){
        super(name,xPosition);
        this.bedrooms = bedrooms;
        this.occupants = occupants;


    }
    public static House create() {



        Scanner scan = new Scanner(system.in);
        House a;


        System.out.println("Enter name of the House: ");
        name = scan.nextLine();
        System.out.println("Enter XPosition of the House: ");
        xPosition = scan.nextInt();


        System.out.println("Enter number of bedrooms: ");
        int bedrooms = scan.nextInt();
        System.out.println("Enter number of occupants: ");
        int occupants = scan.nextInt();

        a = new House(name,xPosition,bedrooms,occupants);


        return a;

    }
    public void draw(GraphicsContext canvas){


    }



    @Override
    public String toString(){
        return "House: " + "bedrooms= " + bedrooms + " occupants= " + occupants + "\n" + super.toString();
    }


    @Override
    public int getNumberOfOccupants() {
        return occupants;
    }
}

公寓楼:

import javafx.scene.canvas.GraphicsContext;

import java.util.Scanner;

public class ApartmentBuilding extends HighRise implements Dwelling{

    private final int occupantsPerFloor;
    private final int numberOfFloors;

    ApartmentBuilding(String name,int numberOfFloors,int occupantsPerFloor){
        super(name,xPosition);
        this.occupantsPerFloor = occupantsPerFloor;
        this.numberOfFloors = numberOfFloors;


    }

    public static ApartmentBuilding create() {

        Scanner scan = new Scanner(system.in);
        ApartmentBuilding a;

        System.out.println("Enter name of the Apartment Building: ");
        name = scan.nextLine();

        System.out.println("Enter XPosition of the Apartment Building: ");
        xPosition = scan.nextInt();
        System.out.println("Enter number of floors: ");
        int numberOfFloors = scan.nextInt();
        System.out.println("Enter number of occupants per floor: ");
        int occupantsPerFloor = scan.nextInt();

        a = new ApartmentBuilding(name,numberOfFloors,occupantsPerFloor);


        return a;
    }


    public void draw(GraphicsContext canvas){

    }
    @Override
    public String toString(){

        return "Apartment Building: " + "occupantsPerFloor= " + occupantsPerFloor + "\n" + super.toString() + "\n";
    }

    @Override
    public int getNumberOfOccupants() {
        return 0;
    }
}

示例输出

enter image description here

我是编程新手,正在努力学习,但不幸的是,我陷入了困境。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。