0

我正在构建一个铁路模拟器,包括类模拟器、车站、火车、路线和乘客。我在将路线对象作为参数传递给火车对象时遇到问题 - 它一直显示为空。我已将我的代码作为解释我的问题的最佳方式。

import java.util.ArrayList;

public class Simulator {
int numStations;    
Route route1;
ArrayList<Station> stations;
ArrayList<Train> trains;
Route[] routes;

public static void main(String[] args) {

    //set up network
    Simulator sim = new Simulator();                
    ArrayList<Station> stations = new ArrayList<Station>();
    stations = sim.generateStations();
    Route[] routes;
    routes = sim.generateRoutes(stations);
    System.out.println("Route array " + routes);
    ArrayList<Train> trains = new ArrayList<Train>();
    trains = sim.generateTrains(routes);

    //start simulator
    sim.generatePassengers(stations);
    Train currentTrain = trains.get(0);
    System.out.println("current train " + currentTrain);
    //route null here
    System.out.println("Route of current train " + currentTrain.route);


}


public Route[] generateRoutes(ArrayList<Station> stations){
    //initialise routes between stations

    Station[] stationList1 = {stations.get(0), stations.get(1), stations.get(2), stations.get(3), stations.get(4), stations.get(5)};
    int[] stationDist1 = {200,100,200,300,200,300};
    Route route1 = new Route(true, stationList1, stationDist1);
    System.out.println("route1 " + route1);

    //make list of all routes
    Route[] routeList;  
    routeList = new Route[1];
    routeList[0] = route1;

    return routeList;
}

public ArrayList<Train> generateTrains(Route[] routes){
    //initialise trains
    ArrayList<Train> trainList = new ArrayList<Train>();
    trainList.add(new Train(routes[0], 100, 0, true, 5));
    trainList.add(new Train(routes[0], 100, 4, false, 10));

    System.out.println("first train in list " + trainList.get(0));
    System.out.println("first route in array " + routes[0]);
    //route is null here
    System.out.println("route of first train " + (trainList.get(0)).route);

    return trainList;
}
}

这是我的输出:

route1 路由@addbf1

路由数组 [LRoute;@42e816

数组 Route@addbf1 中的 Route1

列表中的第一列火车 Train@190d11

数组 Route@addbf1 中的第一条路线

首班车路线 null

当前列车 Train@190d11

当前列车路线 null

谁能解释我哪里出错了?

编辑:火车类声明:

public class Train {
Route route;
int capacity;
int recentLoc;
boolean forwards;
boolean atStation;
int speed;
Train currentTrain;
int timeAtStation;

//train constructor
public Train(Route r, int c, int i, boolean f, int s){
    r = route;
    c = capacity;
    i = recentLoc;
    f = forwards;
    s = speed;
    atStation = true;
    timeAtStation = 0;
}
4

5 回答 5

2

您没有为实例变量赋值。对象的默认值为空。在 Train 构造函数中将“r = route”更改为“route = r”(所有其他字段都相同)。

public class Train {
Route route;
int capacity;
int recentLoc;
boolean forwards;
boolean atStation;
int speed;
Train currentTrain;
int timeAtStation;

//train constructor
public Train(Route r, int c, int i, boolean f, int s){
    route = r;
    capacity = c;
    recentLoc = i;
    forwards = f;
    speed = s;
    atStation = true;
    timeAtStation = 0;
}
于 2012-10-23T09:47:16.820 回答
1
route = r; 
capacity = c; 

等等

于 2012-10-23T09:47:47.213 回答
0

你做错了作业。

r = route;

这意味着 的值route将被分配给r

将您的构造函数更改为以下内容:

public Train(Route r, int c, int i, boolean f, int s)
{     
     route = r;;     
     capacity = c;;     
     recentLoc = i;     
     forwards = f;     
     speed = s;     
     atStation = true;     
     timeAtStation = 0; 
} 
于 2012-10-23T09:50:25.153 回答
0

您的输出中有三个问题。

首先是当你想打印数组的内容时,你必须遍历它的元素,否则你只需要打印内存地址。为了帮助您解决 hava API 的问题,请使用以下方法:

Arrays.toString(Object[]);

同样的问题在您的 中Train,您没有覆盖该toString()方法,这就是 Java 打印它的地址的原因,因为这是它的默认行为。

尝试将此方法添加到您的路由类中,看看会发生什么,

@Override
public String toString(){
   return "This is message from rout"    
}

蚂蚁火车构造器中的最后一个

您将参数分配给变量。你应该反之亦然。

public Train(Route r, int c, int i, boolean f, int s){
    this.route = r;
    this.capacity = c;
    this.recentLoc = i;
    this.forwards = f;
    this.speed = s;
    this.atStation = true;
    this.timeAtStation = 0;
}
于 2012-10-23T09:48:58.287 回答
0

这些分配应该反过来,左边的东西是被分配的东西。

r = route;
c = capacity;
i = recentLoc;
f = forwards;
s = speed;

应该

 route = r;
   capacity = c;
   recentLoc = i;
    forwards = f;
    speed = s;
于 2012-10-23T09:49:13.097 回答