0224 Review

KDU·2022년 2월 24일
0

자바공부

목록 보기
8/17

코딩을 하다보면, 생각보다 단순한 식으로 해결될 수 있는 것들에 놀란다.

 문자열을 char로 변환 후 그것을 랜덤으로 재배열해 문제로 출제하고, 그 문제를 맞추는 소스였는데, 이것저것 집어넣어보고 고민하다가 너무도 단순한 방법으로 해결될 수 있다는 사실에 놀랐다. 이런 예제들이나 소스들을 만나면서, 더 많은 예제들과 소스들을 접해서 실수와 비효율적인 코딩을 줄여나가자는 다짐을 하게 된다.

오늘의 코드

  1. 숫자야구 리뉴얼
    (변수위치 정리, user입력값 int > String으로 변경으로 수학식 제거)
package chap06;

import java.util.Scanner;

public class BaseballGame {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		int count = 0;
		
		
		int a;
		int b;
		int c;
		//겹치지 않는 난수 생성기
		while(true) {
			a = (int)(Math.random()*9)+1;
			b = (int)(Math.random()*9)+1;
			c = (int)(Math.random()*9)+1;
			if(a!=b && b!=c && c!=a) {
				break;
			}
		}
		
		
		int userA;
		int userB;
		int userC;
		//user값 입력 + 야구 계산문
		System.out.println("세 자리 숫자를 입력하세요.");
		while(true) {
			String user = scan.next();
			
			//자릿수 에러 처리
			if(user.length()<3) {
				System.out.println("Error : 세자릿수를 입력하세요.");
				continue;
			}
			userA = user.charAt(0)-'0';
			userB = user.charAt(1)-'0';
			userC = user.charAt(2)-'0';
			
			//0 or 겹치는 숫자 처리
			if(userA==0 || userB==0 || userC==0) {
				System.out.println("Error : 0은 입력할 수 없습니다.");
				continue;
			} else if(userA==userB || userB==userC || userC==userA) {
				System.out.println("Error : 겹치지 않는 숫자를 입력하세요.");			
				continue;
			}
			
			//계산 시작과 Strike, Ball, Out 초기화
			int strike = 0;
			int ball = 0;
			int out = 0;
			count++;
			
			if(a==userA) {
				strike++;
			} else if (a==userB || a==userC) {
				ball++;
			} else {
				out++;
			}
			
			if(b==userB) {
				strike++;
			} else if (b==userC || b==userA) {
				ball++;
			} else {
				out++;
			}
			
			if(c==userC) {
				strike++;
			} else if (c==userB || c==userA) {
				ball++;
			} else {
				out++;
			}
			
			System.out.printf("숫자 '%s%s%s' - Strike:%s, Ball:%s, Out:%s (시도횟수:%s)\n",userA,userB,userC,strike,ball,out,count);
			if(strike==3) {
				System.out.println("게임에서 이겼습니다!");
				scan.close();
				break;
			}
		}

	}

}
  1. 이전부터 궁금했던 nextint vs Math.random
    (꽤 많이 돌려봤지만 딱히 특정 숫자에 편향된다거나 한 건 둘다 보이지 않음. 그냥 편한걸로 골라 쓰면 될 듯)
package study0224;

import java.util.Random;

public class VarNumEx {

	public static void main(String[] args) {
		
		Random num = new Random();
		int[] arr1 = new int[100];
		int[] arr2 = new int[10];
		int max1 = 0;
		int max2 = 0;
		
		System.out.println("nextInt 사용시");
		for(int maxNum=0; maxNum<10000; maxNum++) {
			for(int i=0; i<arr1.length; i++) {
				int a = num.nextInt(10);
				arr1[i] = a;
			}
			
			for(int i=0; i<arr1.length; i++) {
				int tmp=arr1[i];
				for(int j=0; j<arr2.length; j++) {
					if(tmp==j) {
						arr2[j]++;
					}
				}
			}
		}
		
		for(int i=0; i<arr2.length; i++) {
			System.out.printf("%s : %s개\n",i,arr2[i]);
			max1 += arr2[i];
		}			
		System.out.println(max1);
		
		
		System.out.println();
		
		
		
		int[] arr1_Math = new int[100];
		int[] arr2_Math = new int[10];
		
		
		System.out.println("Math.random() 사용시");
		for(int maxNum=0; maxNum<10000; maxNum++) {
			for(int i=0; i<arr1_Math.length; i++) {
				int a = (int)(Math.random()*10);
				arr1_Math[i] = a;
			}
			
			for(int i=0; i<arr1_Math.length; i++) {
				int tmp=arr1_Math[i];
				for(int j=0; j<arr2_Math.length; j++) {
					if(tmp==j) {
						arr2_Math[j]++;
					}
				}
			}
			
		}
		
		for(int i=0; i<arr2_Math.length; i++) {
			System.out.printf("%s : %s개\n",i,arr2_Math[i]);
			max2 += arr2_Math[i];
		}
		System.out.println(max2);
		
	}

}
  1. 도형 시계방향 90도 회전
package study0224;

public class ArrExFigureSpin {

	public static void main(String[] args) {
		
		char[][] star = {
				{'*','*',' ',' ',' '},
				{'*','*',' ',' ',' '},
				{'*','*','*','*','*'},
				{'*','*','*','*','*'},
		};
		
		char[][] result = new char[star[0].length][star.length];
		
		for(int i=0; i<star.length; i++) {
			for(int j=0; j<star[i].length; j++) {
				System.out.print(star[i][j]+" ");
			}
			System.out.println();
		}
		
		System.out.println();
		
		for(int i=0; i<star.length; i++) {
			for(int j=0; j<star[i].length; j++) {
				int x = star.length-1;
				result[j][i] = star[x-i][j];
			}
		}
		
		for(int i=0; i<result.length; i++) {
			for(int j=0; j<result[i].length; j++) {
				System.out.print(result[i][j]+" ");
			}
			System.out.println();
		}
		
	}

}
profile
의문을 즐깁니다.

0개의 댓글

관련 채용 정보