【问题标题】:Save String and String[] from method into poll [ ][ ]将方法中的 String 和 String[] 保存到 poll [ ][ ]
【发布时间】:2017-05-12 14:25:48
【问题描述】:

我在尝试将分配的 String 和 String[] 从构造函数方法保存到二维数组然后打印出来时遇到问题。该程序背后的想法是将一个人添加到涂鸦程序中,并附上他们的姓名和答案(在 voegDeelnameToe 中),然后通过 geefPollInfo() 打印出所有信息。

我正在尝试通过 voegDeelnameToe() 方法添加几个人,但我无法将 String deelnemer (= String '参与者姓名') 和 String[] aanwezigheden (= String[] 'answers') 保存到字符串 [][] 投票;因此,我也无法打印出有关投票的信息。关于如何将来自 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;
    }*/

}    

【问题讨论】:

    标签: java arrays string class methods


    【解决方案1】:

    Java 数组在实例化时具有固定大小。需要使用索引显式管理数组中的条目。您不能将新值附加到数组中,需要指定索引来存储值。

    String[][] 是一个字符串数组。它是一个数组,在每个索引中都需要一个 String 数组。每个条目都初始化为null

    使用List<String[]> 可能是存储使用voegDeelnameToe 方法传入的数组的更好选择。 List 接口有一个 add 方法,该方法附加到列表的末尾。它还可以根据需要动态增长。

    如果您真的想使用数组,则需要管理下一个要分配的索引,并在需要更多空间时分配一个新的、更大的数组。

    您还希望将deelnemeraanwezigheden 一起存储。有几种方法可以做到这一点。您可以维护两个单独的列表,deelnemer 之一和aanwezigheden 之一,并使用相同的索引将值保持在一起。您可以创建一个比aanwezigheden 大1 的新数组,将第一个条目设置为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 以防止数组 Poll 类在传递给 voegDeelnameToe 方法后被更改。只有在担心线程安全或可变性时才需要做一些事情。

    Arrays.copyOf(aanwezigheden, aanwezigheden.length)
    

    您可以使用 foreach 循环在 geefPollInfo 中遍历 List

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

    【讨论】:

      【解决方案2】:

      另一种选择是使用实现Map&lt;K, V&gt; 接口的数据结构。例如:

      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的链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 2013-05-12
        • 1970-01-01
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多