Developer/JAVA

JAVA, Random 클래스와 Math.random() 메서드

단님 2024. 7. 31. 01:23
728x90
사용방법

 

  • Random 클래스 
Random random = new Random();
int happynumber = random.nextInt(10)+1;

 

  • Random.nextInt() 메서드

nextInt의 메서드는 조금 알아보면 재밌다.

소괄호 안의 인자값은 0부터 시작한 수의 갯수의 값(length) 이라고 보면되고 ,

(10) 은

0~9 까지의 수에서

 +1 이라는 최소값을 줌으로서 , 한칸씩 옆으로 쉬프트 한 계산법이다.

1~10까지의 수를 말하게 된다.

(10) 만 사용하게 된다면 , 0~9 의 숫자 즉, 10 미만이지만

(10)+1 을 하게되면 1 이상 10 이하의 숫자가 된다.

이상 이하로만 계산하게 되면 계산이 달라질 수 있기 때문에 한번 생각해보면 어렵지 않게 접근할 수 있을것이다.

 

 

  • Math.Random() 메서드
int happynumber = (int)(Math.random()*10)+1;
//* 뒤에는 최대값 + 뒤에는 최소값 사이의 임의 정수를 제공

random 메서드 또한 위와 같은 계산인데 ,

Math.random은 실수형으로 나옴으로 *10을 해주고 int형으로 형변환을 해준다.

(Math.random()*10)+1 라는 식에서 표현법이 다르니 주의하면 된다.

Scanner + Random + switch 를 이용한 예제
숫자 맞추기 게임
1~10 범위에서 숫자 하나를 입력받아
Random 클래스의 추출번호 와 일치하면 금메달
차이가 1 이면 은메달, 차이가 2면 동메달, 아니면 꽝
  • Random 클래스를 이용
Scanner scanner=new Scanner(System.in);
//당첨번호 정하기 -> 임의의 수를 추출하는 메서드 (Random(클래스) / Math.Random(Math의 메서드))
Random random = new Random();

int happynumber = random.nextInt(10)+1; 

System.out.println("1~10의 수를 입력하세요");

int mynumber = Integer.parseInt(scanner.nextLine());

switch (Math.abs(mynumber-happynumber)) { // 절대값을 나오게 하는 Math 의 메서드 abs
case 0:
	System.out.println("금메달");
	break;
case 1:
	System.out.println("은메달");
	break;
case 2:
	System.out.println("동메달");
	break;
default:
	System.out.println("꽝");
	break;
}

System.out.printf("입력번호는 %d , 당첨번호는 %d , 절대값 차는 %d", mynumber , happynumber , Math.abs(happynumber-mynumber));
			
scanner.close();

 

금메달 ! 올레 !

  • Math.random 메서드 이용
Scanner scanner=new Scanner(System.in);
	//Math.random은  실수형으로 나옴 
int happynumber = (int)(Math.random()*10)+1;

System.out.println("1~10의 수를 입력하세요");
int mynumber = Integer.parseInt(scanner.nextLine());
switch (Math.abs(mynumber-happynumber)) { // 절대값을 나오게 하는 Math 의 메서드 abs
case 0:
	System.out.println("금메달");
	break;
case 1:
	System.out.println("은메달");
	break;
case 2:
	System.out.println("동메달");
	break;
default:
	System.out.println("꽝");
	break;
}
System.out.printf("입력번호는 %d , 당첨번호는 %d , 절대값 차는 %d", mynumber , happynumber , Math.abs(happynumber-mynumber));


scanner.close();

 

금메달이 나올때 까지 무한 루프를 만드는 예제
Scanner sc = new Scanner(System.in);
int count = 0;
Random random = new Random();
int happynumber = random.nextInt(10)+1;
while (true) {
	System.out.println("1~10까지의 수를 입력하세요");
	int newnumber = Integer.parseInt(sc.nextLine());
	switch (Math.abs(happynumber-newnumber)) {
	case 0:
		System.out.println("금메달 종료 !" );
		break;
	case 1:
		System.out.println("은메달 다시도전 !" );
		break;
	case 2:
		System.out.println("동메달 다시도전 !" );
		break;
	default:
		System.out.println("꽝 다시도전 !" );
		break;
	}
	count++;
	if(Math.abs(happynumber-newnumber)==0) {
		System.out.printf("도전횟수 %d ,  성공을 축하드립니다",count);
		break;
	}
}