我如何从主类中调用一个类?

时间:2014-03-12 23:05:01

标签: java object vector constructor

  • 定义一个类Passenger,其字段名称为(String),age(int),gender(char:M / F),weight(int)

  • 定义一个具有Passenger []乘客

  • 字段的TrainCoach类
  • 定义类Train及其中的函数。班级火车有矢量教练。 给定Vector作为输入,创建对象Train,其中每个String []类似于上面作为TrainCoach输入的那个。

我在主类中调用Train类的函数时遇到了麻烦?如何调用这些方法?

乘客等级:

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


}

TrainCoach课程:

package Passenger;


public class TrainCoach {
    Passenger[] passengers;
    static char gender;
    public TrainCoach(){}
    public TrainCoach(Passenger[] passengers){
        this.passengers=passengers;
    }
    public TrainCoach(String[] data){
        Passenger[] passengers=new Passenger[data.length];
        for(int i=0;i<data.length;i++){
            passengers[i]=new Passenger(data[i]);
        }
        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();
            int a=traincoach.numberOf(gender);
            System.out.print(c+","+d+","+b+","+a);
        }
    }
    public int numberOfPassengers(){
        return this.passengers.length;
    }
    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;
    }
    public int numberOf(char gender){
        int count=0;
        for(int i=0;i<passengers.length;i++){
            if(passengers[i].gender=='M'){
                count++;
            }
            else if(passengers[i].gender=='F'){
                count++;
            }
        }
        return count;
    }
}

培训课程:

package Passenger;

import java.util.Vector;

public class Train{

    Vector<TrainCoach>coaches;

    public Train(){}
    public Train(Vector<String[]> data){
        for(int i=0;i<data.size();i++){
            coaches.addElement(new TrainCoach(data.elementAt(i)));
        }
        this.coaches=coaches;
    }
    public int numberOfPassengers(){
        int numOfPassengersInTrain = 0;
        for(int i = 0; i < coaches.size(); i++){
                numOfPassengersInTrain += this.coaches.elementAt(i).numberOfPassengers();
        }
        return(numOfPassengersInTrain);
    }
}

1 个答案:

答案 0 :(得分:4)

您提供的代码存在一些问题。

  1. 您的Passenger类没有包语句,但其他类位于package Passenger。因此,引用Passenger的类实际上不应该编译。也许你只是在将代码复制/粘贴到stackoverflow时忘记了package语句?无论如何,为了解决这个问题,请确保Passenger与其他类具有相同的包。

    通常你也可以通过在引用它的其他类中导入Passenger类来解决这个问题,但是当它没有包时导入类是不可能的,所以你需要那个包语句。

  2. 您对类和包具有相同的名称是非常令人困惑的。您应该至少将包passenger命名为小写&#39; p&#39;以及具有大写&#39; P&#39;的班级Passenger。这是正常的Java代码标准。

  3. 我不太确定你真正想要做什么,但在我看来,你正试图执行Passenger类;像java Passenger这样的东西。这将失败,因为Passenger类中没有main方法。无论您使用哪个类作为入口点,该类都需要具有以下签名的main方法:

    public static void main(String[] args)
    

    另外,请记住,当类获取包名时,您需要在执行时包含包名称;就像java passenger.Passenger之类的东西。

  4. 希望这可以帮助你。