2014-03-05 33 views
1

基本上,我有一个类在那里我有我的阵列中,这就是这个样子如何在另一个类中打印数组?

public final class DepotDatabase { 
    private Driver[] arrayDrivers; 

    public DepotDatabase() { 
     arrayDrivers = new Driver[4]; 

    arrayDrivers[0] = new Driver(1234, 1234, 0); // sample driver 
    arrayDrivers[1] = new Driver(4444, 4444, 0); // sample driver 
    arrayDrivers[2] = new Driver(1337, 1337, 1); // sample manager 
    arrayDrivers[3] = new Driver(1234, 1234, 0); // sample driver 

} 

,我想打印这个阵列中的另一个类,我没有设置阵列中的另一个类

public Driver(int username, int password, int managerCheck) { 
    this.username = username; 
    this.password = password; 
    this.managerCheck = managerCheck; 
} 

,但现在我希望能够打印出所有的驱动程序,但在另一个类将被称为ViewDrivers或类似

+1

什么是您所遇到的问题?你不能为阵列提供一个'public'访问器吗? –

+0

还是公共的'getDriversArray()'方法? –

+0

阅读答案和评论我从@萨拉 – user3383541

回答

1

您可以在DepotDatabase内部创建一个方法来打印该数组,然后通过和调用print方法创建一个对象。

public final class DepotDatabase { 
private Driver[] arrayDrivers; 

public void printArray() { 
    for (int i = 0; i < arrayDrivers.length; i++) { 
     Driver d = arrayDrivers[i]; 

     System.out.println("Username : " + d.getUsername()); 
     System.out.println("Password : " + d.getPassword()); 
     System.out.println(" Manager Check: " + d.getManagerCheck()); 

    } 
} 

的从测试类,你可以这样做:

public void execute() { 
    DepotDatabase ddb = new DepotDatabase(); 
    ddb.printArray(); 
} 
+0

我将如何打印出实际的数组?因为:DepotDatabase ddb = new DepotDatabase(); ddb.printArray();不打印任何东西 – user3383541

+0

哦,是的,它没有打印任何东西,直到你添加了负责打印实际数组的代码,我已经给你添加了一条评论来添加该代码,无论如何,你想让我给你看看吗如何遍历数组并打印其值? – Salah

+0

这会帮助我很多。只是所以你知道,在我想打印数组的类中,代码放在public void execute()中,所以它会在主类中工作,我知道它可能听起来很奇怪。我必须使用“屏幕”来打印这样的内容。screen.displayMessageLine(“”); – user3383541

1

东西这就是为什么你需要有干将setter。你应该有:

public Driver[] getDrivers() { 
    return arrayDrivers; 
} 

而在另一个类中,你只需调用它(并打印它或其他)。

阅读this tutorial

+0

得到我必须设置它在哪里我有数组? – user3383541

+0

@ user3383541请花点时间想一想,我相信你会知道答案的。提示:是:) – Maroun

0

如果您打算打印您阵列中显示您创建访问它的类。

Java的常见模式是使用“get plus名称关闭属性”,getDrivers()您还应该避免类名,因为它可能会因应用程序寿命而改变。

public final class DepotDatabase { 

    //your code 

    public Driver[] getDrivers() { 
     return this.arrayDrivers; 
    } 

} 

下一个要回答的问题是返回整个数组是好主意。当你像上面一样返回它时,你会放松对它的控制。每个调用该方法的人都可以更改它的内容。

为了防止这种情况,你应该使用所谓的Defensive copying

public Driver[] getDrivers() { 
     return Arrays.copyOf(arrayDrivers, arrayDrivers.length); 
    } 

然后人将得到它的一个副本,一个不会伤害你的类。

与此相关的问题是,您的班级的消费者将不得不每次都调用此方法以获取新的汽车列表。

为了解决这个问题,你可能需要用户[收集框架],其中数组,而不是你冷定义:

List<Driver> drivers new ArrayList<>();

,并提供司机[不变]列表

public Iterable<Driver> getDrivers() { 
      return java.util.Collections.unmodifiableList(drivers); 
    } 

Iterable是一个接口,它允许你获得一个类的列表消费者有可能遍历它的interator。如果你婉让他检查列表包含一些驱动程序,您可以设置返回类型为Collection


class Storage { 

     private String items[] = new String[10]; 

     public String[] getItems() { 
      return Arrays.copyOf(items, items.length); 
     } 
    } 

    class Store { 

     Storage storage = new Storage(); 

     private void printStorage() { 

      String[] items = storage.getItems(); 

      for (String item : items) { 

      } 
     } 
    } 
+0

我已经用类的上面的代码与数组返回Arrays.copyOf(arrayDrivers,arrayDrivers.length);,但我在另一个班级中调用此方法时遇到问题。也许我无法理解它,而且我确实在要打印数组的类中有Defensive Copying。 – user3383541

+0

从基本示例开始。在班级之间交换数据。你将需要有相同的上下文,这可能是其他的错误。 –