代码之家  ›  专栏  ›  技术社区  ›  user2868900

Java字符串连接方法执行

  •  -1
  • user2868900  · 技术社区  · 6 年前

    我正在构建一个小测验应用程序,并将每个问题的答案存储在一个数据库表中(使用JPA)。

    我想知道是否有一种方法可以通过for循环动态地获取getter(比如javascript),而不必编写每个get方法。

    public void parseUserScore(UserAnswers answer) {
        Integer[] answers = new Integer[] {
                answer.getQ1(),
                answer.getQ2(),
                answer.getQ3(),
                answer.getQ4(),
                answer.getQ5(),
                answer.getQ6(),
                answer.getQ7(),
                answer.getQ8(),
                answer.getQ9()
        };
        double totalscore = 0;
        Integer answeredQuestions = 0;
        for (int i = 0; i < answers.length; i++) {
            if (answers[i] > 0) {
                answeredQuestions++;
            }
            totalscore += answers[i];
        }
    }
    

    我的问题是,是否有可能通过这样一个foor循环获取这些答案:

    public void parseUserScore(UserAnswers answer) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 1; i < 10; i++) {
            String methodname = "getQ" + i.toString();
            list.add(i, answer.methodname)
        }   
    }
    

    0 回复  |  直到 6 年前
        1
  •  2
  •   stevecross    6 年前

    根据您在问题中提供的信息,我认为您应该使用三个实体: User , Question Answer . 用户可以提出多个问题,并提交多个问题的答案。答案总是属于一个问题。JPA有一些注解来模拟这些规则:

    @Entity
    class User {
    
        @OneToMany(mappedBy = "user")
        Set<Question> questions;
    
        @OneToMany(mappedBy = "user")
        Set<Answer> answers;
    
        // Getters & setters
    
    }
    
    @Entity
    class Question {
    
        @ManyToOne
        @JoinColumn(name = "user_id")
        User user;
    
        @OneToMany(mappedBy = "question")
        Set<Answer> answers;
    
        // Getters & setters
    
    }
    
    @Entity
    class Answer {
    
        @ManyToOne
        @JoinColumn(name = "user_id")
        User user;
    
        @ManyToOne
        @JoinColumn(name = "question_id")
        Question question;
    
        int score;
    
        // Getters & setters
    
    }
    

    之后,您可以简单地迭代特定用户的答案并计算总分:

    final int totalScore = user.getAnswers().stream().mapToInt(Answer::getScore).sum();
    

    请注意,这只是一个基本的例子。您还应该考虑级联更新和获取关系类型。