繁体   English   中英

将项目添加到ArrayList

[英]Adding item to an ArrayList

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

我有一个与建设者的舰队班

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并打印结果时,我得到:

Fleet 0: Fleet Number One

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

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

这似乎使两者混淆了……当我尝试向车队中添加卡车时,这进一步破坏了程序,因为它无法选择“正确的”车队。

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

private static ArrayList<Fleet> fleetCollection;

谢谢:)提供的所有帮助!

您可能已在Fleet类中将businessName声明为static ,如果是,则将其删除

您需要清楚使用static

静态变量

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

静态方法

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

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

您是否在Fleet中重写了equals方法? 如果是这样,那是不正确的,那可能是导致您结果怪异的原因

我对您的程序做了一些小的修改以使其变得简单。

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()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM