在FleetTUI.java中我有一个Fleets列表(每个舰队将拥有自己的Trucks列表)。
private static ArrayList<Fleet> fleetCollection;
在Fleet.java中,我有一个Truck对象列表。
ArrayList<Truck> fleetList;
在其构造函数中初始化。
public Fleet(String businessName){
this.businessName = businessName;
this.fleetList = new ArrayList<Truck>();
}
因此,每次我组建一支新舰队时,我都会制作一份卡车清单。
在FleetTUI.java中,我有一种方法可以将卡车添加到舰队中,之前制作:
public static void addTruck(){
printFleets();
System.out.println("Please enter the fleet number where this truck will be added:");
inputText = scan.nextLine();
int inputFleetId = Integer.parseInt(inputText);
System.out.println("Please enter the truck's horn sound:");
inputText = scan.nextLine();
String inputHorn = inputText;
System.out.println("Please enter the truck's fuel capactity:");
inputText = scan.nextLine();
int inputFuelCapacity = Integer.parseInt(inputText);
System.out.println("Please enter the amount of gas remaining in the tank:");
double inputGasRemaining = Double.parseDouble(scan.nextLine());
**Fleet.fleetList**.add(inputFleetId, new Truck(inputHorn, inputFuelCapacity, inputGasRemaining));
System.out.println("--- A truck that goes " + inputHorn + " with " + inputGasRemaining + " gallon(s) in a " + inputFuelCapacity + " gallon tank has been added to " + **fleetCollection.getBusinessName()** + "'s fleet ---" );
System.out.println("");
}
我有粗暴的地方,我收到错误。 错误是:
无法对非静态字段Fleet.fleetList
进行静态引用无法对Fleet类型中的非静态方法getBusinessName()进行静态引用
我不知道从我使用该方法创建的车队内部访问卡车列表的任何其他方式:
public static void createFleet(){
System.out.println("");
System.out.println("Please enter the name of the fleet.");
inputText = scan.nextLine();
fleetCollection.add(new Fleet(inputText));
printFleets();
System.out.println("");
System.out.println("--- Fleet: " + inputText + " added ---");
System.out.println("");
}
所以我猜,我的问题是: 我如何正确地将新卡车添加到卡车列表中,这是我刚刚使用createFleet()进行的舰队内部,它位于自己的车队集合中?
更新:谢谢:)你们真的帮帮我了!再一次!
答案 0 :(得分:2)
您的问题是,您正在创建static
方法,然后尝试访问non-static
变量,在这种情况下,这是fleetlist
。这将导致您显示的错误。
由于您使用的是构造函数和所有内容,因此无需调用方法static
。将其称为静态将允许在不需要构造对象的情况下调用该方法,这从我所看到的不是你想要的东西。
简而言之,通过从方法声明中删除static
关键字并通过使用已初始化的addTruck()
和createFleet()
来访问您的方法,从而使您的方法成为非静态方法{1}}对象。
另一方面,您可以将您的fleetlist声明为静态,如下所示:
Fleet
编辑:看到你的评论,你就是这样做的:
在Java中,封装对象变量以便更好地控制对此类变量的访问被认为是一种很好的做法,因此您可以在private static ArrayList<Truck> fleetList;
类中执行类似的操作:
Fleet
在private List<Truck> fleetList;
public Fleet(String businessName){
this.businessName = businessName;
this.fleetList = new ArrayList<Truck>();
}
public List<Truck> getFleetList()
{
return this.fleetList;
}
课程中,你可以这样做:
FleetUI
编辑2:要将卡车添加到阵列,您可以通过两种方式完成。我们假设对象private ArrayList<Fleet> fleetCollection;
...
for (Fleet fleet : this.fleetCollection)
{
for (Truck truck : fleet.getFleetList())
{
//Do something with your truck here
}
}
是您想要添加卡车的舰队。在您的fleet
课程中,您可以这样做:
FleetUI
另一个(在我看来,更好的方法)是在fleet.getFleetList().add(new Truck(...))
对象中使用addTruck
方法,如下所示:
fleet
答案 1 :(得分:1)
您正在致电
Fleet.fleetList.add()
来自静态方法addTruck的方法。
引用这样的成员是不好的做法:
Fleet.fleetList.add
你应该引入一些访问器方法来将卡车添加到你的flletList中 舰队班