如何使用对象作为输入?

时间:2014-03-12 16:20:35

标签: java object constructor

问题是 - 定义类Passenger和TrainCoach并从String[]创建一个TrainCoach对象。定义一个类Passenger,其中包含字段名称(String),年龄(int),性别( char:M / F),体重(int) 定义一个包含TrainCoach个乘客的班级Passenger[] 您已获得String[]作为输入。请在TrainCoach作为输入的情况下创建String[]对象。

  • public int numberOfPassengers():返回教练中的乘客数量。
  • public int numberOfChildren():返回教练中的孩子数。任何16岁以下的人都应被视为孩子。
  • public int totalWeight():返回教练中所有乘客的总重量。

我无法编写numberOfChildren()和totalweight()的逻辑。以下是我的尝试。请解释我做错了。

package Passenger;

 public class Passenger {
    String name;
    int age;
    char gender;
    int weight;  
    public Passenger(){}
        public Passenger(String data){
                String[] s=data.split(":");
                this.name=s[0];
                this.age=Integer.parseInt(s[1]);
                this.gender=s[2].charAt(0);
                this.weight=Integer.parseInt(s[3]);
        }
        public Passenger[] makePassenger(String[] input){
            Passenger[] passengers=new Passenger[input.length];
            for(int i=0;i<input.length;i++){
                passengers[i]=new Passenger(input[i]);
            }
            return passengers;
        }
}

package Passenger;

public class TrainCoach {
    Passenger[] passengers;
    public TrainCoach(){}
    public TrainCoach(Passenger[] passengers){
        this.passengers=passengers;
    }


    public static class PassengerTest{

        public static void main(String[] args){
            String[] str={"Amit Sharma:24:M:72","Rahul:12:M:55"};
            Passenger pass=new Passenger();
            Passenger[] passenger=pass.makePassenger(str);
            TrainCoach traincoach=new TrainCoach(passenger);
            int c=traincoach.numberOfPassengers();
            int d=traincoach.numberOfChildren();
            int b=traincoach.totalWeight();
            System.out.print(c+","+d+","+b);
        }
    }
    public int numberOfPassengers(){
        return this.passengers.length;
    }
    public int numberOfChildren(){
        int count=0;
        for(int i=0;i<passengers.length;i=i+4){
            if(i<16){
            count++;
            }
        }
        return count;
    }
    public int totalWeight(){
        int sum=0;
        for(int i=0;i<passengers.length;i=i+2){
            sum+=i;
        }
        return sum;
    }


}

2 个答案:

答案 0 :(得分:2)

您只是在进行计算时处理循环计数器。您需要查看Passenger个对象。以下是totalWeight()的修复方法,您可以将其作为修复numberOfChildren()的示例

public int totalWeight(){
    int sum=0;
    for(int i=0;i<passengers.length;i++) { // Use ++ (or += 1) instead of +2. You want to look at every passenger, not every other one.
        Passenger pass = passengers[i]; // Get the passenger at the ith position in the array
        if (pass != null) { // Avoid null pointer exceptions when the train isn't full
            sum+= pass.getWeight(); // Add that passenger's weight to the sum
        }
    }
    return sum;
}

您还需要将getWeight()方法添加到您的乘客班级。

发现这些错误的一个好方法是做我在这里所做的事情并对每一行用简单的英语描述该行的作用发表评论。这样可以很容易地发现算法中的错误。

您可能还希望将Passenger.makePassenger()方法设为静态,这样您就不需要Passenger来调用它。而不是:

Passenger pass=new Passenger();
Passenger[] passenger=pass.makePassenger(str);

你只需要这样做:

Passenger[] passengers = Passenger.makePassenger(str);

答案 1 :(得分:0)

public int numberOfChildren(){
    int count=0;
    for(int i=0;i<passengers.length;i++){
        if(passengers[i].age < 16){
            count++;
        }
    }
    return count;
}
public int totalWeight(){
    int sum=0;
    for(int i=0;i<passengers.length;i++){
        sum+=passengers[i].weight;
    }
    return sum;
}