JAVA/코드

과제 1번 - 입출력(IO)을 이용한 업다운 게임

record2080 2025. 1. 21. 23:40

문제)test.txt 파일에 1~100 사이의 정수를 하나 입력한 후 저장합니다.
사용자와 업다운게임을 진행합니다.
test.txt 파일에 저장된 정수가 80이라면,
1~100 사이의 정수입력 >> 50
업!
51~100 사이의 정수입력 >> 90
다운!
51~89 사이의 정수입력 >> 80
정답입니다!
총 3번만에 정답을 맞추셨습니다.
라고 출력해주세요.
그리고 "총 3번만에 정답을 맞추셨습니다."라는 내용의 result.txt 파일을 생성해주세요.
+) 오류사항에 대하여
1~90 사이의 정수입력 >> 91
잘못된 입력입니다! 범위에 맞게 입력해주세요!
1~19 사이의 정수입력 >> 사과
잘못된 입력입니다! 정수로 입력해주세요!
이렇게 오류 문구를 출력해주시고, 이는 정답맞추기 시도횟수 카운팅 대상이 아닙니다.

 

한글코딩
test.txt파일에 정수 입력 하나 해줌 
경로를 입력하는 코드로 작성(path)
텍스파일에 정수를 하나 입력한 후 저장
io

//사용자와 업다운 게임지정
입력받아야 하니 스캐너가 필요

언제까지 정답을 맞춰야 될 지모르는 얼만큼 돌릴지 모르는  반복문
첫번째 범위(1~100)
1~100까지의 정수입력 할 수 있게 해줌
만약 텍스트에 있는 정수값과 비교해서 위면 업
아래면 다운

만약 입력한 값보다  업이면 업을 출력하고 다운이면 다운을 출력함

두번째 범위(입력정수+-1)
위에서 나온 입력정수가 업이라면 입력정수 +1에서 100까지
다운이라면 입력정수 -1 에서 1까지

 
세번째 범위
정수를 하나 입력하게 하고 
첫번째 정수값(+1,-1)과 두번째 정수 값 사이의 값(+1,-1)을 범위로 설정해준다
  (업일 때는 +1 다운 일 때는  -1)


 
답이 나올 떄까지 반복
답이 나오면 반복문 종료하고
총 n번만에 정답을 맞추셨습니다 라고 출력

그리고 io기능을 이용해서 결과파일 생성
(총 n번만에 정답을 맞추셨습니다)이 문구를 텍스트파일로 만듦

+오류사항 //유효성 검사
트라이캐치문으로 범위밖의 정수와 자료형이 다른 값을 걸러냄.

그리고 정답맞추기 시도횟수(n번) 카운팅 대상에 넣지 않는다.
오류는 세지 않는다;;

 

package pratict01;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Practice03 {
	public static void main(String[] args) {
		//컴퓨터에 저장되었던 내용 불러오기
		//문제하나) 어떻게 텍스트파일에 들어있는 정수를 정수로 저장하는가??
		//interger.을 해서 읽은 문자열을 정수 변환하는 함수로 바꿈.
		String path ="D:\\JANG\\resource\\";
		String fileName = "test.txt";

		int num=-1; //파일에서 읽은 정수를 저장할 변수 (int는 기본값이 -1 null이 아니다.)
		//맞힐 숫자
		try {
			FileReader fr=new FileReader (path+fileName);//단지 읽어주기만
			BufferedReader br = new BufferedReader(fr);//입력받기전 버퍼리더

			String msg=br.readLine();//파일에서 한줄 읽기

			if(msg!=null) {
				try {
					num=Integer.parseInt(msg); //읽은 문자열을 정수로 변환★
					System.out.println("텍스트파일에 있는 정수는>>" +num);
				} catch (NumberFormatException e) {
					System.out.println("읽을 수 없습니다");
				}

			}else {
				System.out.println("내용이 없습니다");
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();

		} catch (IOException e) {//String msg=br.readLine()을 써서 발생한 캐치
			e.printStackTrace();
		}

		//업다운 게임 시작.
		Scanner sc=new Scanner(System.in);
		int inputNum; //사용자가 입력할 번호
		int n=0;//n번의 시도
		int rangeStart=1;
		int rangeEnd=100;

		while(true) {
			try {
				System.out.print("숫자를 입력해주세요(1~100까지)>>");
				inputNum=sc.nextInt();

				if(1>inputNum||inputNum>100) {
					System.out.println("잘못된 입력입니다.1부터 100까지의 숫자만 넣어주세요");
					continue; //잘못된 입력의 경우, 카운트 하지 않는다.
				}
				else if (inputNum==num) {
					System.out.println("정답입니다^^");
					break;
				}
				else if(inputNum<num) {//77보다 낮은 숫자를 넣으면 업이라고 출력해야 한다
					System.out.println("업!");
					rangeStart=inputNum+1;
					n++;
					System.out.println(rangeStart+"부터 100까지의 숫자를 넣어주세요");
				}
				else {
					System.out.println("다운!");
					rangeEnd=inputNum-1;
					n++;
					System.out.println("1부터"+rangeEnd+"까지의 숫자를 넣어주세요");

				}

			} catch (Exception e) {
				System.out.println("잘못된 입력입니다. 다시 입력해주세요");
				sc.nextLine();
				e.printStackTrace();
			}
		}
		System.out.println("총" +n+"번만에 정답을 맞추셨습니다. 축하합니다");
         
		//위 결과를 경로를 지정해 저장
		//문제 둘 - 결과를 내보내기 (출력w)
		//result.txt에 저장하자
		String resultMsg="총" +n+"번만에 정답을 맞추셨습니다. 축하합니다";
		BufferedWriter bw=null;
	      
		 try {
			bw = new BufferedWriter(new FileWriter(path + "result.txt"));
			 bw.write(resultMsg);
			 System.out.println("결과가 result.txt에 저장되었습니다.");
		} catch (IOException e) {
			System.out.println("파일저장을 실패했습니다.");
			e.printStackTrace();
		}
		
	}
}//입출력시 반드시 닫아야 하는데 생략;;

 

 

심화)  1~5번만에 정답을 맞추면 금메달 이미지를,
6~번만에 정답을 맞추면 기본 이미지를 resource 폴더에 저장해주세요.

'JAVA > 코드' 카테고리의 다른 글

강의 2일차 문제풀기- 조건문  (0) 2025.01.29
과제 2번 - Thread 와 동기화  (0) 2025.01.22
컬렉션 프레임워크 문제풀기  (0) 2025.01.21
컬렉션 프레임워크 문제(과제)  (0) 2025.01.21
TEAM과제 -삼중상속  (0) 2025.01.18