배열 개념

더보기
package day0913;
/*배열[Array]
 * 배열이란 우리가 지정한 갯수만큼의 똑같은 데이터타입의 변수들을
 * 한개의 이름으로 묶어서 처리를 하는 자료형이다.
 * 
 * 예를 들어서, 우리가 점수 4개를 score1, score2, score3, score4 이렇게
 * 따로따로 변수를 만드는 것이 아니라 길이가 4인 int 배열을 만들어서
 * 0번쨰 칸, 1번째칸, 2번째칸, 3번째 칸에 각각 값을 저장하거나 호출하는 방식으로 사용하겠다 라는 의미가 된다.
 * 
 * 배열의 경우, 참조형 데이터타입이므로 다음과 같은 방법으로 초기화해야한다.
 * 데이터타입[] 배열이름 = new 데이터타입[길이];
 * new 라는 키워트는 heap영역에
 * 공간을 배정한다는 의미이다.
 */

public class Ex02Array {
    public static void main(String[] args) {
        
        //int 배열 intArray를 선언해보자
        int[] intArray;
        
        /*배열을 초기화 할때에는 해당 배열이
         * 총 몇개의 변수를 관리할 것인지를 반드시 지정해주어야 한다.
         * 좀 더 쉬운 표현으론 총 몇칸짜리 배열인지를 지정해주어야 한다.
         */
        
        //intArray를 3칸짜리 배열로 초기화해보자
        intArray = new int[3];
        
        /*우리가 일반적인 int 변수는
         * 각각의 int 변수의 이름을 호출하여 고나리하였지만
         * 배열일 댸에는 이름이 아니라 칸의 번호를 호출하여 관리한다.
         * 칸의 번호는 0부터 시작하여 총 길이 -1 이 마지막 칸의 번호가 된다.
         * 
         * 지금 우리 intArray는 총 길이가 3이므로
         * 0, 1, 2가 칸의 번호가 된다.
         * 이 칸의 번호는 우리가 앞으로 인덱스라고 부르게 된다.
         * 
         * 배열에 특정 인덱스번 칸에 값을 넣을 때에는
         * 배열이름[인덱스] = 값;
         * 으로 넣을 수 있다.
         */
        intArray[0] = 40;
        intArray[1] = 27;
        intArray[2] = 33;
        
        /*배열에 특정 인덱스번 칸에 있는 값을 호출할 때에는
         * 배열이름[인덱스]로 호출할 수 있다.
         */
        System.out.println("intArray[0]: "+intArray[0]);
        System.out.println("intArray[1]: "+intArray[1]);
        System.out.println("intArray[2]: "+intArray[2]);

        
        
        /*배열에 관한 팁들 */
         //1. 초기화 시에 크기는 우리가 다른 변수를 사용하여 초기화해줄 수 있다.
        int size = 4;
        intArray = new int[size];
        
        // 2. 해당 배열의 길이는
        //    배열이름.length로 알아볼 수 있다.
        System.out.println("intArray.length: "+intArray.length);
        
        // 3. 우리가 특정 인덱스의 값을 출력하거나 값을 저장할 떄에는
        //  인덱스의 값을 직접 써줘도 되지만 int 변수를 적어주어도 된다.
        //  특히, 배열 전체의 인덱스를 차례대로 호출 할 때에는
        //  우리가 for문을 사용하면 된다!
        for(int i = 0; i < intArray.length; i++) {
            System.out.printf("intArray[%d]: %d\n", i, intArray[i]);
        }
        
        // 4. 만약 존재하지 많는 인덱스를 호출하면
        //    당연히 에러가 발생한다.
        //System.out.println("intArray[-1]: "+intArray[-1]);  //범위를 벗어나는 인덱스. 인덱스는 0부터 시작!
        //System.out.println("intArray[5]: "+intArray[5]); //정해둔 인덱스 범위를 벗어남
        
        // 5. 기본형 데이터타입의 배열일 경우 초기화하면 모든 인덱스가 0으로 초기화된다.
        //    참조형 데이터타입의 배열일 경우 초기화하면 모든 인덱스가 null로 초기화된다.
        //    null이란, 참조형 데이터타입에서만 발견되는 특수한 상태로써
        //    주소값은 부여가 되어있지만 해당 주소값을 참조하여 heap 영역으로 가면
        //    아직 해당 공간이 확보가 안되어있는 상태이다.
        //    null일 때에는 아무것도 실행시킬 수 없다.
        
        
        
    }

}

 

다차원 배열

더보기
package day0914;
/*다차원 배열
 *배열은 똑같은 데이터타입을 모아둔 하나의 데이터타입이다.
 *그렇기 때문에 배열을 모아둔 배열도 가능하다.
 *이렇게 배열을 모아둔 배열을 우리는 이차원 혹은 다차원 배열이라고 한다.
 *
 *2차원 배열을 좀더 쉽게 이해하려면
 *표를 그려본다고 생각하면 좋다.
 *
 *2차원 배열의 선언과 초기화는 다음과 같다.
 *int[][] 배열이름 = new int[배열의 갯수][각 배열의 칸수]
 *
 */


public class Ex03MultiArray {
    public static void main(String[] args) {
        int[][] arr = new int[3][2];
        //위의 int 2차원 배열 arr은
        //int가 2개 모여있는 배열이
        //3개 모여있는 2차원 배열이란 의미가 된다!
        
        //만약 우리가 0번째 배열에 1번째 칸에
        //값을 넣을 떄에는 
        arr[0][1] = 40;
        //으로 넣어줄 수 있다.
        
        //주의!
        //arr[1] = 4;
        //당연히 에러!
        
        
    }

}

 

다차원배열 문제

/*퀴즈 제한시간 15분
 * 구구단을 출력하는 프로그램을 작성하시오.
 * 단, 2차원 배열을 사용하여
 * 각 단의 결과값을 배열에 저장하시오
 * 
 */

더보기
package day0914;

public class Ex04Gugudan {
    public static void main(String[] args) {
        
        //썜이 한거
        int[][] gugudan = new int[8][9];
        
        for(int i = 0; i<gugudan.length; i++) { //gugudan.length는 [8]을
            for(int j = 0; j<gugudan[i].length; j++) { //gugudan[i].length는 [9]를 뜻한다.
                int left = i+2; // 2*1에 2왼쪽
                int right = j+1;// 2*1에 1오른쪽
                gugudan[i][j] = left * right;
            }
        }
        
        for(int i = 0; i < gugudan.length; i++) {
            for(int j = 0; j<gugudan[i].length; j++) {
                System.out.println(gugudan[i][j]);
            }
        }

    }

}

 

배열의 동적할당과 정적할당

/*배열의 동적 할당 (Dynamic Allocation)
 * 우리가 기존에 배열은 크기를 지정하여
 * 해당 크기만 사용을 하였다.
 * 예시: 크기가 4인 int 배열 ->int[] arr = new int[4]
 * 
 * 크기가 고정되어있는 정적 할당 배열의 경우,
 * 만약 우리가 지정된 크기보다 많은 값을 넣고 싶어도 넣을 수 없다.
 * 또한, 기본형 데이터타입의 배열일 경우 0으로, 참조형 데이터타입의 배열일 경우 null로 초기화가 되지만
 * 우리가 몇개의 값을 배열에 저장했는지 알아내기 위해서는 추가적으로 작업을 해서
 * 특이한 값으로 초기화된 배열에 칸이 몇개인지 알아야 한다!
 * 
 * 이러한 문제점을 해결하기 위해서 나온 개념이 바로 동적 할당이다.
 * 동적 할당 배열의 경우, 배열의 크기가 우리가 새로운 요소를 추가하면 늘어나고
 * 요소를 제거하면 줄어드는 자유로운 크기를 가지게 된다.
 * 
 * 단, 동적 할당의 경우, 기존 배열을 주소값을 유지한 채 바꾸는 것이 아니라
 * 새로운 배열을 만들어서 변경을 가한 후 해당 배열을 리턴 시켜서
 * 기존 배열에 덮어씌우는 방법을 사용하게 된다!
 * 
 */

더보기
package day0915;

import util.ArrayUtil;

public class Ex07DynamicAlloc {
    public static void main(String[] args) {

//        //개념        
//        int[] arr = new int[3]; //지금 배열의 크기는 3
//        
//        arr[0] = 4;
//        arr[1] = 3;
//        arr[2] = 5;
//        
//        //배열에 새로운 값을 넣으려고 한칸을 추가
//        arr = new int[4];
//        
//        System.out.println(arr[0]); //원하는 출력값은 4
//        //그런데 날라가서 값은 0이 출력됨.
//        // 날라가면 안되지?-> 그래서 동적할당의 개념이 나옴!
//        
//        //ArrayUtil.java 클래스 작성하고 옴.
        
        
        int[] arr = new int[3];
        arr[0] = 1;
        arr[1] = 3;
        arr[2] = 1;
        
        // 1. size()
        System.out.println("1. size()");
        System.out.println("ArrayUtil.size(arr): "+ArrayUtil.size(arr));
        System.out.println();
        
        // 2. isEmpty()
        System.out.println("2. isEmpty()");
        System.out.println("ArrayUtil.isEmpty(arr): "+ArrayUtil.isEmpty(arr));
        System.out.println();        
        
        // 3. contains()
        System.out.println("3. contains()");
        System.out.println("ArrayUtil.contains(arr, 3): "+ArrayUtil.contains(arr, 3));
        System.out.println("ArrayUtil.contains(arr, 50): "+ArrayUtil.contains(arr, 50));
        System.out.println();
        
        // 4. indexOf()
        System.out.println("4. indexOf()");
        System.out.println("ArrayUtil.indexOf(arr, 1): "+ArrayUtil.indexOf(arr, 1));
        System.out.println("ArrayUtil.indexOf(arr, 50): "+ArrayUtil.indexOf(arr, 50));
        System.out.println();

        
        // 5. lastIndexOF()
        System.out.println("5. lastIndexOf()");
        System.out.println("ArrayUtil.lastIndexOf(arr, 1): "+ArrayUtil.lastIndexOf(arr, 1));
        System.out.println("ArrayUtil.lastIndexOf(arr, 50): "+ArrayUtil.lastIndexOf(arr, 50));
        System.out.println();

        
        // 6. get()
        System.out.println("6. get()");
        System.out.println("ArrayUtil.get(arr, 1): "+ArrayUtil.get(arr, 1));
        System.out.println();
        
        
        
        //=============
        
        // 7. add() //배열 크기 늘리기
        //arr 크기를 늘릴때 arr.length += 1 이따위로 하면 안됨. length함부로 건들면 안되
        System.out.println("7. add()");
        System.out.println("add() 전 ArrayUtil.size(arr): "+ArrayUtil.size(arr));
        arr = ArrayUtil.add(arr, 30);
        System.out.println("add() 후 ArrayUtil.size(arr): "+ArrayUtil.size(arr));
        System.out.println("add() 후 ArrayUtil.get(arr, 3): "+ArrayUtil.get(arr, 3));

        System.out.println();
    
        
        // 8. add(index)
        System.out.println("8. add(index)");
        System.out.println("add() 전 ArrayUtil.size(arr): "  + ArrayUtil.size(arr));
        System.out.println("add() 전 ArrayUtil.get(arr, 2): "  + ArrayUtil.get(arr, 2));
        
        arr = ArrayUtil.add(arr,  2, 100);
        
        System.out.println("add() 후 ArrayUtil.size(arr): "  + ArrayUtil.size(arr));
        System.out.println("add() 후 ArrayUtil.get(arr, 2): "  + ArrayUtil.get(arr, 2));
        
        System.out.println();
        
        
        // 9. set()
        System.out.println("9. set()");
        System.out.println("set() 전 ArrayUtil.get(arr,2): "+ ArrayUtil.get(arr, 2));
        int temp = ArrayUtil.set(arr, 2, 300);
        System.out.println("set() 후 ArrayUtil.get(arr,2): "+ ArrayUtil.get(arr, 2));
        System.out.println("set() 후 원래 2번 인덱스에 있던 값: "+temp);
        
        System.out.println();
    
        
        // 10. removeByIndex()
        System.out.println("10. removeByIndex()");
        System.out.println("removeByIndex() 전 ArrayUtil.size(arr): " +ArrayUtil.size(arr));        
        System.out.println("removeByIndex() 전 ArrayUtil.indexOf(arr, 300): " +ArrayUtil.indexOf(arr, 300));
        System.out.println("-----유효 인덱스인 경우-----");
        arr = ArrayUtil.removeByIndex(arr, 2);
        System.out.println("removeByIndex() 후 ArrayUtil.size(arr): " +ArrayUtil.size(arr));        
        System.out.println("removeByIndex() 후 ArrayUtil.indexOf(arr, 300): " +ArrayUtil.indexOf(arr, 300));
     
        System.out.println("-----유효 인덱스가 아닌 경우-----");
        System.out.println("removeByIndex() 전 ArrayUtil.size(arr): " +ArrayUtil.size(arr));        
        arr = ArrayUtil.removeByIndex(arr, 3000);
        System.out.println("removeByIndex() 후 ArrayUtil.size(arr): " +ArrayUtil.size(arr));        
     
        System.out.println();
    
        
        // 11. removeByElement()
        System.out.println("11. removoeByElement()");
        System.out.println("removoeByElement() 전 ArrayUtil.indexOf(arr, 3): "+ArrayUtil.indexOf(arr, 3));
        arr = ArrayUtil.removeByElement(arr, 3);
        System.out.println("removoeByElement() 후 ArrayUtil.indexOf(arr, 3): "+ArrayUtil.indexOf(arr, 3));
        
        System.out.println();
        
        
    }

}

 

 

ArrayList 개념

더보기
package day0917;
/* ArrayList
 *동적 할당 배열이 정적 할당 배열보다 사용하기 편하다는 것을 배웠지만
 *문제는, 우리가 새로운 데이터타입을 만들 때마다
 *ArrayUtil에 동적할당 메소드를 매번 새롭게 만들어야 했다.
 *
 *하지만 객체지향 프로그래밍의 관점에서는
 *우리가 많은 클래스를 만들어서
 *해당 클래스의 객체들로 우리가 프로그램을 만들게 되는데,
 *그렇다면 그때마다 매번 동적할당 메소드를 만들어주어야할까?
 *
 * 정답은 당연히 아니다 이다.
 * 
 *자바에서 기본적으로 동적할당의 개념이 구현되어있는
 *클래스를 제공해준다.
 *
 *ArrayList로 대표되는 Collection 라는 클래스들인데
 *해당 클래스들 안에는 그게 3가지 분류가 있다.
 * 1. List: 리스트는 배열과 같이 우리가 추가하는 대로 차례대로 객체가 추가되는 형태로써,
 *          순서가 존재하고 중복된 값을 추가할 수 있다.
 *          즉, 우리의 ArrayUtil 안에 구현되어있는 동적 할당 배열과 가장 유사한 형태이다.
 * 2. Set: 셋은 어레이리스트와 유사하게 순서가 존재하는 형태이지만
 *         단, 중복된 값은 추가할 수 없다.
 * 3. Map: 맵은 추가되는 요소가 순서가 존재하지 않고, 대신 해당 요소를 호출할 때에는
 *         우리가 미리 지정한 키 값을 통해서 호출해야 한다.
 *         
 *         
 * 우리가 여기서 배울 것은 List 중에서 가장 많이 사용되는 ArrayList이다. 
 * 
 */

import java.util.ArrayList;

public class Ex04ArrayList {
    public static void main(String[] args) {
        // ArrayList 클래스 객체를 우리가 선언과 초기화를 해주어야 하는데
        // 배열에서처럼, 우리가 해당 객체가 어떤 클래스의 모음인지를 다음과 같은 방법으로 명시해야한다.
        // ArrayList<클래스 이름> 리스트객체의 이름 = new ArrayList<>();
        // 그렇다면 만약 우리가 int를 모아둔 ArrayList가 필요할 때에는?
        // 이런 경우를 대비해서 자바는 "Wrapper Class"가 존재한다.
        // Wrapper 클래스란 기본형 데이터타입을 클래스로 구현해둔 "포장 클래스"이다.
        // int는 Integer, double Double .....
        // 만약 기본형 데이터타입의 클래스 버전이 필요할 때에는
        // 해당 포장 클래스를 사용하면 된다!
        
        // String 클래스를 모아둔 ArrayList 객체 list를 만들어보자
        ArrayList<String> list = new ArrayList<>();
        
        // String 객체를 5개 만들어보자
        String s1 = new String("a1");
        String s2 = new String("a2");
        String s3 = new String("a3");
        String s4 = new String("a4");
        String s5 = new String("a5");
        
        
        // 1. add(e)
        //  어레이리스트 객체에 새로운 요소를 추가할 때에는 add() 메소드를 실행하면 된다.
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add("a4");
        
        // 2. get(index)
        //    어레이리스트 객체에 특정 인덱스에 있는 요소를 호출할 때에는 get() 메소드를 실행하면 된다.
        System.out.println("2. get(index)");
        System.out.println("list.get(0): "+list.get(0));        
        //단, 잘못된 인덱스를 호출할 시에는 당연히 에러가 발생된다.
        //System.out.println("list.get(55): "+list.get(55));
        System.out.println("--------------------\n");
        
        // 3. add(index, e)
        //    어레이리스트 객체에 특정 인덱스에 새로운 값을 끼어넣고 싶을 때에는 add(index, e) 메소드를 실행하면 된다.
        System.out.println("3. get(index, e)");
        System.out.println("add() 전 list.get(1): "+list.get(1));  
        System.out.println("set() 전 list.size()의 값: "+list.size());
        list.add(1, s1);
        System.out.println("add() 후 list.get(1): "+list.get(1));
        System.out.println("set() 전 list.size()의 값: "+list.size());
        System.out.println("--------------------\n");
        
        // 4. size()
        //    어레이리스트 객체 안에 추가되어있는 요소의 갯수를 알고 싶을 때에는 size() 메소드를 실행하면 된다.
        System.out.println("4. size()");
        System.out.println("list.size(): " +list.size());
        System.out.println("---------------------\n");
        
        // 5. isEmpty()
        //    어레이리스트 객체 안에 요소가 존재하지 않으면 true, 존재하면 false인지 알고 싶을 때에는
        //    isEmpty() 메소드를 실행하면 된다.
        System.out.println("5. isEmpty()");
        System.out.println("list.isEmpty(): " +list.isEmpty() );
        System.out.println("---------------------\n");
        
        // 6. set(index, e)
        //    특정 인덱스에 새로운 값을 끼어 넣을때에는 set(index, e) 메소드를 실행하면 된다.
        //    기존에 있던 값은 리턴된다.
        System.out.println("6. set(index, e");
        String temp = "abcd3ef";
        System.out.println("set() 전 temp의 값: " +temp);
        System.out.println("set() 전 list.get(0)의 값: "+list.get(0));
        System.out.println("set() 전 list.size()의 값: "+list.size());
        temp = list.set(0, s2);
        System.out.println("set() 후 temp의 값: " +temp);
        System.out.println("set() 후 list.get(0)의 값: "+list.get(0));
        System.out.println("set() 전 list.size()의 값: "+list.size());

        System.out.println("---------------------\n");
        
        // 7. clear()
        //    현재 어레이리스트 객체의 내용을 싹 다 비우고 싶다면
        //    clear() 메소드를 실행하면 된다.
        System.out.println("7. clear()");
        System.out.println("clear() 전 list.isEmpty(): "+list.isEmpty());
        list.clear();
        System.out.println("clear() 후 list.isEmpty(): "+list.isEmpty());
        System.out.println("--------------------\n");
        
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);
        list.add("a4");
        
        //여기서부터는 <> 안에 클래스에 equals() 메소드가
        //정확하게 구현되어있어야 정상적으로 실행이 된다.
        // 8. contains(e)
        //    어레이리스트가 해당 객체와 equals()가 true가 나오는 요소를 가지고 있는지 알고 싶다면
        //    contains(e)를 실행하면 된다.
        System.out.println("8. contains(e)");
        System.out.println("list.contains(s1): " +list.contains(s1));
        System.out.println("list.contains(s4): " +list.contains(s4));
        System.out.println("list.contains(s5): " +list.contains(s5));
        System.out.println("--------------------\n");
        
        // 9. indexOf(e)
        //    어레이리스트에서 해당 요소와 일치하는 객체의 가장 먼저 등장하는 인덱스를 알고 싶다면
        //    index(e)를 실행하면 된다.
        //    만약 해당 객체와 일치하는 요소가 없을 경우 -1이 리턴된다.        System.out.println("8. contains(e)");
        System.out.println("9. indexOf(e)");
        System.out.println("list.indexOf(s1): " +list.indexOf(s1));
        System.out.println("list.indexOf(s4): " +list.indexOf(s4));
        System.out.println("list.indexOf(s5): " +list.indexOf(s5));
        System.out.println("--------------------\n");
        
        // 10. lastIndexOf(e)
        //    어레이리스트에서 해당 요소와 일치하는 객체의 가장 마지막에 등장하는 인덱스를 알고 싶다면
        //    lastIndex(e)를 실행하면 된다.
        //    만약 해당 객체와 일치하는 요소가 없을 경우 -1이 리턴된다.
        System.out.println("10. lastIndexOf(e)");
        System.out.println("list.lastIndexOf(s1): " +list.lastIndexOf(s1));
        System.out.println("list.lastIndexOf(s4): " +list.lastIndexOf(s4));
        System.out.println("list.lastIndexOf(s5): " +list.lastIndexOf(s5));
        System.out.println("--------------------\n");
        
        
        // 11. remove(index)
        //     어레이리스트에서 특정 인덱스의 값을 삭제할 때에는 remove(index)를 실행하면 된다.
        System.out.println("11. remove(index)");
        System.out.println("remove(index) 전 list.get(0): " + list.get(0));
        list.remove(0);
        System.out.println("remove(index) 후 list.get(0): " + list.get(0));
        System.out.println("--------------------\n");
        
        
        // 12. remove(e)
        //     어레이리슽에서 가장 먼저 특정 객체와 일치하는 요소를 삭제할 때에는
        //     remove(e)를 실행하면 된다.
        //     만약 일치하는 요소가 존재하지 않으면 아무일도 발생하지 않는다.
        System.out.println("12. remove(e)");
        System.out.println("remove(e) 전 list.contains(s1): " + list.contains(s1));
        System.out.println("remove(e) 전 list.contains(s4): " + list.contains(s4));
        System.out.println("remove(e) 전 list.size(): " + list.size());
        list.remove(s1);
        list.remove(s4);
        list.remove(s5);
        System.out.println("remove(e) 후 list.contains(s1): " + list.contains(s1));
        System.out.println("remove(e) 후 list.contains(s4): " + list.contains(s4));
        System.out.println("remove(e) 후 list.size(): " + list.size());        
        System.out.println("--------------------\n");


        
        
    }

}

 

 

문제 1. ArrayUtil을 사용한 로또 번호 제작 프로그램

더보기
package day0915;
// ArrayUtil 을 사용한 로또 번호 제작기

import java.util.Random;

import util.ArrayUtil;

public class Ex08Lotto04 {
    public static void main(String[] args) {
        Random random = new Random();
        int[] numbers = new int[0];
        
        while(ArrayUtil.size(numbers) < 6) {
            int num = random.nextInt(45) +1;
            
            if(!ArrayUtil.contains(numbers, num)) {
                numbers = ArrayUtil.add(numbers, num);
            }
        }
        
        for(int i = 0; i < ArrayUtil.size(numbers); i++) {
            System.out.println(ArrayUtil.get(numbers, i));
        }
    }

}

 

문제

1.

/*퀴즈
 * 사용자로부터 5개의 숫자를 입력받아서
 * 사용자가 입력한 순서대로 출력하는 프로그램을 작성하시오.
 * 단, 5개의 변수를 따로 만드는 것이 아니라
 * 배열을 사용하여 처리하도록 하시오.
 * 
 * 제한시간 10분
 */

더보기
package day0913;

import java.util.Scanner;

public class Ex03Array2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        
//        //내가한거
//        System.out.println("숫자를 5개 입력하세요");
//        System.out.println("> ");
//        int num1 = scanner.nextInt();
//        int num2 = scanner.nextInt();
//        int num3 = scanner.nextInt();
//        int num4 = scanner.nextInt();
//        int num5 = scanner.nextInt();
//
//        int[] intArray;
//        intArray = new int[6];
//
//        intArray[0] = num1;
//        intArray[1] = num2;
//        intArray[2] = num3;
//        intArray[3] = num4;
//        intArray[4] = num5;
//        
//        System.out.println("당신의 배열: "+intArray[0]+intArray[1]+intArray[2]+intArray[3]+intArray[4]);

        
        
        //썜이 한거
        int size = 5;
        int[] array = new int[size];
        
//        System.out.println("1번쨰 값을 입력해주세요.");
//        System.out.println("> ");
//        array[0] = scanner.nextInt();
//        
//        System.out.println("2번쨰 값을 입력해주세요.");
//        System.out.println("> ");
//        array[1] = scanner.nextInt();
//        //....
        
        //입력
        for(int i = 0; i<array.length; i++) {
            System.out.println(i+"번째 숫자를 입력해주세요.");
            System.out.println("> ");
            array[i] = scanner.nextInt();
        }
        
        //출력
        for(int i = 0; i<array.length;i++) {
            System.out.printf("array[%d]: %d\n", i, array[i]);
        }
        
        scanner.close();
    }

}

 

2. 로또게임

/*퀴즈 제한시간 15분
 * 로또 시뮬레이터 1번
 * 1부터 45사이의 6개의 랜덤한 숫자를 뽑아서
 * 배열에 저장하고 출력하는 프로그램을 작성하시오
 */

더보기
package day0913;

import java.util.Random;

public class LottoGame01 {
    public static void main(String[] args) {
        Random random = new Random();

        //내가 한거
//        int size = 6;
//        int[] array = new int[size];
//                      
//        for(int i = 0; i<array.length;i++) {
//            array[i] = random.nextInt(45)+1;
//            System.out.printf("array[%d]: %d\n", i, array[i]);
//        }
        
        
        //쌤이 한거
        //상수
        final int SIZE = 6;
        final int NUMBER_MAX = 45;
        
        //번호를 저장할 배열
        int[] numbers = new int[SIZE];
        
        //for문을 사용하여
        //int 배열 numbers의 각 인덱스번 칸에
        // 랜덤한 숫자를 넣어준다.
        for(int i = 0; i<numbers.length; i++) {
            numbers[i] = random.nextInt(NUMBER_MAX) +1;
        }
        
        //for문을 사용하여
        //각 인덱스의 저장된 값을 출력한다.
        for(int i = 0; i < numbers.length; i++) {
            System.out.printf("numbers[%d]: %d\n", i, numbers[i]);
        }
        
    }

}

+ 난이도 상승..

 * 중복을 제거하고 정렬한 버전 만들기

 

3.

/*퀴즈 제한시간 30분
 * 사용자로부터 1~45까지의 숫자 6개를 입력받아서
 * 정렬하여 출력하는 프로그램.
 * 단, 사용자가 잘못된 숫자나 중복된 숫자를 입력하는 경우, 올바른 숫자가
 * 입력하도록 다시 입력 받도록 코드를 작성하시오.
 */

더보기
package day0913;

import java.util.Scanner;

public class LottoGame04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //쌤이 한거
        //상수
        //입력가능한 최소 값
        //입력가능한 최대 값
        //배열의 길이        
        final int NUMBER_MIN = 1;
        final int NUMBER_MAX = 45;
        final int LENGTH_MAX = 6;
        
        int[] array = new int[LENGTH_MAX];
        
        //배열에 각 인덱스에 숫자를 넣는다. 
        for(int i = 0; i<array.length; i++) {
            System.out.printf("%d번째 숫자\n", i+1);
            
            System.out.println("1~45 사이의 숫자를 입력해주세요.");
            System.out.println("> ");
            int num = scanner.nextInt();
            
            // 만약 문제가 없으면 true;
            // 문제가 있으면 false를 저장할
            // boolean 변수를 만든다.    
            boolean inputSwitch = true;
        
            //사용자가 입력한 값이 1~45가 아닐 경우에
            //inputSwitch에 false를 저장하고 그 외는 true를 저장하자
            inputSwitch = num >= NUMBER_MIN && num <= NUMBER_MAX;
            
            //array 전체를 확인하여
            //만약 i번 칸의 저장된 값이
            //num과 같으면, inputSwitch를 false로 저장한다.
            for(int j = 0; j<array.length; j++) {
                if(array[j] == num) {
                    inputSwitch = false;
                }
            }
            
            if(inputSwitch) {
                //아무런 문제가 없었으므로
                //i번째 인덱스에 num을 저장한다.
                array[i] = num;
            } else {
                System.out.println("잘못입력하셨습니다.");
                i--;
            }
	 }
        
        
        //배열을 정렬한다.       
        for(int i = 0; i<array.length-1; i++) {
            if(array[i] > array[i+1]) {
                int temp = array[i];
                array[i] = array[i];
                array[i+1] = temp;
                
                i = -1; //i++이 무조건 실행되기 때문에 증가된 i값을 하나 줄여서 정확한 i의 값을 나타내주기 위해서
            }
        }
        
        
        
        
        //출력한다.
        for(int i = 0; i<array.length; i++) {
            System.out.printf("array[%d]: [%d]\n", i, array[i]);
        }
        
        scanner.close();
        
    }

}

 

4. /*퀴즈 제한시간:15분
 * 사용자로부터 자동으로 할지 수동으로 할지 입력을 받아서
 * 자동으로 한다고 하면 자동으로 숫자 6개를 뽑고
 * 수동으로 한다고 하면 수동으로 숫자 6개를 뽑아
 * 정렬하여 출력하는 로또 프로그램을 작성하시오.
 */

 

5. /*퀴즈 제한시간 20분
 * 컴퓨터의 숫자 6개를 랜덤으로 뽑고,
 * 사용자의 숫자 6개는 수동 혹은 자동으로 학지 입력받아서
 * 사용자의 선택에 맞추어 6개의 숫자를 뽑아서
 * 컴퓨터 숫자 6개와 사용자 숫자 6개 중
 * 일치하는 숫자가 총 몇개인지 구하여 출력하는 프로그램을 작성하시오.
 */

 

6. /*퀴즈 제한시간 20분
 * 컴퓨터의 숫자 6개를 랜덤으로 뽑고,
 * 사용자의 숫자 6개는 수동 혹은 자동으로 학지 입력바다서
 * 사용자의 선택에 맞추어 6개의 숫자를 뽑아서
 * 컴퓨터 숫자 6개와 사용자 숫자 6개 중
 * 일치하는 숫자가 총 몇개인지 구하여 출력하는 프로그램.
 */

+ Recent posts