본문 바로가기

📚Study Note/JAVA

[ JAVA ] 배열과 정렬알고리즘을 활용한, 성적 등수 출력

import java.util.Scanner;


public class Test105
{
	public static void main(String[] args) 
	{
		
		// 스캐너 인스턴스 생성하고 인원수만큼 이름과 점수를 받는다.
		// 받은 인원수를 기반으로 이름을 받을 String[], 점수를 받을 int[]을 만든다.
		// (인원수만큼)이름과 점수를 사용자에게 입력받는다.
		// for문을 이용해서 점수를 비교하고 배열 요소의 순서를 바꾼다. (점수의 경우 ^ 연산자, 이름은 String temp를 만들어 순서변경)
		// 결과를 출력한다.
		
		
		Scanner sc = new Scanner(System.in);

		
		int n;

		System.out.print("인원 수 입력 : ");

		n=sc.nextInt();

		System.out.println("n의 값 : " + n); //테스트

		
		
		String[] name = new String[n];
		int [] score = new int[n];
		
		
		for (int i=0; i<n; i++)
		{
			System.out.printf("이름 점수 입력(%d) : ",i+1);
			name[i] = sc.next();
			score[i] = sc.nextInt();

		}

		for (int i=0; i<score.length-1; i++)  // i →  0 1 2 3
		{
			for (int j=i+1; j<score.length ; j++) // j → 0 : 1234  1:234 2:34 3:4
			{
				if (score[i] < score[j])
				{
					
					score[i]=score[i]^score[j];
					score[j]=score[j]^score[i];
					score[i]=score[i]^score[j];					
					
					
					String temp;

					temp = name[i];
					name[i] = name[j];
					name[j] = temp;

				}

			}
		}

		System.out.println();


		for (int i=0; i<score.length; i++)
		{
			System.out.printf("%d등 %s %d\n",i+1,name[i],score[i]);

		}

        // [내가 생각한 방법과 오류들]
		// br.readLine()으로 이름 점수 부분을 다 받아서 string[] 만들어서 넣는다.
		// 각 배열 요소의 맨 끝자리 두자리(점수부분)를 .substring()을 통해 받는다 (BUT 이렇게 문제를 풀면 나중에 이름이 세 자가 아니거나 점수가 한,세 자리인 특수한 경우가 생길 경우 값이 달라진다.)
		//★따라서 이름과 점수의 배열을 따로 만들어서 처리해야 할 듯 하다.
		
	}
}