Java 为数组中的每个元素添加变量的方法
Java method to add variables for each element in an array
使用下面的 UML class 图,我试图将每个 Building
类型 Dwelling
和 return 的总和加起来 Village
getPopulation()
方法。我不确定如何继续编写 getPopulation()
方法。基本上,我想遍历建筑物数组并为实现住宅接口的每个建筑物调用 getPopulation 方法,但我不确定如何执行此操作。
我的 class 是:
住宅:
interface Dwelling {
int getNumberOfOccupants();
}
房子:
import javafx.scene.canvas.GraphicsContext;
import java.util.Scanner;
public class House extends Building implements Dwelling {
private final int occupants;
private final int bedrooms;
private 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: ");
String name = scan.nextLine();
System.out.println("Enter XPosition of the House: ");
int 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 int occupants;
private final int occupantsPerFloor;
private ApartmentBuilding(String name, double xPosition, int numberOfFloors, int occupantsPerFloor){
super(name, xPosition, numberOfFloors);
this.occupantsPerFloor = occupantsPerFloor;
}
public static ApartmentBuilding create() {
Scanner scan = new Scanner(System.in);
ApartmentBuilding a;
System.out.println("Enter name of the Apartment Building: ");
String name = scan.nextLine();
System.out.println("Enter XPosition of the Apartment Building: ");
int 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, xPosition, 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() {
occupants = numberOfFloors * occupantsPerFloor;
return occupants;
}
}
建筑物:
import javafx.scene.canvas.GraphicsContext;
public class Building implements Drawable {
private final String name;
private final double xPosition;
public Building(String name, double xPosition){
this.name = name;
this.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 Village{
public static final double Y_FLOOR = 300;
private int size;
private final String villageName;
private final Building[] buildings;
private Village(String villageName, int size){
this.size = size;
this.villageName = villageName;
this.buildings = new Building[size];
}
public static Village create() {
Village a;
Scanner scan = new Scanner(System.in);
System.out.println("Enter name of village: ");
String villageName = scan.nextLine();
int num = 0;
do {
System.out.println("Enter number of buildings: ");
num = scan.nextInt();
if (num <= 0)
System.out.println("Input error, cannot enter a negative or zero");
} while (num <=0);
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();
}
if (choice ==3){
a.buildings[i] = Store.create();
}
else {
System.out.println("Please enter a number between 1 and 3");
}
}
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;
}
}
从迭代建筑物开始。假设 Building
可以是 Dwelling
或 Store
我们将必须检查 Building
是否是 Dwelling
然后进行安全转换并使用Dwelling
的 getNumberOfOccupants
方法,并在我们继续时将它们添加到我们的总数中。
注意:此转换是安全的,因为我们在执行之前检查了建筑物是否 Dwelling
。
Village.java
public int getPopulation() {
int population = 0;
for (Building building : buildings) {
if (building instanceof Dwelling) {
Dwelling dwelling = (Dwelling) building;
population += dwelling.getNumberOfOccupants();
}
}
return population;
}
使用下面的 UML class 图,我试图将每个 Building
类型 Dwelling
和 return 的总和加起来 Village
getPopulation()
方法。我不确定如何继续编写 getPopulation()
方法。基本上,我想遍历建筑物数组并为实现住宅接口的每个建筑物调用 getPopulation 方法,但我不确定如何执行此操作。
我的 class 是:
住宅:
interface Dwelling {
int getNumberOfOccupants();
}
房子:
import javafx.scene.canvas.GraphicsContext;
import java.util.Scanner;
public class House extends Building implements Dwelling {
private final int occupants;
private final int bedrooms;
private 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: ");
String name = scan.nextLine();
System.out.println("Enter XPosition of the House: ");
int 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 int occupants;
private final int occupantsPerFloor;
private ApartmentBuilding(String name, double xPosition, int numberOfFloors, int occupantsPerFloor){
super(name, xPosition, numberOfFloors);
this.occupantsPerFloor = occupantsPerFloor;
}
public static ApartmentBuilding create() {
Scanner scan = new Scanner(System.in);
ApartmentBuilding a;
System.out.println("Enter name of the Apartment Building: ");
String name = scan.nextLine();
System.out.println("Enter XPosition of the Apartment Building: ");
int 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, xPosition, 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() {
occupants = numberOfFloors * occupantsPerFloor;
return occupants;
}
}
建筑物:
import javafx.scene.canvas.GraphicsContext;
public class Building implements Drawable {
private final String name;
private final double xPosition;
public Building(String name, double xPosition){
this.name = name;
this.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 Village{
public static final double Y_FLOOR = 300;
private int size;
private final String villageName;
private final Building[] buildings;
private Village(String villageName, int size){
this.size = size;
this.villageName = villageName;
this.buildings = new Building[size];
}
public static Village create() {
Village a;
Scanner scan = new Scanner(System.in);
System.out.println("Enter name of village: ");
String villageName = scan.nextLine();
int num = 0;
do {
System.out.println("Enter number of buildings: ");
num = scan.nextInt();
if (num <= 0)
System.out.println("Input error, cannot enter a negative or zero");
} while (num <=0);
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();
}
if (choice ==3){
a.buildings[i] = Store.create();
}
else {
System.out.println("Please enter a number between 1 and 3");
}
}
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;
}
}
从迭代建筑物开始。假设 Building
可以是 Dwelling
或 Store
我们将必须检查 Building
是否是 Dwelling
然后进行安全转换并使用Dwelling
的 getNumberOfOccupants
方法,并在我们继续时将它们添加到我们的总数中。
注意:此转换是安全的,因为我们在执行之前检查了建筑物是否 Dwelling
。
Village.java
public int getPopulation() {
int population = 0;
for (Building building : buildings) {
if (building instanceof Dwelling) {
Dwelling dwelling = (Dwelling) building;
population += dwelling.getNumberOfOccupants();
}
}
return population;
}