Как я могу назвать класс из основного класса?

1
  • Определить класс Пассажир с именами полей (String), age (int), gender (char: M/F), weight (int)

  • Определить класс TrainCoach, имеющий поля Пассажиры [] пассажиры

  • Определите класс Train и функции в нем. В классе Train есть полевые тренеры Vector. Учитывая векторный вход, создайте объект Train, где каждая строка [] аналогична той, которая была указана в качестве входного сигнала для 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);
    }
}
Теги:
object
vector
constructor

1 ответ

4

Существует несколько проблем с кодом, который вы предоставили.

  1. Класс Passenger не имеет оператора пакета, но другие классы находятся в package Passenger. Из-за этого классы, ссылающиеся на Пассажира, фактически не должны компилироваться. Возможно, вы просто забыли оператор пакета при копировании/вставке кода в stackoverflow? В любом случае, чтобы исправить это, убедитесь, что Passenger имеет тот же пакет, что и другие классы.

    Обычно вы также можете решить эту проблему, импортировав класс Passenger в другие классы, ссылающиеся на него, но невозможно импортировать класс, когда он не имеет пакета, поэтому вам нужна эта инструкция пакета.

  2. Очень сложно, что у вас одно и то же имя для класса и пакета. Вы должны хотя бы назвать passenger пакета с нижним регистром "p" и классом " Passenger с верхним регистром "P". Это обычный стандарт Java-кода.

  3. Я не совсем уверен, что вы на самом деле пытаетесь сделать, но мне кажется, что вы пытаетесь выполнить класс Passenger; что-то вроде java Passenger. Это не сработает, поскольку в классе Passenger нет main метода. Какой класс вы используете в качестве точки входа, этот класс нуждается в main методе со следующей подписью:

    public static void main(String[] args)
    

    Также помните, что когда класс получает имя пакета, вам нужно будет указать имя пакета при выполнении; т.е. что-то вроде java passenger.Passenger. java passenger.Passenger.

Надеюсь, это поможет вам на этом пути.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню