2017-11-11 127 views
-3
import java.util.ArrayList; 

public class Folder extends AbstractFile 
{ 
//Replace previous ArrayLists with a single 
//ArrayList of AbstractFile references 
private ArrayList<AbstractFile> files = new ArrayList(); 
     AbstractFile abstractfile; 
/** 
* Constructor for objects of class Folder 
*/ 
public Folder(String name) 
{ 
    super(); 
    this.name = name; 
} 
// replace previous add methods 
// with a single add(AbstractFile fileObject) method 
public boolean add(AbstractFile fileObject) 
{ 
    return files.add(fileObject); 
} 
@Override 
public int size() 
{ 
    int size =0; // size holds the running total 
    for (AbstractFile file : files){ // for each AbsFile ref 
     size+=file.size(); //call size() and update the running total 
    } 
    return size; // return the final value 
} 


@Override 
public int getNumFiles(){ 
    int numFiles = 0; 
    for(AbstractFile file: files) 
    { 
     numFiles += file.getNumFiles(); 


    } 

    return numFiles;// default value 
} 
@Override 
public int getNumFolders(){ 
    int numFolders = 0; 

    // for(AbstractFile file: files) 
    // { 
     // if(file instanceof Folder) 
     // { 
     // numFolders += file.getNumFolders(); 
    // } 

    // } 
    // return numFolders;// default value 
    for (Object e : files) 
    { 
     if (e instanceof Folder) 
     { 
      numFolders += e.getNumFolders(); 
     } 
    } 
     return numFolders;// default value 
} 
@Override 
public AbstractFile find(String name){ 
    //TODO Later - not in mini assignment 
    return null; 
} 
} 

AbstractFile類使用的instanceof在Java中算

public abstract class AbstractFile 
{ 
// instance variables - 
String name; 

public abstract int size(); 
public abstract int getNumFiles(); 
public abstract int getNumFolders(); 
public abstract AbstractFile find(String name); 

public String getName(){ 
    return name; 
} 

} 

文件系統講座進行測試

public class FileSystem 
{ 
    public static void main(String[] args) 
    { 
     FileSystem fileSystem = new FileSystem(); 
     fileSystem.fileTest1(); 

    } 

    public void fileTest1(){ 

     Folder documents = new Folder("Documents"); 
     Folder music = new Folder("Music"); 
     Folder photos = new Folder("Photos"); 
     documents.add(music); 
     documents.add(photos); 
     File assign1 = new File("assign1.doc"); 
     documents.add(assign1); 
     Folder dylan = new Folder("Dylan"); 
     music.add(dylan); 
     Folder band = new Folder("The Band"); 
     music.add(band); 
     File family = new File("family.jpg"); 
     photos.add(family); 
     File tambourine = new File("tambourine.mp3"); 
     dylan.add(tambourine); 
     File dixie = new File("dixie.mp3"); 
     band.add(dixie); 
     File weight = new File("weight.mp3"); 
     band.add(weight); 

     String contents1 = ("Hey, mister, can you tell me "); 
     String contents2 = ("Hey Mr Tambourine Man"); 
     String contents3 = ("The night they drove old dixie down"); 
     String contents4 = ("fee fi fo fum"); 

     weight.setContents(contents1); // add contents to each File 
     tambourine.setContents(contents2); 
     dixie.setContents(contents3); 
     assign1.setContents(contents4); 

     //********test for size()**************** 
     int expected = contents1.length() + contents2.length() + contents3.length() + contents4.length(); 
     int result = documents.size(); 

     if(result==expected){ // test fro equality 
      System.out.println("size() works"); 

     }else{ 
      System.out.println("size() doesn't work"); 
     } 

     //***************************************** 

     //*****************test for getNumFiles()****************** 

     expected =5;// what value should expected be set to? 
     result = documents.getNumFiles(); 

     if(result==expected){ // test fro equality 
      System.out.println("NumFiles() works"); 

     }else{ 
      System.out.println("NumFiles() doesn't work"); 

     } 

     //output the results of the test for equality 

     // ************************************** 

     //*****************test for getNumFiles()****************** 

     expected = 5; // what value should expected be set to? 
     result = documents.getNumFolders(); 



     if(result==expected){ // test fro equality 
      System.out.println("NumFolder() works"); 

     }else{ 
      System.out.println("NumFolder() doesn't work"); 
      System.out.printf("%d",result); 
     } 

     // ************************************** 


    } 
    } 

文件類

public class File extends AbstractFile 
    { 
    private String contents; 
/** 
* Constructor for objects of class File 
*/ 
public File(String name) 
{ 
    super(); 
    this.name = name; 
} 

public String getContents(){ 
    return contents; 
} 

public void setContents(String contents){ 
    this.contents = contents; 
} 

@Override 
public int size() 
{ 
    if(contents==null){ //handle situation where contents may not have been set 
     return 0; 
    } 
    return contents.length(); 
} 
@Override 
public int getNumFiles(){ 
    return 1; // a File object just returns 1 (it contains one File - itself) 
} 
@Override 
public int getNumFolders(){ 
    //TODO 
    return 0; 
} 
@Override 
public AbstractFile find(String name){ 
    //TODO Later - not in mini assignment 
    return null; 
} 

}

嗨,所以基本上我遇到了getNumFolders(method)問題我有一個測試課用5個文件夾創建,這些文件存儲在AbstractFile類型的ArrayList調用文件中。我試圖通過這個ArrayList循環來計算文件夾,考慮到這個ArrayList也包含文件,所以它們不能被計數。 我將不勝感激任何幫助。 非常感謝!

+4

請這減少到[MCVE],確保您有問題 - 我猜是對象不包含編譯時錯誤'getNumFiles()'。僅僅因爲你使用'instanceof'不會改變'e'的編譯時間類型 - 你需要進行強制轉換。 –

+0

我加了剩下的代碼,謝謝! – John

+2

但是您沒有將其降低爲最小示例或顯示錯誤:( –

回答

0

簡單地說,如果你想計算文件夾實例的數量,那麼下面應該做的工作。

public int getNumFolders() { 

int numFolders = 0; 

for(AbstractFile file: files) { 
    if(file instanceof Folder) { 
     numFolders++; 
    } 
} 
return numFolders; 
} 

and expectedValue should be 2 accroding to your test case。 在fileTest1()你的測試用例的方法,

expected = 2; // this should be two because there are two folders called music and photos in documents folder 
result = documents.getNumFolders();