본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 8장 실습문제(2)

by 푸고배 2018. 9. 27.

첨부파일 : a.jpg

test1.txt
다운로드
test2.txt
다운로드

 

6. 자바 소스 파일을 읽어들여서 맨 앞에 행 번호를 붙여서 화면에 출력하는 프로그램을 작성하라.

<소스코드> Chapter8_6.java

package Chapter8;
//6번
//자바 소스 파일을 읽어들여서 맨 앞에 행 번호를 붙여서 화면에 출력하는 프로그램을 작성하여라.

import java.io.FileReader;
import java.io.IOException;

public class Chapter8_6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileReader fin = null;
		try {
			fin = new FileReader("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8_5.java");
			// 텍스트 파일을 읽기
			int c;
			int count=1; // 행 번호
			while((c=fin.read())!=-1) { // 파일의 끝을 만날 때까지 문자들 하나씩 읽기
				if(count==1){ // 파일을 시작할 때 행 번호 출력
					System.out.print(count++ + " ");
					continue;
				}
				System.out.print((char)c); // 읽은 문자를 버퍼 출력 스트림에 씀
				if(c=='\n') { // 이후에 공백 문자 마다 행 번호 출력
					System.out.print(count++ + " ");
				}
				
			}
		} catch(IOException e) {
			System.out.println("파일 입출력 오류");
		}
	}

}

 

 

7. 이미지 파일 a.jpg를 b.jpg로 복사하는 프로그램을 작성하라. 한 번에 1KB 단위로 데이터를 복사하라. a.jpg는 프로젝트 폴더 밑에 있어야 한다.

<소스코드> Chapter8_7.java

package Chapter8;
//7번
//이미지 파일 a.jpg를 b.jpg로 복사하는 프로그램을 작성하라.
//한 번에 1kB 단위로 데이터를 복사하라.
//a.jpg는 프로젝트 폴더 밑에 있어야 한다.

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Chapter8_7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileInputStream fin = null; // 바이트 스트림 생성
		FileOutputStream fout =null;
		try {
			fin = new FileInputStream("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8\\a.jpg");
			fout = new FileOutputStream("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8\\b.jpg");
			int c;
			while((c = fin.read())!=-1) {
				fout.write(c); // 파일 복사하기
			}
			fin.close();
			fout.close();
			// 스트림 닫기
		} catch(IOException e) {
			System.out.println("파일 입출력 오류");
		}
	}

}

 

 

 

8. 이미지 파일 a.jpg를 b.jpg로 복사하는 프로그램을 작성하라. 복사를 진행하는 동안 10% 진행할 때마다. '*' 하나씩 출력하도록 하라.

<소스코드> Chapter8_8.java

<package Chapter8;
//8번
//이미지 파일 a.jpg를 b.jpg로 복사하는 프로그램을 작성하라.
//복사를 진행하는 동안 10% 진행할 때마다 '*' 하나씩 출력하도록 하라.

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Chapter8_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileInputStream fin = null; // 바이트 스트림 생성
		FileOutputStream fout =null;
		try {
			fin = new FileInputStream("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8\\a.jpg");
			fout = new FileOutputStream("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8\\b.jpg");
			int c;
			int total = fin.available(); // 전체 개수
			int count=0; // 현재 개수
			while((c = fin.read())!=-1) { // 파일의 끝을 만날 때 까지
				if(count==total/10) { // 10% 진행 됐을때 
					System.out.print("*");
					count=0; // 현재 진행율을 초기화
				}
				fout.write(c); // 파일 복사하기
				count++;
			}
			fin.close();
			fout.close();
			// 스트림 닫기
		} catch(IOException e) {
			System.out.println("파일 입출력 오류");
		}
	}

}
/TEXTAREA> </P>
<P> </P>
<P><SPAN style="FONT-SIZE: 12pt"><STRONG>9. OpenChallenge에 주어진 행맨 게임을 다음과 같이 수정하여 완성하라. 게임의 난이도를 사용자로부터 입력받고 난이도에 따라 숨기는 글자의 수를 3, 4, 5 등으로 조절하도록 수정하라.</STRONG></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt"><소스코드> Chapter8_9.java</SPAN></P>
<P><TEXTAREA class=brush:java; name=code>package Chapter8;
//8번
//이미지 파일 a.jpg를 b.jpg로 복사하는 프로그램을 작성하라.
//복사를 진행하는 동안 10% 진행할 때마다 '*' 하나씩 출력하도록 하라.

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Chapter8_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileInputStream fin = null; // 바이트 스트림 생성
		FileOutputStream fout =null;
		try {
			fin = new FileInputStream("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8\\a.jpg");
			fout = new FileOutputStream("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Chapter8\\b.jpg");
			int c;
			int total = fin.available(); // 전체 개수
			int count=0; // 현재 개수
			while((c = fin.read())!=-1) { // 파일의 끝을 만날 때 까지
				if(count==total/10) { // 10% 진행 됐을때 
					System.out.print("*");
					count=0; // 현재 진행율을 초기화
				}
				fout.write(c); // 파일 복사하기
				count++;
			}
			fin.close();
			fout.close();
			// 스트림 닫기
		} catch(IOException e) {
			System.out.println("파일 입출력 오류");
		}
	}

}

 

10. OpenChallenge에 주어진 행맨 게임을 다음과 같이 수정하여 완성하라. words.txt 파일에 있는 모든 단어를 25143개의 String 배열에 읽은 뒤 단어를 선택하도록 수정하라.

<소스코드> Chapter8_10.java

package Chapter8;
//10번
//OpenChallege에 주어진 행맨 게임을 다음과 같이 수정하여 완성하라.
//words.txt파일에 있는 모든 단어를 25143개의 String 배열에 읽은 뒤 단어를 선택하도록 수정하라.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Chapter8_10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int random;
		BufferedReader in = null; // 파일을 읽어오는 버퍼
		ArrayList<String> array = new ArrayList<String>(25143);
		char replay = 'y'; // 게임을 실행할 것인가
		int result; // 게임 결과
		String str;
		Scanner s = new Scanner(System.in);
		try {
			in = new BufferedReader(
					new FileReader("C:\\Users\\doqtq\\Documents\\Chapter8\\src\\Open_Challenge\\words.txt"));
			while(in.ready()) {
				array.add(in.readLine());
			}
			in.close();
		}catch(IOException e) {
			System.out.println("파일 입출력 오류");
		}
		while(replay=='y') {
			
			random = (int)(Math.random()*25142);
			str=array.get(random);
			System.out.println("지금부터 행맨 게임을 시작합니다.");
			System.out.print("몇 글자를 숨길까요?(1~"+str.length()+")");
			// 난이도를 입력받는다.
			// 단 숨길 단어의 수가 현재 단어의 글자 수를 넘어가는 것을 방지하기 위해서
			// 플레이어에게 범위 글자 수를 알려준다.
			result = startGame(str,s.nextInt());
			// 입력 받은 수는 바로 함수의 level 파라메타로 넘겨준다.
			System.out.println(str); // 정답 문자열 알려주기
			if(result==0) {
				System.out.println("5번 실패 하였습니다.");
			}
			System.out.print("Next(y/n)?");
			replay=s.next().charAt(0);
		}
	}
	static int startGame(String str, int level) {
		int fail=0; // 실패 횟수
		int success=0; // 성공 횟수
		char word[] = str.toCharArray();
		char hidden[] = str.toCharArray();
		int tmp[] = new int[level];
		Scanner s = new Scanner(System.in);
		char ch; // 플레이어에게 입력받는 한 글자
		for(int i=0;i<level;i++) { // 숨길 인덱스 랜덤 생성
			tmp[i]=(int)(Math.random()*str.length());
			for(int j=0;j<i;j++) { // 중복 제거
				if(tmp[j]==tmp[i]) {
					tmp[i]=(int)(Math.random()*str.length());
					j=-1;
					
				}
			}
			hidden[tmp[i]]='-';
		}
		int i;
		while(fail!=5) {
			System.out.println(hidden);
			System.out.print(">>");
			ch=s.next().charAt(0);
			for(i=0;i<tmp.length;i++) { 
				// 플레이어가 입력한 글자가 숨겨진 글자 중 하나와 일치하는지 검사 
				if(word[tmp[i]]==ch) {
					hidden[tmp[i]]=ch;
					success++; // 성공 카운트 하나 증가
				}
			}
			if(i==tmp.length) { // 숨겨진 글자 중 하나가 아니었을 시 
				fail++; // 실패 카운트 증가
			}
			if(success==level) { // 다 맞췄을 시 while문 빠져나가기
				break;
			}
		}
		if(fail==5) { // 실패 카운트가 5일 때
			return 0; // 실패를 반환
		} else { // 5가 아닐 때(5번 안에 성공했을 때)
			return 1; // 성공을 반환
		}
	}


}

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/Masterwork-JAVA-Programming/tree/master/Chapter8/src/Chapter8

반응형

댓글