【问题标题】:Java : Save Assigned String from method in an arrayJava:从数组中的方法保存分配的字符串
【发布时间】:2017-05-11 20:47:43
【问题描述】:

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

我正在尝试通过 voegDeelnameToe() 方法添加 6 人,但我无法保存
String deelnemer (= String '参与者姓名')

String[] aanwezigheden (= String[] 'answers')

在另一个对象中,然后将其打印出来。

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[] deelnemers = new String[] {"","","","","","",};
    String[] antwoorden = new String[15];
    String[][] poll = new String[6][15];
    String einde = " ";
    boolean afgesloten;
    int teller = 1;

    public Poll(String testBasispoll_1, String dit_is_de_eerste_basispoll, String location, String name, LocalDate[] data, LocalTime[] tijdstippen, boolean b) {
         titel = testBasispoll_1;
         omschrijving = dit_is_de_eerste_basispoll;
         locatie = location;
         initiator = name;
         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]);


        for (int i = 0; i < 6; i++) {
            System.out.println(deelnemers[i] + "\t");
        }

            for (int j = 0; j < 15; j++) { 
                System.out.print(antwoorden[j] + "\t");

            }




        return einde;
    }

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

        //for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 15; j++) {
                antwoorden[j] = aanwezigheden[j];
            }            
       // }   
        for (int i = 0; i < 6; i++) {
            deelnemers[i] = deelnemer;

        }


      return type;
    }

【问题讨论】:

  • 您正在打印从 geefPollInfo() 返回的字符串,它是变量 einde。 einde 只是一个 " " 字符,我没有看到它在任何地方重新初始化。我不确定你想在这里做什么。

标签: java arrays string methods constructor


【解决方案1】:

方法voegDeelnameToe 将(覆盖)在您每次调用它时(覆盖)antwoordenantwoorden 的所有元素。因此,只有最后一个人 Matthias 将留在 投票。建议:

  1. voegDeelnameToe 签名修改为boolean voegDeelnameToe(int personIndex, String deelnemer, String[] aanwezigheden)。然后跳过第二个 for 循环,只做deelnemers[index] = deelnemer;。在这种情况下,我不确定您应该如何处理 aanwezigheden

  2. Poll 中创建一个字段int index = 0; 并在每次调用voegDeelnameToe 时递增它,只要它小于6。例如:

    deelnemers[index] = deelnemer;
    ++index;`
    

我必须指出,String[][] poll = new String[6][15]; 类中有一个字段 String[][] poll = new String[6][15]; 似乎应该保存投票结果。您可能应该为 6 个参与者中的每一个存储 aanwezigheden 吗?否则antwoorden 每次都会被覆盖。例如,如果您在Poll 中添加int index = 0; 中的字段,则voegDeelnameToe 方法将如下所示:

public boolean voegDeelnameToe(String deelnemer, String[] aanwezigheden) {
    if (index < poll.length && index < deelnemers.length) {
        deelnemers[index] = deelnemer;
        System.arraycopy(aanwezigheden, 0, poll[index], 0, aanwezigheden.length);
        ++index;
    }
    return type;
}

请注意,在这种情况下,您应该检查索引是否在数组范围内,并且System.arraycopy 比用于复制数组的 for 循环更有效且可以说更简单。

【讨论】:

  • 是的,原来的目的是把aanwezigheden和anttwoorden存入String[][] poll = new String[6][15];因为我想不通,所以我尝试了不同的方法。如果您对使用 String[][] poll = new String[6][15]; 找到解决方案有任何建议;将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2019-03-18
  • 2022-01-17
  • 2023-03-09
  • 2011-10-22
  • 2014-01-16
  • 2020-02-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多