Java Collection - 리스트 사용해보기

다음 코드의 배열을 리스트로 사용해 리팩토링해보기

문제1

  • 다음 코드는 배열을 사용하고 있음. 리스트로 변경하도록 함.
  • 실행 결과를 참고해 리스트 클래스로 사용하라.

Main.class

public class Main {
    public static void main(String[] args) {
        int[] students = {90, 80, 70, 60, 50};

        int total = 0;
        for (int i = 0; i < students.length; i++) {
            total += students[i];
        }

        double avg = (double) total / students.length;
        System.out.println("점수 합계: " + total);
        System.out.println("점수 평균: " + avg);
    }
}

점수 합계: 350
점수 평균: 70.0

풀이1

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(90);
        list.add(80);
        list.add(70);
        list.add(60);
        list.add(50);

        int total = 0;
        for (int i = 0; i < list.size(); i++) {
            total += list.get(i);
        }

        double avg = (double) total / list.size();
        System.out.println("점수 합계: " + total);
        System.out.println("점수 평균: " + avg);
    }
}

문제2

  • 사용자에게 n개의 정수를 입력받아 List에 저장하고 입력한 순서대로 출력한다.
  • 0를 입력하면 종료하고 결과 출력
  • 출력 시 포맷은 "1, 2, 3, 4" 쉼표로 구분한다.

실행 결과

n개의 정수를 입력하시오 (종료 0)
1
2
3
4
5
0
출력
1, 2, 3, 4, 5

풀이

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        System.out.println("n개의 정수를 입력하세요 (종료 0)");
        Scanner scanner = new Scanner(System.in);

        list.add(scanner.nextInt());
        
        while (list.getLast() != 0) {
            list.add(scanner.nextInt());
            scanner.nextLine();
        }

        for (int i = 0; i < list.size() -1; i++) {
            System.out.print(list.get(i));
            if (list.get(i+1) != 0 ) System.out.print(", ");
        }
    }
}

이 코드에서는 while (true) 에서 입력 받아 break로 빠져 나오는 것도 나쁘지 않다.
또한 "," 쉼표에는 마지막 출력되지 않도록 if문을 하였는데 get() 메소드 대신 size 멤버필드로 빠져나오도록 개선한다.


문제3

합계와 평균

실행결과를 참고하여 사용자의 입력을 받아 자료구조 List로 담고, 보관된 정수의 합계와 평균을 구한다.

실행 결과

n개의 정수를 입력하시오 (종료 0)
1
2
3
4
5
0
정수의 합: 15
정수의 평균: 3.0

풀이

ist<Integer> list = new ArrayList<>();
System.out.println("n개의 정수를 입력하세요 (종료 0)");
Scanner scanner = new Scanner(System.in);

while (true) {
    int input = scanner.nextInt();
    if (input == 0) {
        break;
    }
    list.add(input);
    scanner.nextLine();
}

int sum = 0;
double avg = 0.0;
for (Integer i : list) {
    sum += i;
    avg += i;
}
System.out.println("정수의 합: " + sum);
System.out.println("정수의 평균: " + avg / list.size());