2016-12-28 62 views
0

我試圖從構造函數方法中將指定的String和String []保存到二維數組中,然後將其打印出來時遇到問題。程序背後的想法是在塗鴉程序中添加一個人的姓名和答案(在voegDeelnameToe中),然後通過geefPollInfo()打印出所有信息。我想添加幾個人通過voegDeelnameToe()方法,但我不能保存字符串deelnemer(=字符串'參與者的名稱')和字符串[] aanwezigheden(=字符串[]'答案')。到String [] []輪詢;因此我也無法打印出有關投票的信息。關於如何將來自doodle.voegDeelnameToe的幾個人的信息保存到String [] []輪詢中的任何想法?將方法中的字符串和字符串[]保存到poll [] []中

doodle.voegDeelnameToe("Bram",new String[]{"ja", "ja", "nee", "ja", "ja", "nee", "ja", "ja", "ja", "nee", "nee", "nee", "ja", "ja", "ja"}); 
     doodle.voegDeelnameToe("Katja", new String[]{"nee", "nee", "ja", "nee", "nee", "nee", "ja", "nee", "ja", "ja", "nee", "ja", "ja", "nee", "ja"}); 
     doodle.voegDeelnameToe("Kristien", new String[]{"ja", "ja", "ja", "ja", "nee", "nee", "nee", "nee", "nee", "ja", "nee", "ja", "ja", "nee", "ja"}); 
     doodle.voegDeelnameToe("Peter", new String[]{"ja", "nee", "ja", "ja", "nee", "nee", "nee", "nee", "nee", "ja", "nee", "ja", "ja", "nee", "ja"}); 
     doodle.voegDeelnameToe("Sven", new String[]{"nee", "nee", "ja", "ja", "nee", "nee", "nee", "nee", "nee", "ja", "nee", "ja", "ja", "ja", "ja"}); 
     doodle.voegDeelnameToe("Matthias", new String[]{"ja", "ja", "ja", "ja", "nee", "ja", "nee", "nee", "nee", "ja", "nee", "ja", "ja", "nee", "ja"}); 
     System.out.println(doodle.geefPollInfo()); 

public class Poll { 

    boolean type; 
    String titel; 
    String omschrijving; 
    String locatie; 
    String initiator; 
    final int MAX_DEELNEMERS = 10; 
    LocalDate[] data; 
    LocalTime[] tijdstippen; 
    String[][] poll;   // The array to save the information 
    String einde = " "; 
    boolean afgesloten; 
    int teller = 0; 

    public Poll(String testBasispoll_1, String dit_is_de_eerste_basispoll, String gent, String bram_Gosseye, LocalDate[] data, LocalTime[] tijdstippen, boolean b) { 
     titel = testBasispoll_1; 
     omschrijving = dit_is_de_eerste_basispoll; 
     locatie = gent; 
     initiator = bram_Gosseye; 
     this.data = data; 
     this.tijdstippen = tijdstippen; 
     type = b; 
    } 


    public String geefPollInfo() { 

     System.out.println("Titel : " + titel); 
     System.out.println("Omschrijving : " + omschrijving); 
     System.out.println("Locatie : " + locatie); 
     System.out.println("Initiator : " + initiator); 
     System.out.println("Max aantal deelnemers : " + MAX_DEELNEMERS); 
     System.out.println("--------------------------------------------------------"); 
     System.out.println("Dag \t \t" + data[0] + "\t \t" + data[1] + "\t \t" + data[2] + "\t \t" + data[3] + "\t \t" + data[4]); 
     System.out.println("Uur \t \t" + tijdstippen[0] + "\t" + tijdstippen[1] + "\t" + tijdstippen[2] + "\t" + tijdstippen[0] + "\t" + tijdstippen[1] + "\t" + tijdstippen[2] + "\t" + tijdstippen[0] + "\t" + tijdstippen[1] + "\t" + tijdstippen[2] + "\t" + tijdstippen[0] + "\t" + tijdstippen[1] + "\t" + tijdstippen[2] + "\t" + tijdstippen[0] + "\t" + tijdstippen[1] + "\t" + tijdstippen[2]); 

     return einde; 
    } 

    public boolean voegDeelnameToe(String deelnemer, String[] aanwezigheden) { 

     return type; 
    } 

    /* public boolean wijzigDeelname(String deelnemer, String[] aanwezigheden){ 

     return type; 
    }*/ 

}  

回答

1

Java數組在實例化時具有固定大小。數組中的條目需要使用索引顯式管理。你不能將一個新值附加到數組上,需要指定索引來存儲值。

A String[][]是一串字符串數組。它是一個數組,期望在每個索引中有一個String的數組。每個條目都被初始化爲null

使用List<String[]>對於存儲使用voegDeelnameToe方法傳入的數組可能是更好的選擇。 List接口具有追加到列表末尾的add方法。它也會根據需要動態增長。

如果你真的想要使用一個數組,你將需要管理下一個要分配的索引,並在需要更多空間時分配一個新的更大的數組。

您還想存儲deelnemeraanwezigheden。有幾種方法可以做到這一點。您可以維護兩個單獨的列表,其中一個爲deelnemer,另一個爲aanwezigheden,並使用相同的索引將值保存在一起。您可以創建一個新陣列,其中1個大於aanwezigheden,將第一個項目設置爲deelnemer,將aanwezigheden複製到其餘項目中並將其存儲。最簡潔的方法是創建一個私有的內部類,它包含兩個參數並且有一個列表。

public class Poll { 

    private final List<PollEntry> poll; 

    public Poll(...) { 
     ... 
     poll = new ArrayList<>(); 
    } 

    ... 

    private static final class PollEntry { 
     private final String deelnemer; 
     private final String[] aanwezigheden; 

     private PollEntry(String deelnemer, String[] aanwezigheden) { 
      this.deelnemer = deelnemer; 
      this.aanwezigheden = aanwezigheden; 
     } 
    } 
} 

您還應該記住,可以更改數組中的條目。因此,您應該考慮複製aanwezigheden以防止在傳遞給voegDeelnameToe方法後,類改爲Poll。只有你需要做的事情,如果線程安全或可變性的擔憂。

Arrays.copyOf(aanwezigheden, aanwezigheden.length) 

您可以使用foreach循環遍歷geefPollInfo一個List

for (PollEntry entry : poll) { 
    System.out.println("Deelnemer : " + entry.deelnemer); 
} 
0

另一種選擇是使用實現接口的數據結構。例如:

public class Poll { 
    ... 
    HashMap<String, String[]> poll; 
    ... 

    public boolean voegDeelnameToe(String deelnemer, String[] aanwezigheden) { 
    poll.put(deelnemer, aanwezigheden) //saves the String and String[] as a pair 
    ... 
    return type; 
    }  
} 

HashMap將數據存儲在鍵值對中。不用像數組那樣進行數字索引,唯一鍵將是值deelnemerpoll.get(deelnemer)將返回String [] aanweizgheden。這裏是鏈接到HashMapdocumentation