*oop0522 test02_sungjuk 참조
입력자료가 어디에 있는지 생각하고 연결할 방법 먼저 생각을 하기
출력할 자료의 위치를 먼저 넣는 방법을 생각.
1단계 : 데이터 저장 변수 선언
2단계 : sungjuk.txt에 가져와서 한줄에 , 를 기준으로 토큰 후 해당변수에 저장하기
* 커서의 위치개념생각하기, 원하는 패턴대로 , 기본속성은 next이다.
2-1 파일불러오기
2-2 , 를 기준으로 토큰하기 split은 좀 복잡

line
name[0]
kor[0]
eng[0]
mat[0]
try{
String inName ="D:/java0514/workspace/sungjuk.txt";
String outName="D:/java0514/workspace/result.txt";
//1단계 : 데이터 저장 변수 선언
String[] name=new String[5];
int[] kor=new int[5];
int[] eng=new int[5];
int[] mat=new int[5];
int[] aver=new int[5];
int[] rank={1,1,1,1,1};
int size=name.length ;
//2단계 : sungjuk.txt에 가져와서 한줄에 , 를 기준으로 토큰 후 해당변수에 저장하기
//커서의 위치개념생각하기, 원하는 패턴대로 , 기본속성은 next이다.
//파일불러오기
FileReader in=new FileReader(inName);
BufferedReader br=new BufferedReader(in);
String line=null; //초기값설정
while(true){
line=br.readLine(); //br에 있는 정보를 한줄씩 line변수에 저장
if(line==null) break;
System.out.println(line);
// , 를 기준으로 토큰하기 split은 좀 복잡
StringTokenizer st=new StringTokenizer(line,",");
while(st.hasMoreElements()){ //토큰할 게 있을 때까지 돌려라
System.out.println(st.nextToken());
}
System.out.println("------------------------");
}//while end
출력결과
무궁화,95,90,100
무궁화
95
90
100
------------------------
홍길동,30,55,40
홍길동
30
55
40
------------------------
사이다,60,95,75
사이다
60
95
75
------------------------
package oop0611;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.nio.Buffer;
import java.util.StringTokenizer;
public class Test06_Sungjuk {
public static void main(String[] args) {
// 성적 프로그램
// 성적입력자료를 가져와서 -> sungjuk.txt
// 성적 결과 파일 완성하긱 -> result.txt
//
try{
String inName ="D:/java0514/workspace/sungjuk.txt";
String outName="D:/java0514/workspace/result.txt";
//1단계 : 데이터 저장 변수 선언
String[] name=new String[5];
int[] kor=new int[5];
int[] eng=new int[5];
int[] mat=new int[5];
int[] aver=new int[5];
int[] rank={1,1,1,1,1};
int size=name.length ;
//2단계 : sungjuk.txt에 가져와서 한줄에 , 를 기준으로 토큰 후 해당변수에 저장하기
//커서의 위치개념생각하기, 원하는 패턴대로 , 기본속성은 next이다.
//2-1 파일불러오기
FileReader in=new FileReader(inName);
BufferedReader br=new BufferedReader(in);
//2-3 idx초기값설정
int idx=0;
String line=null; //초기값설정
while(true){
line=br.readLine(); //br에 있는 정보를 한줄씩 line변수에 저장
if(line==null) break;
System.out.println(line);
//2-2 , 를 기준으로 토큰하기 split은 좀 복잡
StringTokenizer st=new StringTokenizer(line,",");
/*
for(int idx=0; idx<5; idx++){ //for문도 가능하지만, idx의 length의 길이가 파일마다 다르므로
//유지보수가 힘듬
line=br.readLine(); //br에 있는 정보를 한줄씩 line변수에 저장
}
*/
while(st.hasMoreElements()){ //토큰할 게 있을 때까지 돌려라
//System.out.println(st.nextToken());
//2-3 토큰해서 나눠진 변수들을 집어넣어주기
name[idx]=st.nextToken();
kor[idx] =Integer.parseInt(st.nextToken()); //string을 int로 형변환
eng[idx] =Integer.parseInt(st.nextToken());
mat[idx] =Integer.parseInt(st.nextToken());
}//while end
idx++;
//System.out.println("------------------------");
}//while end
//3단계 : 평균, 등수구하기
//평균구하기
for(int a=0; a<size; a++){
aver[a]=(kor[a]+eng[a]+mat[a])/3;
}//for end
//등수를 구하기 (평균값을 기준으로)
for(int a=0;a<size;a++){
for(int b=0;b<size;b++){
if(aver[a]<aver[b]){
rank[a]++;
}//if
}//for end
}//for end
//4단계 : result.txt에 출력하기
FileWriter fw=new FileWriter(outName);
PrintWriter out=new PrintWriter(fw, false);
//out.printf(format, args);
out.println("**********성 / 적 / 결 / 과************");
out.println("----------------------------------------");
out.println(" 이름 국어 영어 수학 평균 등수 결과 ");
out.println("----------------------------------------");
for(idx=0; idx<size; idx++){
out.printf("%-5s %5d %5d %5d %5d %4d ", name[idx], kor[idx], eng[idx], mat[idx], aver[idx], rank[idx]);
if(aver[idx]>=70){
if(kor[idx]<40||eng[idx]<40||mat[idx]<40){
out.printf("%-5s", "재시험");
}else{
out.printf("%-5s", "합격");
}
}else{
out.printf("%-5s", "불합격");
}//if end
for(int star=1; star<=aver[idx]/10;star++){
out.printf("*");
}//for
if(aver[idx]>=95){
out.printf("%-5s", "장학생");
}//if
out.println();
}//for end
/*
for(int i=0; i<5; i++){
out.print(name[i]+" ");
out.print(kor[i]+" ");
out.print(eng[i]+" ");
out.print(mat[i]+" ");
out.print(aver[i]+" ");
out.println(rank[i]+"");
}
*/
out.println("----------------------------------------");
in.close(); br.close();
fw.close(); out.close();
/*
//sungjuk데이터에 있는 걸 한줄씩 가져온다 read
// , 기준으로 데이터를 나눈다.
FileWriter fw=new FileWriter(inName, false);
//autoFlush : true 버퍼클리어
PrintWriter in=new PrintWriter(fw, true);
in.println("무궁화,95,90,100");
in.println("홍길동,30,55,40");
in.println("사이다,60,95,75");
in.println("섭웨이,20,85,65");
in.println("신호등,100,35,100");
fw.close();
in.close();
//sungjuk 파일 가져오기
FileReader file=new FileReader(inName);
BufferedReader br=new BufferedReader(file);
while(true){
String line=br.readLine();
if(line==null){
break;
}
//line , 로 나누기
String[] word=line.split(",");
}//while end
*/
}catch(Exception e){
System.out.println("실패:"+e);
}//try end
}//main() end
}//class end
'공부 > 자바 OOP' 카테고리의 다른 글
6월11일 - 파일입출력 (0) | 2019.06.11 |
---|---|
6월10일 - Java Collection Framework (0) | 2019.06.10 |
6월5일 - Abstract class + Interface (0) | 2019.06.05 |
6월4일 - 상속 + 객체지향(다향성, object) + exception (0) | 2019.06.04 |
6월3일 - 상속 (0) | 2019.06.03 |