Java

[Java] Random 응용, 배열

Rosie_dev 2021. 1. 18. 19:41

Random 응용과 예제 - 가위바위보 게임 만들기


Random rd = new Random(); 랜덤객체 생성으로 if, else if 문으로 각 경우의 수에 따른 출력값을 작성해주면 된다. 숫자가 아닌 경우는 NumberformatException 을 만들고,  메뉴 외의 수가 입력된 경우는 다시 입력할 수 있도록 코드를 작성한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (userNum!=4) {     //1~3을 낸 경우
int pcNum = rnd.nextInt(3-1+1)+1;
 
//사용자가 이긴 경우
if((pcNum==1&&userNum==2|| (pcNum==2&&userNum==3|| (pcNum==3&&userNum==1)) {
msg = ">>> 사용자님이 이겼습니다!!\n";
}
//pc가 이긴 경우
else if((pcNum==2&&userNum==1|| (pcNum==3&&userNum==2|| (pcNum==1&&userNum==3)) {
msg = ">>> pc가 이겼습니다!!\n";
//사용자와 pc가 비긴 경우
else  msg = ">>> 비겼습니다!!\n";      
}
cs

 

 

배열


동일한 데이터타입을 가지는 여러 개의 데이터를 저장할 수 있는 데이터 타입이다.  배열도 객체의 하나.

배열의 선언방법은 int[] subjectArr4 = {100,90,95,70,60,100,98}; 로 직접 데이터 값을 대입해주는 것이 일반적이다. 배열 선언시, 아래와 같이 객체 선언을 통해 배열의 크기를 선정한 후, 각 인덱스값에 하나씩 데이터 값을 대입해 줄 수도 있다.

배열명.length는  배열의 길이(크기)를 나타내는 int 값이다. 배열 내용을 인덱스 하나하나 검사하고자 할 때, for 문에서 조건식의 기준으로 사용할 수 있다.

 

1
2
3
4
5
6
7
8
int[] subjectArr;
subjectArr = new int[7];
        
int[] subjectArr2 = new int[7];
 
int[] subjectArr3 = new int[] {100,90,95,70,60,100,98};
            
int[] subjectArr4 = {100,90,95,70,60,100,98};
cs

 

응용예제1 - 회원가입 객체를 배열에 대입하기

 

입력받은 비밀번호의 조건 확인을 위해 static 메서드를 이용한다. static 메서드는 다른 패키지 내 사용이 가능한 접근제어자인 static 이 적용된 메서드이다. 조건을 만족하면 참으로 변수에 입력받은 비밀번호를 대입하고 그 외의 경우에는 경고문구를 작성하고 다시 비밀번호를 입력받을 수 있게 한다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package my.day09.a.array;
 
import java.util.Scanner;
 
import my.util.MyUtil;
 
public class MemberMain3 {
 
    public static void main(String[] args) {
        
        Member2[] mbrArr = new Member2[3];
        
    /*    
        for(int i=0; i<mbrArr.length; i++) {
            System.out.println(mbrArr[i]);
        }
 
            null
            null
            null
    */    
        
        Scanner sc = new Scanner(System.in);
        
        System.out.println(">>> 회원가입");
        
        int menuNo = 0;
        
        do {
            System.out.println("\n=========== >> 메뉴 << ==========");
            System.out.println("1. 회원가입 2.모든회원조회 3.프로그램종료");
            System.out.print("▷ 선택하세요 => ");
            try {
                menuNo = Integer.parseInt(sc.nextLine());
                if(!(1<= menuNo && menuNo <=3)) {
                    System.out.println(">> 메뉴에 없는 번호입니다 \n");
                    continue;
                }
                
                switch (menuNo) {
                case 1:  //회원가입
                    Member2 mbr = new Member2();
                    
                    System.out.print("\n1. 아이디 : ");
                    mbr.id = sc.nextLine();
                    
                    boolean bool = false;
                    do {
                        System.out.print("2. 비밀번호 : ");
                        String passwd = sc.nextLine();
                        bool = MyUtil.isCheckPasswd(passwd);
                        if(bool) {
                            mbr.passwd = passwd;
                        } else {
                            System.out.println(">> 비밀번호는 8~15 자리 정수로 입력해야 하며, 대소문자, 숫자, 특수문자가 혼합되어야 합니다!!\n");
                        }
                    } while(!(bool==true));
                                        
                    System.out.print("3. 성명 : ");
                    mbr.name = sc.nextLine();
                    
                    for (int i=0; i<mbrArr.length; i++) {
                        if (mbrArr[i] == null) {
                            mbrArr[i] = mbr;  //한 번 index에 대입해야 한다. 계속 새로운 값으로 바뀌면 안됨.
                            break;
                        }
                    }
                                        
                    break;
                    
                case 2:  //모든회원조회
                    
                    int nullCount = 0;
                    
                    for(int i=0; i<mbrArr.length; i++) {
                        if(mbrArr[i]!=null) {        //null 여부 꼭 확인하기
                            System.out.println(mbrArr[i].showInfo());
                        } else nullCount++;
                    } 
                    if(nullCount==mbrArr.length)
                        System.out.println("\n가입된 회원이  0명 입니다.");
                    break;
 
                default:
                    break;
                }
                
            } catch (NumberFormatException e) {
                System.out.println(">> 정수만 입력하세요! <<\n");
            }
            
        } while (!(menuNo==3));
                
        sc.close();    
        System.out.println(">> 프로그램 종료 <<");
 
 
    }
 
}
cs

 

응용예제2 - 문자열 내 공백제거하기

 

문자열 내 공백을 제거하기 위해서는 문자열을 받은 배열과 공백을 제거한 문자열을 입력받을 배열을 생성해야 한다.

문자열 변수명.toCharArray(); 는 char 배열로 만들어 대입하는데 사용된다. 그리고 문자가 없이 ' '으로 초기화 되어 있는 공백수를 세서 새로운 배열 크기를 설정할 수 있다. 

배열2=배열1 값을 대입해 줄 때, 만약 공백이라면 배열2의 인덱스 변수는 j--; 와 같이 공백 없이 입력될 수 있도록 해야 한다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package my.day09.b.array;
 
public class SpaceDeleteMain1 {
 
    public static void main(String[] args) {
 
        String str = "  korea   seou l 쌍용 강북 교육센터  ";
        
        char[] chArr = str.toCharArray();
 
        int len = 0;
        
        for (int i=0; i<chArr.length; i++) {
            if(chArr[i]!=' ') {
                len++;
            }
        }
        
        char[] resultchArr = new char[len];
    
        for(int i=0, j=0; i<chArr.length; i++, j++) {
            if(chArr[i] !=' ') {
                resultchArr[j] = chArr[i];
            } else j--;
        }
        System.out.println(String.valueOf(resultchArr));    
    }
}
 
cs

 

응용예제3 - 로또 숫자 출력하기

 

전체 숫자에서 로또 당첨 숫자를 출력하는 코드를 만들기. 전체 숫자와 당첨숫자를 각각 배열로 생성해야 한다. 이 때, 주의해야 할 점은 입력된 당첨숫자가 겹치면 안되기 때문에 난수가 배열에 있는지 확인해야 한다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package my.day09.b.array;
 
import java.util.Random;
 
public class LottoMain2 {
 
    public static void main(String[] args) {
 
        int[] ballArr = new int[45];
        int[] tempArr = new int[5]; //기존에 뽑았던 방번호를 기억시켜주는 저장소가 필요
 
        for (int i=0; i<ballArr.length; i++) {
            ballArr[i] = i+1//배열의 방마다 데이터값 입력하기
                                //데이터값은 1~45
        }
        
        for (int i=0; i<tempArr.length; i++) {
            tempArr[i] = -1;    
        }
        
        Random rnd = new Random();
        String result = "";
        
        front:
        for (int i=0; i<6; i++) {
            int idx = rnd.nextInt(45);
            for (int j=0; j<tempArr.length; j++) {
                if(idx == tempArr[j]) {
                    i--;
                    continue front;   //난수를 발생시켜주는 바깥 for문으로 가야한다.
                }
            }
            if(i<5) {
                tempArr[i] = idx;                
            }
            
            String comma = (i<5)?",":"";
            result += ballArr[idx]+comma;
        }//end of for -----------------------------        
        System.out.println("\n로또 1등 당첨번호 : "+result);
    }
}
cs

'Java' 카테고리의 다른 글

[Java] 람다식(Lambda)  (0) 2021.01.28
[Java] 배열, 버블정렬  (0) 2021.01.19
[Java] While , do-While, Math.random() 메서드, Random() 클래스  (0) 2021.01.16
[Java] For 문 응용, 다중 For문  (0) 2021.01.15
[Java] For 문, 예제  (0) 2021.01.13
댓글