게임 스코어를 입력받아 게임 랭킹 파일을 업데이트하는 문제입니다 이를 해결하는 다음 프로그램을 해석하세요--------- 파일 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키(다음)를 눌러도 확인할 수 있습니다