2012-04-24 70 views
3

我是新來的Java,我試圖通過一些問題,在那裏我有一個UML圖到Java代碼的轉換工作:我UML的圖像文檔 -UML圖到Java代碼

http://s1079.photobucket.com/albums/w513/user20121/?action=view&current=uml.jpg

我會告訴你我到目前爲止:

Q1:假設它具有以下構造函數:public Entry(String name)並且方法getSize是抽象的,則編寫Java Entry的Java版本。 答:

public abstract class Entry { 
    private String name; 

    public Entry(String name){ 
     this.name = name; 
    } 
    public String getName() 
    { 
     return name; 
    } 
    abstract long getSize(); 
} 

Q2:寫類文件的Java版本,假定它有這樣的構造: 公共文件(字符串名稱,長尺寸) 答:

public class File extends Entry { 
    private long size; 

    public File(String name, long size){ 
     super(name); 
     this.size = size; 
    } 

    public long getSize(){ 
     return size; 
    } 
} 

Q3:一個目錄包含一組文件和目錄。編寫Java版本的類目錄,假設它具有以下構造函數: public Directory(String name)和getSize方法返回目錄中所有文件的總大小及其所有子目錄的 (在此模型中大小爲目錄本身被忽略)。

答:這是我卡住的地方,我不知道該怎麼做getSize方法。有誰能告訴我,到目前爲止我所做的是否正確?同時也指出我對Q3的正確方向?

編輯:好吧,我已經嘗試了答案,但我真的不知道我在做什麼..

import java.util.ArrayList; 

public class Directory extends Entry { 

    ArrayList <Entry> entries = new ArrayList<Entry>(); 

    public Directory(String name) 
    { 
     super(name); 
    } 

    public long getSize(){ 
     long size; 
     for(int i=0;i<entries.size();i++) 
     { 
     size += //don't know what to put here? 
     } 
     return size; 
    } 
} 
+3

你在正確的方法。對於Q3,您需要將某個目錄與0個或更多個Entry類型對象相關聯。在Java中,這些關聯是通過集合來實現的,例如存儲關聯對象的ArrayList。 – Ozan 2012-04-24 16:59:04

+0

那麼我猜你的Directory類將包含Entry類型對象的集合(可能是ArrayList)。getSize方法將遍歷這些Entry(目錄和文件)對象,並總計大小(使用文件的getSize Mehtods)並返回總數。您應該有一個方法可以將文件和目錄添加到目錄中的文件集合類。 – scrappedcola 2012-04-24 17:02:23

+0

你幾乎明白了。當你使用Collections時,你可以使用Java的foreach符號:'(for entry entry:entries){...}'在括號內的entry中是當前迭代的Entry對象,你可以調用它的方法通常:''String name = entry.getName();'' – Ozan 2012-04-24 23:25:25

回答

1

您的Q1和Q2答案看起來很不錯。

關於Q3:

// A Directory is an Entry and can contain an arbitrary number of other Entry objects 
public class Directory extends Entry { 

    // you need a collection of Entry objects, like ArrayList<Entry> 
    // ArrayList<Entry> entries = ... 

    function getSize() { 
     long size; 
     // now we calculate the sum of all sizes 
     // we do not care if the entries are directories or files 
     // the respective getSize() methods will automatically do the "right thing" 
     // therefore: you iterate through each entry and call the getSize() method 
     // all sizes are summed up 
     return size; 
    } 

} 
+0

謝謝,我會給它一個去,發佈我得到 – user1354270 2012-04-24 17:57:05

0

如前所述,前兩項是正確的。

下面是我將如何實現您的目錄類。

import java.util.ArrayList; 

public class Directory extends Entry{ 


ArrayList <Entry> entries = new ArrayList<Entry>(); 

public Directory(String name) 
{ 
    super(name); 
} 

public long getSize(){ 
    long size = 0; 
    for(int i=0;i<entries.size();i++) 
    { 
    //Probably something like this 
    size += entries.get(i).getSize(); 
    } 
    return size; 
} 
} 

如果您的目錄包含其他目錄,將調用子目錄的getSize以獲取其大小。

你必須補充一點,你不能一個目錄添加到自身的控制,或者你將有一個無限循環:)

的另一種選擇是

public long getSize(){ 
    long size = 0; 
    for(Entry e : entries) 
    { 
    //Probably something like this 
    size += e.getSize(); 
    } 
    return size; 
}