2016-12-28 22 views
0

割り当てられたStringとString []をコンストラクタメソッドから2次元配列に保存してから印刷しようとしています。プログラムの背後にあるアイデアは、その人の名前と回答(voegDeelnameToeで)を使って人物を落書きプログラムに追加し、geefPollInfo()を介してすべての情報をプリントアウトすることです。メソッドからpoll [] []への文字列と文字列[]の保存

voegDeelnameToe()メソッドを使用して複数の人物を追加しようとしていますが、String deelnemer(=文字列 '参加者の名前')とString [] aanwezigheden(= String [] 'answers) String [] [] pollに;したがって、私は投票に関する情報を印刷することもできません。 doodle.voegDeelnameToeから複数の人物の情報をString [] []ポーリングに保存する方法に関するアイデアはありますか?

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配列は、インスタンス化すると固定サイズになります。配列内のエントリは、インデックスを使用して明示的に管理する必要があります。配列に新しい値を追加することはできません。値を格納するインデックスを指定する必要があります。

String[][]は、文字列の配列です。各インデックスにStringの配列が必要な配列です。各エントリはnullに初期化されます。

List<String[]>を使用すると、voegDeelnameToeメソッドを使用して渡された配列を格納することができます。 Listインターフェイスには、addメソッドがあり、リストの最後に追加されます。また、必要に応じて動的に成長します。

実際に配列を使用する場合は、次のインデックスを管理して、より多くのスペースが必要なときに新しい大きな配列を割り当てて割り当てる必要があります。

aanwezighedenと一緒に保存することもできます。これを行うにはいくつかの方法があります。 2つの別々のリスト、deelnemeraanwezighedenのいずれか1つを保持し、同じインデックスを使用して値をまとめておくことができます。 aanwezighedenより大きい1つの新しい配列を作成し、最初のエントリをdeelnemerに設定し、aanwezighedenを残りのエントリにコピーして保存します。一番きれいなのは、2つのパラメータを保持し、それらのリストを持つプライベート内部クラスを作成することです。

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; 
     } 
    } 
} 

また、配列のエントリを変更することもできます。したがってPollクラスがvoegDeelnameToeメソッドに渡された後に変更されている配列を防ぐためにaanwezighedenをコピーすることを検討する必要があります。スレッドの安全性や変更可能性が懸念される場合にのみ必要なことです。

Arrays.copyOf(aanwezigheden, aanwezigheden.length) 

あなたは、foreachループを使用してgeefPollInfoListを横切ることができます。

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

もう1つのオプションは、Map<K, V>インターフェイスを実装するデータ構造を使用することです。例えば:キー、値のペアで

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データを格納します。配列のように数値的に索引付けする代わりに、一意のキーはdeelnemerの値になります。 poll.get(deelnemer)はString [] aanweizghedenを返します。ここにはHashMapdocumentationへのリンクがあります。