본문 바로가기
내가 공부하려고 올리는/자바

자바 - 배열로 석차 구하기

by 결딴력 2021. 10. 13.
반응형

오랜만에 자바 포스팅을 하게 됐네요.

더 자주 포스팅을 하지 못하는 것에 안타까움을 느끼는 중입니다..😭

 

오늘은 자바 배열을 통해 석차를 구하는 방법을 리뷰하려고 해요.

 

자바 Swing을 이용해서

성적관리 프로그램을 만들고 있는 중인데,

입력한 배열에 관해 석차를 구하는 방법을 바로 떠올리기가 어렵더라구요.

 

그래서 오늘은 찾아서 적용한 석차 구하는 방식을

리뷰하고 복습하기 위한 포스팅을 하려고 합니다.

 

 

자 우선 코드를 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
public SecondView(int number) {
        super();
 
        String header[] = { "이름", "국어", "영어", "수학", "총점", "평균", "석차" };
        String contents[][];
        contents = new String[number][];
 
        DefaultTableModel model = new DefaultTableModel(contents, header);
        JTable table = new JTable(model);
        JScrollPane scroll = new JScrollPane(table);
cs

 

다른 것은 무시하고 배열의 생성을 먼저 보겠습니다.

'header' 부분은 제목 부분이니까 무시하고

제목에 관한 내용이 들어갈 'contents' 배열을 집중해서 보겠습니다.

 

contents 배열은 입력한 number만큼 행이 생성되는 배열입니다.

Main 메서드에서 SecondView 클래스의 인스턴스를 생성하고

number값을 주게 되면 그 number만큼의 행이 생성됩니다.

 

다음과 같이 3을 입력하고 테이블을 만들면

다음과 같은 3행의 테이블이 생성됩니다.

 

이후 이름, 국어, 영어, 수학을 입력하고

'연산' 버튼을 눌렀을 경우 '총점'과 '평균'이

계산되도록 코드를 작성했습니다.

 

그렇다면 석차는 어떻게 구할까요??

1
int[][] newArray = new int[number][2];
cs

우선 다음과 같은 2차 배열을 선언합니다.

여기서 number는 만들어지는 행수를 말합니다.

 

1
2
3
4
5
for (int i = 0; i < number; i++) {
                    //total과 avg 구하는 공식//
 
                    newArray[i][0] = total;
                    newArray[i][1] = 1;
cs

 

for문을 이용해 total을 구합니다.

number의 수만큼 total값이 생성되고

생성된 total값은 새로운 2차 배열에 저장됩니다.

 

만약 number에 1을 대입해 하나의 행만을 가지는 테이블을 생성했고,

total값이 200이라면

newArray는 다음과 같은 배열이 됩니다.

200 1

 

number에 3을 대입해 3개의 행을 가지는 테이블을 생성하고,

각각의 total 값이 200, 300, 400이라 가정한다면

200 1
300 1
400 1

이와 같은 배열이 생성됩니다.

 

자 그렇다면 석차를 구하기 위한 초기화 작업이 모두 끝났습니다.

이제 본격적으로 석차를 구해보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < number; i++) {
     for (int j = 0; j < number; j++) {
         if (newArray[i][0] < newArray[j][0]) {
             newArray[i][1]++;
            }
     }
}
 
for (int i = 0; i < number; i++) {
     model.setValueAt(String.valueOf(newArray[i][1]), i, 6);
}
 
cs

 

우선, 이중 for문을 사용해

첫 번째 행의 값과 두 번째 행의 값을 비교하는 코드를 작성합니다.

 

예를 들어 위의 3개 행을 이용한 표를 다음과 같은

이중 for문을 사용하여 값을 비교한다면

 

'i=0'과 'j=0'을 우선적으로 비교합니다.

newArray[0][0]과 newArray[0][0]의

값이 같기 때문에 별다른 변화 없이

j의 값이 1 증가합니다.

 

그렇다면,

'i=0'과 'j=1'을 비교해보겠습니다.

newArray[0][0]과 newArray[1][0]을 비교하면

'200'과 '300'으로 if 조건문에 부합하기 때문에

newArray[i][1]의 값을 '1' 증가합니다.

 

200 2
300 1
400 1

 

값을 증가하면

배열의 값이 위와 같이 변화합니다.

 

이러한 방식으로 석차를 구하게 되고,

다음 배열의 2번째 열을 'get'하여

석차를 구하는 칸에 'set'하는 방식으로

석차를 구하면 됩니다.

 


자바를 공부하면

컴퓨터가 이해하는 방식으로 메시지를 전달하는 것이

중요하다는 생각이 듭니다.

 

석차를 구하는 것도

인간인 저의 기준으로는

너무나도 간단한 일이지만

 

컴퓨터가 이해하는 방식으로

메세지를 전달하려고 하니

상당히 복잡하게 느껴지는 것 같습니다.

 

이런 간단한 알고리즘들을

하나씩 익혀서

많은 상황에 활용할 수 있도록

부단히 노력해야 할 것 같습니다.😭

 

질문은 댓글이나 메일 주세요!!

읽어주셔서 감사합니다.🙇‍♂️

반응형

댓글