JAVA Thread 클래스
이번 숙제는
Thread 클래스를 이용하여 코드를 작성하는 것이다.
//Quiz Thread클래스를 만들어 스레드를 상속받는다.
//startGame() 메서드를 만들고 그 안에서 1~100사이의
//난수 두개를 더하는 문제를 출제
//키보드에서 답을 입력하여 5문제가 정답처리 될때까지 로직을 반복한다
//정답을 맞히고 난 후에 모든 문제를 맞히는데 몇 초가 걸렸는지를 화면에 출력하며
//프로그램 종료
// QuizMain 클래스에서는
//QuizThread qt = new QuizThread();
//qt.start(); 스레드 구동
//qt.startGame(); 문제풀이 함수
//위 세줄 외에는 다른 코드는 추가하지 않도록 한다.
//단, 사용자가 문제의 정답으로 정수 이외의 문자를 입력했을경우
//"정답은 정수로 입력하세요" 라는 문장이 출력되도록한다.
// ---------- 실행결과 ------------
/* 23+48 =71
* 정답!!
* 66+100=166
* 정답!!
* .
* .
*
* 결과: 24초...
* */
위와 같이 문제를 코딩해보자
정작 5시간(?)에 걸쳐
정수가 아닌 이외의 문자를 입력했을때의
출력을 제외하고 성공 하였다..
이부분은 더 추가 할 예정.
package ex5_Thread;
import java.util.Scanner;
public class QuizMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("------- 실행 결과 --------- ");
QuizThread qt = new QuizThread();
Thread th = new Thread(qt);
th.start();
// th.startGame();
}
}
매인 클래스에서 짠 코드다.
import java.util.Scanner;
public class QuizThread implements Runnable {
long start = System.currentTimeMillis();
Random rnd = new Random();
int n;
int m;
int total;
Scanner sc = new Scanner(System.in);
public void startGame() {
n = rnd.nextInt(100)+1;
m = rnd.nextInt(100)+1;
System.out.println(n+m);
}
@Override
public void run() {
for(int i=0; i < 5; i++) {
int n = new Random().nextInt(100);
int m = new Random().nextInt(100);
System.out.printf("%d + %d = ",n,m);
int total=sc.nextInt();
// try {
// System.out.println("정수를 입력하세요");
// result = sc.nextInt();
// } catch (Exception e) {
// System.out.println("정수만 입력 가능");
//
// }
if(total != (n+m)) {
System.out.println("틀렸습니다.");
} else {
System.out.println("정답!!");
}
}
long end = System.currentTimeMillis();
System.out.println("결과 : " + (end - start)/1000.0 +"초");
}
}
이건 Main 클래스에 넣어줄 값을
작성한 코드방식이다.
나의 코딩 연대기,..
처음 풀었을때는
가관이었다..
그냥 문제가 똑같은 문제에 반복해서 나오고...
정답을 쓰면 바로 프로그램이 끝났다.
그다음엔
total값을 for문안에 넣었더니 그나마 나오기 시작했다.
하지만 그래도 문제는 똑.같.다
이번엔 정답!이란는 문장이 출력하는것에 성공했다.
하지만 아직 문제는 똑.같.다
그래도 if문과 else문에 return; , break; contunue;를 추가해보면서 여기까지 성공하였다.
정상이 보이기 시작했다고 느낀 부분이였다.
여기서는 이제 문제가 랜덤으로 나오기 시작했다.
하지만 문제를 틀리면 프로그램이 멈췄었다..
여기선 이제 틀렸을때도 문제가 계속 나오고
시간초 까지 계산하는것을 구글링하여 찾아
작성하였다.
한문제당 걸린 시간 나오는것도 나쁘지는 않았다.
이번엔 대망의 정답코드의 결과
한 문제당 걸린 시간이 나온것도 괜찮지만
총 걸린시간으로 나오는것도 깔끔하고 괜찮은거 같다.
이 프로그램을 작성하는데 꽤가 긴 여정이을 겪었다,...
지우고 찾고, While 문으로 작성해야하나>? 하고 While문으로 해보려 도전하고
for문에 while문이 들어가는가?
while문에 for문이 들어가는가?
그래서 시도도 해보고 진짜 여러 생각과 시도를 하게 해준 문제였다.
다음에 해볼 시도는
틀린문제를 다시 풀게 할수있는가?
그리고 정수가 아닌 다른 문장을 사용하면
정수입력하라고 출력되게 하는것
성공하고 올려보도록 하겠습니다.
개발자가 되는 그날까지...