2014-03-05 36 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

從基本示例開始。在班級之間交換數據。你將需要有相同的上下文,這可能是其他的錯誤。 –