JAVA 프로그래밍

문제

게임 스코어를 입력받아 게임 랭킹 파일을 업데이트하는 문제입니다 이를 해결하는 다음 프로그램을 해석하세요 
--------- 파일 ranking.txt의 내용 --------- 
내가짱	8579214
구름위	3674159
이기자	1578236
게임랭킹 파일이름을 입력하세요: C:\Users\user\Downloads\ranking.txt
게임 아이디를 입력하세요: 홍길동
게임 스코어를 입력하세요: 4157967
1) 내가짱 8579214
2) 홍길동 4157967
3) 구름위 3674159
4) 이기자 1578236 

게임랭킹 파일이름을 입력하세요: C:\Users\user\Downloads\ranking.txt
게임 아이디를 입력하세요: 주먹이
게임 스코어를 입력하세요: 1261579
1) 내가짱 8579214
2) 구름위 3674159
3) 이기자 1578236
4) 주먹이 1261579 

게임랭킹 파일이름을 입력하세요: C:\Users\user\Downloads\ranking.txt
게임 아이디를 입력하세요: 반쪽이
게임 스코어를 입력하세요: 5624139
1) 내가짱 8579214
2) 반쪽이 5624139
3) 구름위 3674159
4) 이기자 1578236 

알고리즘

프로그램 시작 
   먼저 기존 게임랭킹 파일 읽기
      파일 열기(읽기모드)
      게임랭킹 한 줄씩 읽기
      파일 닫기(읽기모드)
   새 게임 아이디와 스코어 입력 받기
   게임 스코어를 기준으로 정렬
   게임랭킹 파일 업데이트
      파일 열기(쓰기모드)
      게임랭킹 결과 한 줄씩 쓰기
      파일 닫기(쓰기모드)
프로그램 종료

프로그램 코드

	// 파일명 : ./Chapter16/GameRankingFile.java
	import java.io.*;
	import java.util.*;
		 
	public class GameRankingFile
	{
		// 프로그램 시작 
1		public static void main( String[] args ) throws IOException {
			Scanner scan = new Scanner( System.in );
			// 먼저 기존 게임랭킹 파일 읽기 
			// 파일 열기(읽기모드) 
			System.out.print( "게임랭킹 파일이름을 입력하세요: " );
2			String filename = scan.next();
3			BufferedReader inRankingFile = new BufferedReader( new FileReader( new File( filename ) ) );
		 
			// 게임랭킹 한 줄씩 읽기 
			String[][]  id = { { "", "" }, { "", "" }, { "", "" }, { "", "" }, { "", "" } };
			int index = 0;
5			for( String line; ( line = inRankingFile.readLine() ) != null; index++ ) {
				String[] one = line.split("\t");
				if ( one.length >= 2 ) {
					id[index][0] = one[0];
6					id[index][1] = one[1];
				}
				else {
					System.out.print( "(오류) 게임랭킹 내용을 읽어올 수 없습니다." );
					break;
				}
			}
		 
			// 파일 닫기(읽기모드) 
7			inRankingFile.close();
		 
			// 새 게임 아이디와 스코어 입력 받기 
			System.out.print( "게임 아이디를 입력하세요: " );
			id[index][0] = scan.next();
			System.out.print( "게임 스코어를 입력하세요: " );
8			id[index][1] = scan.next();
		 
			// 게임 스코어를 기준으로 정렬 
			// 마지막 칸에 가장 큰 값을 저장하면서 한 칸씩 앞으로 영역 좁혀가기
			for ( int last = index; 0 < last; last-- ) {
				// 영역의 첫번째 칸부터 인접한 두 값을 비교하면서
				for ( index = 0; index < last; index++ ) {
					// 앞이 뒤보다 작으면 두 값을 맞바꾸기하면서 앞쪽에 큰 값을 저장
					if ( Integer.parseInt( id[index][1] ) < Integer.parseInt( id[index+1][1] ) ) {
						String temp = id[index][0];
						id[index][0] = id[index+1][0];
						id[index+1][0] = temp;
						temp = id[index][1];
						id[index][1] = id[index+1][1];
						id[index+1][1] = temp;
					}
				}
			}
		 
			// 게임랭킹 파일 업데이트 
			// 파일 열기(쓰기모드) 
9			BufferedWriter outRankingFile = new BufferedWriter( new FileWriter( new File( filename ) ) );
		 
			// 게임랭킹 결과 한 줄씩 쓰기 
11			for ( index = 0; id[index][0].compareTo( "" ) != 0; index++ ) {
				System.out.println( index+1 + ") " + id[index][0] + "\t" + id[index][1] );
12				outRankingFile.write( id[index][0] + "\t" + id[index][1] + "\n" );
			}
		 
			// 파일 닫기(쓰기모드) 
13			outRankingFile.close();
			scan.close();
		// 프로그램 종료 
14		}
	}

실행 순서

 
 					※ 실행순서 및 메모리상태는 A키(이전) 및 D키(다음)를 눌러도 확인할 수 있습니다