繁体   English   中英

如何从主班级上课?

[英]How can I call a class from main class?

  • 定义一个具有以下字段名称的旅客:字段(字符串),年龄(整数),性别(字符:M / F),体重(整数)

  • 定义一个类别为TrainCoach的字段,该字段具有Passenger [] passenger

  • 定义类Train及其中的功能。 培训班有Vector教练。 给定一个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. 您的Passenger类没有包装说明,但其他分类位于package Passenger 因此,引用旅客的类实际上不应编译。 也许您只是在将代码复制/粘贴到stackoverflow时忘记了package语句? 无论如何,要解决此问题,请确保Passenger具有与其他舱位相同的包裹。

    通常,您也可以通过在引用该类的其他类中导入Passenger类来解决此问题,但是如果没有包,则无法导入该类,因此需要该package语句。

  2. 您对类和包使用相同的名称感到非常困惑。 你至少应该软件包命名为passenger用小写“p”和类Passenger用大写“P”。 这是正常的Java代码标准。

  3. 我不太确定您实际上要做什么,但是在我看来,您正在尝试执行Passenger类。 java Passenger类的东西。 由于乘客类中没有main方法,因此这将失败。 无论您使用哪个类作为入口点,该类都需要一个具有以下签名的main方法:

     public static void main(String[] args) 

    另外,请记住,当类获得程序包名称时,在执行时将需要包括程序包名称。 即类似java passenger.Passenger东西。

希望这对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM