2012-02-28 157 views
0

我有一个队列的数组列表(每个队都将拥有自己的卡车列表)。将项目添加到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 0: Fleet Number One 

但是,当我加入车队一号,然后按1菜单上再添加其他车队(命名为车队二号)和打印舰队名单,结果是:

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

这似乎是混淆了两个... ...,这进一步中断的程序,当我尝试添加卡车到船队,因为我吨不能选择“正确”的舰队。

请让我知道你是否需要我的其他代码。 我只需要这在舰队列表中正确添加和打印舰队:

private static ArrayList<Fleet> fleetCollection; 

谢谢:)所有帮助!

+0

你可以发布printFleets()方法的代码? – JProgrammer 2012-02-28 06:37:20

+0

对,对不起。我会缩进它。 – user1176922 2012-02-28 06:41:03

+1

嘿男人....你的问题在哪里? – gtiwari333 2012-02-28 07:14:14

回答

3

你可能在舰队static类中声明businessName,如果这样的话将其删除

+0

在这种情况下,'getBusinessName()'应该是** NOT ** static也是 – plucury 2012-02-28 06:45:24

+0

getBusinessName()的remove方法修饰符'static'' – 2012-02-28 06:46:04

+0

'fleetList'的remove方法修饰符'static' – 2012-02-28 06:48:52

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

+0

谢谢:)现在它返回船队正确,但我的addTruck )仍然破裂。 – user1176922 2012-02-28 06:59:35

3

你需要清楚地了解使用static

静态变量

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

静态方法

  • 它是一种其贝隆方法gs到类而不是对象(实例)
  • 静态方法只能访问静态数据。它不能访问非静态数据(实例变量)
  • 静态方法只能调用其他静态方法,无法从中调用非静态方法。
  • 静态方法可以直接通过类名来访问,并且不需要任何对象
  • 语法:反正
<class-name>.<method-name>
  • 静态方法不能引用“this”或“super”关键字

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

  • 2

    你有没有重写Fleet中的equals方法?如果是这样,这是不正确的,它可能是你奇怪的结果的原因

    +0

    您需要该类的实例才能调用非静态方法;像这样:Object a = new Object();一个方法(); – Tom 2012-02-28 07:03:03

    +0

    我应该为这个问题开一个新的问题吗?或者我应该删除以上所有内容,并在此发布新问题? – user1176922 2012-02-28 07:05:13