JAVA can';t在arrayList中添加多个对象
我正在尝试添加多个站点(一个站点有变量(“Station stop”和int Numberliers”)到一个带有相应编号的循环路线JAVA can';t在arrayList中添加多个对象,java,Java,我正在尝试添加多个站点(一个站点有变量(“Station stop”和int Numberliers”)到一个带有相应编号的循环路线 private int askStation( ) { Station po=null; int id; consola.println("Id Station?"); id = consola.readInt(); po=station.getStation(id);
private int askStation( ) {
Station po=null;
int id;
consola.println("Id Station?");
id = consola.readInt();
po=station.getStation(id);
if( (po==null)){
consola.println("Unknown Station" );
consola.readLine();
return 0;
}
consola.print( "How many litters ");
int nLiters = consola.readInt();
if (po.checksLiters(nLiters)==false)
consola.println("Invalid Quantity");
else {
//ADD STOP TO THE ROUTE
Stop s=new Stop(po,nLiters);
Route r=new Route(1);
r.addStop(s);
consola.println(r.toString());
}
consola.readLine();
consola.clear();
}
此循环执行了x次,但只填充了arrayList一次,我使用了consola.println(i.toString());
和for循环来打印数组中的数据,无论我运行此脚本多少次,它都只添加我最后键入的一个。这是我的类路径:
public class Route {
private int start;
private arrayList<Stop>stops=new arrayList <Stop>();
public Route(int start) {
this.start = start;
}
public void addStop( Stop s ){
stops.add(s);
}
public ArrayList <Stop> getStops(){
return stops;
}
公共类路由{
私人int启动;
private arrayListstops=new arrayList();
公共路线(int start){
this.start=start;
}
公共无效添加站点(站点s){
停止。添加(s);
}
公共阵列列表getStops(){
返回站;
}
我做错了什么?是add方法?还是askStation方法循环中对象的初始化
Stop s=new Stop(po,nLiters);
Route r=new Route(1);
r.addStop(s);
您每次都创建一个新的路线,然后向新路线添加一个站点,因此您会丢失旧的站点。为了避免这种情况,请将Route设置为方法之外的字段,而不是执行此操作
Route r = new Route();
而且
arrayList<Stop>
arrayList
应该是
ArrayList<Stop>
ArrayList
您每次都创建一个新的路线,然后向新路线添加一个站点,因此您会丢失旧的站点。为了避免这种情况,请将Route设置为方法之外的字段,而不是执行此操作
Route r = new Route();
而且
arrayList<Stop>
arrayList
应该是
ArrayList<Stop>
ArrayList
这是指每次添加某些内容时,您都在创建一个新路由。
添加@Andy Turner对我来说另一个重要的注意事项是,您如何知道它只添加一个站点
,因为变量路由r
仅存在于else
的范围内,而此循环没有lo操作。这就是它只添加一次的原因,或者是您删除了可能很重要的代码。@KevinEsche我怀疑consola.println(I.toString())
是一个打字错误-应该使用r
而不是i
@AndyTurner这是对的,但是在这段代码的哪一点上,他知道他在列表中只有一个站
?路线r
不能重复使用,他也不会在其他地方使用它然后打印信息。对我来说,他不应该这样做首先检查Route
的实例(尽管有调试器)添加@Andy Turner对我来说另一个重要的注意事项是,你怎么知道它只添加了一个站
,因为变量路线r
只存在于其他的范围内,而这个循环中没有循环您的代码。这可能是它只添加一次的原因,也可能是您删除了可能很重要的代码。@KevinEsche我怀疑consola.println(I.toString())
是一个打字错误-应该使用r
而不是i
@AndyTurner这是对的,但是在这段代码的哪一点上,他知道他在列表中只有一个站
?路线r
不能重复使用,他也不会在其他地方使用它然后打印信息。对我来说,他不应该这样做首先要检查Route
的实例(尽管有调试器)。但要做到这一点,我必须在RouteneVerind类中有一个空构造函数,因为开始总是一样的,所以没有区别,它可以工作,非常感谢:)但要做到这一点,我必须在routeNevermind类中有一个空构造函数,因为开始总是一样的,所以没有区别,它可以工作,非常感谢:)