2014-03-12 40 views
-1

是 - 问题定义类乘客和TrainCoach和从String[]一个.DEFINE类Passenger具有的字段名(String),年龄(int),性别创建TrainCoach的对象(char:M/F),重量( int) 定义一个类TrainCoach具有领域Passenger[]乘客 你已经拿到了String[]作为input.Create给出的String[]作为输入TrainCoach对象。如何使用对象作为输入?

  • 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; 
    } 


} 
+0

在你的'numberOfChildren()'你为什么递增通过''i' 4'?和'totalWeight()'类似,你为什么用'2'增加'i'? – jbx

+0

numberOfPassengers:您想报告阵列中实际有多少乘客,而不是阵列长度(最大乘客数量)。 – keshlam

+0

我把它增加了2和4,因为年龄和体重反复出现在这个位置。 –

回答

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; 
} 
+0

非常感谢您的帮助。 –

+0

您的欢迎。但我建议你阅读所有评论和答案。 @joy回来了一个新的问题, –

+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); 
+0

感谢您的帮助。我明白了我做错了什么。 –

相关问题