将项添加到ArrayList

时间:2012-02-28 06:29:38

标签: java arraylist

我有一个Fleets的阵列列表(每个舰队将拥有自己的卡车列表)。

我有一个带有构造函数的舰队类

public Fleet(String businessName){
    this.businessName = businessName;
    this.fleetList = new ArrayList<Truck>();
}

所以:

在我的TUI中,我有一个名为createFleet的辅助方法。当用户在菜单上按1时,它会询问他的业务名称,然后创建一个名为该队列的车队。那个方法是:

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("");
}

我的问题是,当我添加一个舰队时,打印结果我得到:

Fleet 0: Fleet Number One

但是当我添加第一舰队时,再次按下菜单上的1以添加另一个舰队(名为舰队编号二)并打印车队列表,结果是:

Fleet 0: Fleet Number Two
Fleet 1: Fleet Number Two

这似乎令两人感到困惑......当我试图将卡车添加到舰队时,这进一步打破了程序,因为它无法选择“正确”的舰队。

如果您需要我的任何其他代码,请告诉我。 我只需要这个就可以在车队列表中正确添加和打印车队:

private static ArrayList<Fleet> fleetCollection;

谢谢:)获取所有帮助!

4 个答案:

答案 0 :(得分:3)

您可能在Fleet类businessName中声明了static,如果是,请将其删除

答案 1 :(得分:3)

您需要明确使用static

静态变量

  • 它是属于类的变量而不是对象(实例)
  • 静态变量仅在执行开始时初始化一次。在初始化任何实例变量
  • 之前,将首先初始化这些变量
  • 要由班级的所有实例共享的单个副本
  • 静态变量可以由类名直接访问,不需要任何对象
  • 语法:<class-name>.<variable-name>

静态方法

  • 这是一个属于类的方法,而不属于对象(实例)
  • 静态方法只能访问静态数据。它无法访问非静态数据(实例变量)
  • 静态方法只能调用其他静态方法,不能从中调用非静态方法。
  • 静态方法可以直接通过类名访问,不需要任何对象
  • 语法:<class-name>.<method-name>
  • 静态方法无论如何都不能引用“this”或“super”关键字

src:http://www.javatutorialhub.com/java-static-variable-methods.html

答案 2 :(得分:2)

你是否已经覆盖了舰队中的equals方法?如果是这样且它不正确,可能是你奇怪结果的原因

答案 3 :(得分:1)

我对您的程序进行了少量修改,以简化程序。

class Fleet{
String businessName;
public Fleet(String businessName)
{ this.businessName = businessName;}
public String getBusinessName()
{
    return businessName;
}
}

public class T {
private static ArrayList<Fleet> fleetCollection = new ArrayList<Fleet>();

    public static void main(String[] args) 
    {
        createFleet("A");
         printFleets();
         createFleet("B");
        printFleets();
    }
     public static void createFleet(String name){
    System.out.println("");
    fleetCollection.add(new Fleet(name));
}
public static void printFleets(){
    Iterator i = fleetCollection.iterator();
    Fleet f;
    while(i.hasNext())
    {
        f = (Fleet)i.next();
        System.out.println(f.getBusinessName());
    }
}

}

按预期打印。

A

A
B

在“businessName”字段中检查您的访问修饰符。它不应该是静态的。还要检查printFleets()方法。