[Java #5 / 250309] 실습

temi·2025년 3월 9일

Java

목록 보기
5/15
post-thumbnail

실습 과제를 개인정리한 글입니다.


실습

  • 남겨두면 좋을 것 같은 친구들만 몇개 남겨보았다.

가위바위보게임

  • 반복되는 부분을 어떻게 따로 뺄 수 없을까?
  • switch로 하려다가 if로 바꿨는데 비효율적인가?
  • 고민해보고 추후 수정해보는 것으로..

//	 - 사용자에게 가위, 바위, 보 중 한개를 입력하도록하고(입력방식은 숫자)
//	 - 컴퓨터가 랜덤값으로 세개중 하나의 데이터를 대입
//	 - 컴퓨터의 값과 사용자의 값을 비교하여 다음의 결과출력
//	   같으면 비겼습니다. 출력 후 다시 사용자와 컴퓨터가 선택할 수 있도록 로직구성
//	   컴퓨터가 사용자에게 이기면 컴퓨터가 이겼습니다. 출력
//	   사용자가 컴퓨터에게 이기면 사용자가 이겼습니다. 출력   
//	-  승자가 나왔으면 다시 하사겠습니까 출력 
//	    다시하면 위에 로직 다시 실행
//	    종료하면 프로그램 종료
//	- 추가 : 만일 위 내용을 쉽게 처리 했으면 프로그램 종료시 지금까지 전적을 출력

public void practice00() {
		 int userInputNum = 0, comInputNum = 0, userWins = 0, comWins = 0;
		 boolean isExit = false;
		 
		 while (!isExit) {
			 System.out.print("* 1(보), 2(가위), 3(바위) 중 하나를 골라 숫자를 입력하세요.: " );
			 userInputNum = sc.nextInt();
			 comInputNum = rd.nextInt(3) + 1;
			 System.out.println(userInputNum + ", " + comInputNum);
			 
			 //1. 비겼을 때 (다시 플레이)
			 if (comInputNum == userInputNum) {
				 System.out.println("* 비겼습니다. 다시 플레이합니다.");
				 continue;
				 
				 //* 공통: 승자가 나왔을 때 다시 하시겠습니까 출력 후 다시 할지 종료할지 받기
				 //2. 컴퓨터가 지고 유저가 이겼을 때
				 // 1 보  : 2 가위
				 // 2 가위 : 3 주먹
				 // 3 주먹 : 1 보
			 } else if ((comInputNum == 1 && userInputNum == 2) 
				 || (comInputNum == 2 && userInputNum == 3)
				 || (comInputNum == 3 && userInputNum == 1)) {
				 userWins++;
				 System.out.print("* 유저가 이겼습니다. 다시 하시려면 0번, 종료하려면 9번을 입력하세요.: ");
				 userInputNum = sc.nextInt();
				 
				 // *** 이거 계속 반복되어야하는데 어디로 빼서 어떻게 사용하지?
				 if (userInputNum == 0) {
					 System.out.println("* 다시 플레이합니다.");
					 continue;
				 } else if (userInputNum == 9) {
					 System.out.printf("* 종료합니다. 컴퓨터 승 %d번, 사용자 승 %d번", comWins, userWins);
					 isExit = true;
				 } else {
					 System.out.println("* 잘못된 입력입니다...");
					 System.out.printf("* 종료합니다. 컴퓨터 승 %d번, 사용자 승 %d번\n", comWins, userWins);					 
					 isExit = true;
				 }

			//3. 유저가 지고 컴퓨터가 이겼을 때 
			 } else if ((userInputNum == 1 && comInputNum == 2) 
					 || (userInputNum == 2 && comInputNum == 3)
					 || (userInputNum == 3 && comInputNum == 1)){
				 comWins++;
				 System.out.print("* 컴퓨터가 이겼습니다. 다시 하시려면 0번, 종료하려면 9번을 입력하세요.: ");
				 userInputNum = sc.nextInt();

				 if (userInputNum == 0) {
					 System.out.println("* 다시 플레이합니다.");
					 continue;
				 } else if (userInputNum == 9) {
					 System.out.printf("* 종료합니다. 컴퓨터 승 %d번, 사용자 승 %d번\n", comWins, userWins);
					 isExit = true;
				 } else {
					 System.out.println("* 잘못된 입력입니다...");
					 System.out.printf("* 종료합니다. 컴퓨터 승 %d번, 사용자 승 %d번\n", comWins, userWins);
					 isExit = true;
				 }
			 } else {
				 System.out.println("* 잘못된 입력입니다. 가위바위보 첫 화면으로 돌아갑니다.");
			 }
		 }

정수와 연산자를 입력 받고 입력 값에 따라 알맞은 결과를 출력

  • switch문과 boolean을 주로 사용해본 반복문
정수 두 개와 연산자를 입력 받고 입력된 연산자에 따라 알맞은 결과를 출력하세요., 해당 프로그램은 연산자 입력에 “exit”라는 값이 들어올 때까지 무한 반복하며
exit가 들어오면 “프로그램을 종료합니다.”를 출력하고 종료합니다. 
또한 연산자가 나누기이면서 두 번째 정수가 0으로 들어오면
“0으로 나눌 수 없습니다. 다시 입력해주세요.”를 출력하며, 
없는 연산자가 들어올 시 “없는 연산자입니다. 다시 입력해주세요.”라고 출력하고
두 경우 모두 처음으로 돌아가 사용자가 다시 연산자부터 입력하도록 하세요.
public void practice12(){
			boolean isExit = false;
			while (!isExit == true) {
				System.out.print("* 연산자를 입력하세요(+, -, *, /, %): ");
				String inputOperator = sc.next();
				
				if (inputOperator.equals("exit")) {
					 System.out.println("* 프로그램을 종료합니다. ");
					isExit = true;
					break;
				}
					
				System.out.print("* 숫자 a를 입력하세요: ");
				int inputNumA = sc.nextInt();
				System.out.print("* 숫자 b를 입력하세요: ");
				int inputNumB = sc.nextInt();
				
				switch (inputOperator) {
					case "+":
						System.out.printf("%d %s %d = %d\n ", inputNumA, inputOperator, inputNumB, inputNumA + inputNumB);
						break;
					case "-":
						System.out.printf("%d %s %d = %d\n ", inputNumA, inputOperator, inputNumB, inputNumA - inputNumB);
						break;
					case "*":
						System.out.printf("%d %s %d = %d\n ", inputNumA, inputOperator, inputNumB, inputNumA * inputNumB);
						break;
					case "/":
						if (inputNumB == 0) {
							 System.out.println("* 0으로 나눌 수 없습니다. 다시 입력해주세요. ");
							 continue;
						}
						System.out.printf("%d %s %d = %.2f\n ", inputNumA, inputOperator, inputNumB, (double)inputNumA / inputNumB);
						break;
					case "%":
						if (inputNumB == 0) {
							 System.out.println("* 0으로 나머지를 구할 수 없습니다. 다시 입력해주세요. ");
							 continue;
						}
						System.out.printf("%d %s %d = %d\n", inputNumA, inputOperator, inputNumB, inputNumA % inputNumB);
						break;
					
					default:
						System.out.println("* 없는 연산자입니다. 다시 입력해주세요. ");
						continue;
				}
			}
		}

사용자로부터 두 개의 값을 입력 받아 그 사이의 숫자를 모두 출력

  • 중간중간 If문으로 나눠주다가 조건문이 조금 꼬였어서 기억에 남는 문제
  • 더 익숙해지면 이런 꼬이는 일이 덜하면 좋을텐데..
//		 사용자로부터 두 개의 값을 입력 받아 그 사이의 숫자를 모두 출력하세요. 
//		“1 이상의 숫자를 입력해주세요”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
public void practice07(){
	while (true) {
		 System.out.print("* 첫번째 숫자를 입력하세요: ");
		 int inputNumA = sc.nextInt();
		 if (inputNumA < 1) {
			 System.out.println("* 1 이상의 숫자를 입력하세요");
			 continue;
		 }
			 
		 System.out.print("* 첫번째 숫자보다 큰 두번째 숫자를 입력하세요: ");
		 int inputNumB = sc.nextInt();	
		 if (inputNumA >= 1 && inputNumB >= 1) {
			 if (inputNumA >= inputNumB) {
				 System.out.println("*경고: 두번째 숫자를 더 큰 숫자로 입력하세요");
			 } else if (inputNumA < inputNumB) {
				 for (;inputNumA <= inputNumB; inputNumA++) {
					 System.out.print(inputNumA + " ");
				 }
				 break;
			 }
		 } else {
			 System.out.println("* 1 이상의 숫자를 입력하세요");
		 }	
	}
}

미리 준비

  • 월요일을 위한 체력…

느낀점

  • 집에서 개발 공부를 하는 버릇이 잘 들면 좋을 것 같다..
  • 강사님이 주신 실습을 다 풀어서 뿌듯하다~!
  • 책상 세팅을 좀 바꿨는데 공부하기 좋은 것 같다! 집중안되면 책상 위 배치를 좀 개발하기 좋도록 세팅하는 것도 좋은듯?

profile
250304~

0개의 댓글