我正在和朋友一起做一個專案;我們正在嘗試創建一個飛機專案,使用乘客的乘客類、添加乘客和創建飛機的飛機類以及駕駛員類。我們遇到了一個問題,當我們將所有乘客添加到飛機上并列印飛機的所有詳細資訊時,列印的值僅捕獲最后一位乘客的資訊。我們正在努力為每位乘客提供此服務。這是代碼:
乘客
public class Passenger {
private String name;
private int birthYear;
private double weight;
private char gender;
private int numCarryOn;
//Default constructor
public Passenger(){
name = "";
birthYear = 1900;
weight = 0.0;
gender = 'u';
numCarryOn = 0;
}
//Alt default constructor
public Passenger(String newName, int newBirthYear, double newWeight, char newGend, int newNumCarryOn){
this.setName(newName);
this.setBirthYear(newBirthYear);
this.setWeight(newWeight);
this.setGender(newGend);
this.setNumCarryOn(newNumCarryOn);
}
//Calculate age
public int calculateAge(int currentYear){
int age = 0;
if (currentYear < birthYear){
return -1;
}
else {
age = currentYear - birthYear;
}
return age;
}
//Gain weight
public void gainWeight(){
weight = 1;
}
//Gain weight based on input
public void gainWeight(double pounds){
if (weight > 0){
weight = weight pounds;
}
}
//Get birthYear
public int getBirthYear(){
return birthYear;
}
//Get gender
public char getGender(){
return gender;
}
//Get name
public String getName(){
return name;
}
//Get weight
public double getWeight(){
return weight;
}
//Get numCarryOn
public int getNumCarryOn(){
return numCarryOn;
}
//isFemale
public boolean isFemale(){
if (gender == 'f'){
return true;
}
else {
return false;
}
}
//isMale
public boolean isMale(){
if (gender == 'm'){
return true;
}
else {
return false;
}
}
//loseWeight
public void loseWeight(){
if (weight > 0){
weight -= 1;
}
}
//lose weight by value
public void loseWeight(double weight2lose){
if (weight - weight2lose >= 0){
weight -= weight2lose;
}
}
//print
public void printDetails(){
System.out.printf("Name: s | Year of Birth: M | Weight: .2f | Gender: %c | NumCarryOn: -\n", name, birthYear, weight, gender, numCarryOn);
}
//setGender
public void setGender(char newGender){
if (newGender == 'f' || newGender == 'm') {
this.gender = newGender;
} else {
this.gender = 'u';
}
}
//setName
public void setName(String newName){
name = newName;
}
//setBirthYear
public void setBirthYear(int newBY){
birthYear = newBY;
}
//setWeight
public void setWeight(double newWeight){
if (newWeight < 0){
weight = -1;
}
else {
weight = newWeight;
}
}
//setNumCarryOn
public void setNumCarryOn(int newNumCarryOn){
if (newNumCarryOn < 0){
numCarryOn = 0;
}
else if (newNumCarryOn > 2){
numCarryOn = 2;
}
else {
numCarryOn = newNumCarryOn;
}
}
}
飛機
public class Airplane {
private Passenger[] passengers;
private String airplaneName;
private int numPassengers;
public int count = 0;
//default constructor
public Airplane(){
airplaneName = "";
passengers = new Passenger[100];
numPassengers = 0;
}
//default constructor with String input
public Airplane(String otherairplaneName){
airplaneName = otherairplaneName;
passengers = new Passenger[100];
numPassengers = 0;
}
//default constructor with int input
public Airplane(int otherArraySize){
airplaneName = "";
if (otherArraySize < 0){
otherArraySize = 0;
}
passengers = new Passenger[otherArraySize];
numPassengers = 0;
}
//default constructor with String and int input
public Airplane(String otherAirplaneName, int otherArraySize){
airplaneName = otherAirplaneName;
if (otherArraySize < 0){
otherArraySize = 0;
}
passengers = new Passenger[otherArraySize];
numPassengers = 0;
}
//add a passenger
public void addPassenger(Passenger a){
for (int i = 0; i < passengers.length; i ){
passengers[i] = a;
}
}
//resize array for new passengers
private void resizePassengerArray(){
passengers = new Passenger[passengers.length * 2];
}
//get a passenger
public Passenger getPassenger(int passengerIndex){
return passengers[passengerIndex];
}
//getNumPassengers
public int getNumPassengers() {
return count;
}
//getFirstPassenger
public Passenger getFirstPassenger(){
return passengers[0];
}
//getLastPassenger
public Passenger getLastPassenger(){
return passengers[passengers.length - 1];
}
//getPassengers**
public Passenger[] getPassengers(){
return passengers;
}
//setAirplaneName
public void setAirplaneName(String newAirplaneName){
airplaneName = newAirplaneName;
}
//printAllDetails
public void printAllDetails(){
System.out.printf("AirplaneName: s | Number of Passengers: M | Airplane Size: M\n", airplaneName, count, passengers.length);
for (int i = 0; i < count; i ){
System.out.printf("Name: s | Year of Birth: M | Weight: .2f | Gender: %c\n", passengers[i].getName(), passengers[i].getBirthYear(), passengers[i].getWeight(), passengers[i].getGender());
}
}
//removePassenger
public Passenger removePassenger(int passengerIndex){
if (passengerIndex != passengers.length - 1){
for (int i = passengerIndex; i < passengers.length - 1; i ){
passengers[i] = passengers[i 1];
}
}
return passengers[passengerIndex];
}
//remove all passengers
public void removeAllPassengers(){
passengers = new Passenger[100];
}
//total weight passengers
public double getTotalWeightOfAllPassengers(){
double weight = 0.0;
for (int i = 0; i < passengers.length; i ){
weight = passengers[i].getWeight();
}
return weight;
}
//avg weight passengers
public double getAverageWeightOfAllPassengers(){
double avg = this.getTotalWeightOfAllPassengers() / numPassengers;
return avg;
}
//num elements above weight
public int getNumberOfPassengersAboveWeight(double weight){
int sum = 0;
for (int i = 0; i < passengers.length; i ){
if (passengers[i].getWeight() > weight){
sum = 1;
}
}
return sum;
}
//num elements below weight
public int getNumberOfPassengersBelowWeight(double weight){
int sum = 0;
for (int i = 0; i < passengers.length; i ){
if (passengers[i].getWeight() < weight){
sum = 1;
}
}
return sum;
}
//increase weight of passengers
public void increaseWeightOfAllPassengers(){
for (int i = 0; i < passengers.length; i ){
passengers[i].gainWeight();
}
}
//increase weight of passengers with weight input
public void increaseWeightOfAllPassengers(double increaseAmount){
for (int i = 0; i < passengers.length; i ){
passengers[i].gainWeight(increaseAmount);
}
}
}
司機
public class RunAirplane {
public static void main(String[] args) {
Airplane a1 = new Airplane("Flight 1", 100);
Passenger p1 = new Passenger("Albert", 1879, 198.5, 'm', 2);
Passenger p2 = new Passenger("Grace", 1906, 105, 'f', 1);
Passenger p3 = new Passenger("Tim", 1955, 216.3, 'm', 2);
Passenger p4 = new Passenger("Steve", 1955, 160, 'm', 2);
Passenger p5 = new Passenger("Sergey", 1973, 165.35, 'm', 1);
a1.addPassenger(p1);
a1.count = 1;
a1.addPassenger(p2);
a1.count = 1;
a1.addPassenger(p3);
a1.count = 1;
a1.addPassenger(p4);
a1.count = 1;
a1.addPassenger(p5);
a1.count = 1;
a1.printAllDetails();
//How it should work starting with name
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
這是錯誤代碼的螢屏截圖: https ://imgur.com/TGc0FQa
uj5u.com熱心網友回復:
該addPassenger()方法覆寫陣列中的每個元素:
public void addPassenger(Passenger a){
for (int i = 0; i < passengers.length; i ){
passengers[i] = a;
}
}
它應該只在下一個可用索引處設定一個,恰好是count:
public void addPassenger(Passenger a){
passengers[count ] = a;
}
這也為您提供了更好的封裝,因為您不必在count外部公開和遞增。
uj5u.com熱心網友回復:
這
public void addPassenger(Passenger a){
for (int i = 0; i < passengers.length; i ){
passengers[i] = a;
}
}
每次都產生一個載滿同一個乘客的乘客陣列。也許這可以解決問題。
public void addPassenger(Passenger a){
for (int i = 0; i < passengers.length; i ){
if((passengers[i-1] !=null)&&((passengers[i] ==null))
{ passengers[i] = a; }
}
}
更好的實作可能是ArrayList
飛機
public class Airplane {
private ArrayList<Passenger> passengers;
private String airplaneName;
private int numPassengers;
public int count = 0;
//default constructor
public Airplane(){
airplaneName = "";
passengers = new ArrayList();
numPassengers = 0;
}
//default constructor with String input
public Airplane(String otherairplaneName){
airplaneName = otherairplaneName;
passengers = new ArrayList();
numPassengers = 0;
}
//default constructor with String and int input
public Airplane(String otherAirplaneName){
airplaneName = otherAirplaneName;
passengers = new ArrayList();
numPassengers = 0;
}
//add a passenger
public void addPassenger(Passenger a){
passengers.add(a);
}
//get a passenger
public Passenger getPassenger(int passengerIndex){
return passengers[passengerIndex];
}
//getNumPassengers
public int getNumPassengers() {
return count;
}
//getFirstPassenger
public Passenger getFirstPassenger(){
return passengers.get(0);
}
//getLastPassenger
public Passenger getLastPassenger(){
return passengers.get(passengers.size() - 1);
}
//getPassengers**
public ArrayList<Passenger> getPassengers(){
return passengers;
}
//setAirplaneName
public void setAirplaneName(String newAirplaneName){
airplaneName = newAirplaneName;
}
//printAllDetails
public void printAllDetails(){
System.out.printf("AirplaneName: s | Number of Passengers: M | Airplane Size: M\n", airplaneName, count, passengers.size());
for (int i = 0; i < count; i ){
System.out.printf("Name: s | Year of Birth: M | Weight: .2f | Gender: %c\n", passengers.get(i).getName(), passengers[i].get(i).getBirthYear(), passengers[i].get(i).getWeight(), passengers[i].get(i).getGender());
}
}
//removePassenger
public Passenger removePassenger(int passengerIndex){
passengers.remove(passengerIndex);
return passengers.get(passengerIndex);
}
//remove all passengers
public void removeAllPassengers(){
passengers = new ArrayList();
}
//total weight passengers
public double getTotalWeightOfAllPassengers(){
double weight = 0.0;
for (int i = 0; i < passengers.size(); i ){
weight = passengers.get(i).getWeight();
}
return weight;
}
//avg weight passengers
public double getAverageWeightOfAllPassengers(){
double avg = this.getTotalWeightOfAllPassengers() / numPassengers;
return avg;
}
//num elements above weight
public int getNumberOfPassengersAboveWeight(double weight){
int sum = 0;
for (int i = 0; i < passengers.size(); i ){
if (passengers.get(i).getWeight() > weight){
sum = 1;
}
}
return sum;
}
//num elements below weight
public int getNumberOfPassengersBelowWeight(double weight){
int sum = 0;
for (int i = 0; i < passengers.size(); i ){
if (passengers.get(i).getWeight() < weight){
sum = 1;
}
}
return sum;
}
//increase weight of passengers
public void increaseWeightOfAllPassengers(){
for (int i = 0; i < passengers.size(); i ){
passengers.get(i).gainWeight();
}
}
//increase weight of passengers with weight input
public void increaseWeightOfAllPassengers(double increaseAmount){
for (int i = 0; i < passengers.size(); i ){
passengers.get(i).gainWeight(increaseAmount);
}
}
}
uj5u.com熱心網友回復:
問題出在方法addPassenger上。您總是替換第一個元素。
您可以通過以下方式修復:
public void addPassenger(Passenger a){
passengers[count] = a;
count
}
為了更好地實施,您可以洗掉count并使用numPassengers.
因此方法變為:
public void addPassenger(Passenger a){
passengers[numPassengers] = a;
numPassengers
}
和主要課程:
public class RunAirplane {
public static void main(String[] args) {
Airplane a1 = new Airplane("Flight 1", 100);
Passenger p1 = new Passenger("Albert", 1879, 198.5, 'm', 2);
Passenger p2 = new Passenger("Grace", 1906, 105, 'f', 1);
Passenger p3 = new Passenger("Tim", 1955, 216.3, 'm', 2);
Passenger p4 = new Passenger("Steve", 1955, 160, 'm', 2);
Passenger p5 = new Passenger("Sergey", 1973, 165.35, 'm', 1);
a1.addPassenger(p1);
a1.addPassenger(p2);
a1.addPassenger(p3);
a1.addPassenger(p4);
a1.addPassenger(p5);
a1.printAllDetails();
//How it should work starting with name
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
為了獲得最佳實施,您可以使用List欄位代替陣列passengers:
private List<Passenger> passengers;
public Airplane(){
airplaneName = "";
passengers = new ArrayList<>();
}
public void addPassenger(Passenger a){
passengers.add(a);
}
您可以洗掉numPassengers并使用size:
public int getNumPassengers() {
return passengers.size();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436782.html
下一篇:NPM啟動問題(反應)
