문제)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 |