티스토리 뷰

JAVA

Returning ArrayList from Method

seoca 2019. 7. 13. 06:12

 

returning ArrayList from method

 

 

Option 1 - Wrong

    //weight을 계산 그러나 과목별,학생별은 상관이 없는 상태.
    private MarkInfo getWeight() {
        int t_id = 0;
        int s_id = 0;
        double weight = 0;
        for (MarkInfo m : markInfos) {
            for (TestInfo t : testInfos) {
                if (t.getTestId() == m.getMarkId()) {
                    t_id = m.getMarkId();
                    s_id = m.getMarkStudentId();
                    weight = m.getMark() * (t.getWeight() / 100);
                }
            }
        }
        return new MarkInfo(t_id, s_id, weight);
    }
 

 

 

Option 2 - Right

 
private ArrayList<MarkInfo> getWeight(){
        ArrayList<MarkInfo> list = new ArrayList<>();
        int t_id = 0;
        int s_id = 0;
        double weight = 0;
        for (MarkInfo m : markInfos) {
            for (TestInfo t : testInfos) {
                if (t.getTestId() == m.getMarkTestId()) {
                    t_id = m.getMarkTestId();
                    s_id = m.getMarkStudentId();
                    weight = m.getMark() * (t.getWeight() / 100);
                    list.add(new MarkInfo(t_id, s_id, weight));
                }
            }
        }
        return list;
    }
 
 

 

 

 

Option1 처럼 ArrayList를 명시하지 않고 리턴값을 보내면 for-each에서 incompatible error이 발생한다. 

Return type 에 ArrayList로 나와 있지 않아서 타입에러가 발생. ArrayList가 아닌 MarkInfo type 

두번째 처럼 메서드안에 ArrayList를 선언해서 리턴하자.

 

ArrayList<MarkInfo> weightedMarks = getWeight(); //메서드의 리턴값이 ArrayList 가 아니라고 나옴. 받는 쪽과 주는 쪽의 타입이 다르다.
 
...
 
    for (MarkInfo m : weightedMarks) {
        //조건 mark student_Id == student_Id
        if (m.getMarkStudentId() == studentInfos.get(i).studentId()) {
            //Test돌리기
            for (TestInfo t : testInfos) {
                //Test_id == Mark의 test_id
                if (t.getTestId() == m.getMarkTestId()) {
                    total += m.getMark(); //weighted mark 계속 더하기
                    if (!map.containsKey(t.getCourseId()))map.put(t.getCourseId(), m.getMark()); 
                    else map.put(t.getCourseId(), map.get(t.getCourseId()) + m.getMark());
                }
            }
        }
    }
    output.write("Total Average: " + "\t" + "\t" + String.format("%.2f", total / map.size()) + "%" + "\n" + "\n");
 
    // 과목당 평균 - 과목평균에서 course_id 조건이 하나 더 붙으면 됨
    for (CourseInfo c : courseInfos) {
        output.write("\t" + "\t" + c.toString());
        output.write("\t" + "\t" + "Final Grade: " + "\t" + String.format("%.2f", map.get(c.getCourseId())) + "%" + "\n" + "\n");
    }
    output.write("\n");
}
 

 

'JAVA' 카테고리의 다른 글

Serialization example code in java  (0) 2019.07.17
for each  (0) 2019.07.13
Iterator  (0) 2019.07.12
Check only integer input  (0) 2019.07.12
instanceof keyword  (0) 2019.07.11