1. 배열의 디폴트 초기화 방법은?

// 기본형 타입에서의 배열 선언 
int[] arr = new int[5]; 
// int[]: int형 메모리의 배열타입 
// arr: 해당 객체 이름 
// new int[5]: 크기가 5인 int형 배열을 객체로 생성. 
// 해당 배열에서 별다른 요소를 기입하지 않으면 값은 각각 0이 된다.

또한 다른 방법으로도 배열 생성이 가능하다.

int[] arr = {1, 2, 3, 4, 5}; 
// '{}' 기호를 통해 해당 배열의 요소를 입력한다. 
// 최초롤 기입한 요소의 갯수만큼 배열의 크기가 정해진다.

단, Java에서의 기본적인 형태를 가진 배열은 정적구조이기 때문에 한 번 크기를 정하면 변경이 불가능 하다.

 

 

2. arraycopy 함수의 사용 방법은?

: arraycopy는 byte 타입 배열의 데이터를 첨삭하기 위한 메소드 파라미터는 원본 객체, 원본시작위치, 복사할 객체, 복사시작위치, 읽어올 데이터길이(length) 순 이다.

int[] ar1 = new int[10]; 
int[] ar2 = new int[10]; 

System.arraycopy(ar1, 0, ar2, 3, 4); // arraycopy를 이용한 복사

또한, 2차원 배열의 경우 arraycopy는 깊은 복사(Deep Copy)의 특성을 이용할 수 있다.

private static int[][] deepCopyUseSystemArrayCopy(int[][] original) { 
	if (original == null) return null;
    
    int[][] result = new int[original.length][original.length]; 
    
    for (int i = 0; i < result.length; i++) { 
    	System.arraycopy(original[i], 0, result[i], 0, original[i].length); // arraycopy를 이용한 깊은 복사 
    } 
    
    return result; 
}

 

 

3. public static void main(String[] args) 에서 String[] args 의 사용법과 용도는?

: String 타입의 배열 arg(arguments. 인자)란 이름으로 파라미터에 대입함을 의미한다.

이는 인자의 특성을 가짐에 따라 프로그램을 실행할 때 값을 넘길 수 있는데 예시는 다음과 같다.

// class 파일이 생성된 리렉토리의 Main 클래스 명 옆에 aaa bbb ccc를 통해 Stinrg[] args 형태의 파라미터 값을 넘긴다. 
> java -cp bin package.Main aaa bbb ccc
System.out.println(args[0], args[1], args[2]); // aaa, bbb, ccc로 출력

 

 

4. enhenced for 문에 대하여 설명하시오.

: 기존에서 쓰이던 for문은 다음과 같았다.

int[] ar = new int[5]; 
for (int i = 0; int < ar.length; i++) { ... }

여기서 int i, int < 10, i++가 각각 시작/종료/증감 조건에 해당되었는데, 이를 좀 더 간편하도록 고안된 기법이 enhenced(강화된) for 문. 즉, foreach이다.

for(int i : ar) { // 여기서 ar은 ar.length를 의미한다. ... }

단, enhenced for문은 반복회수를 명시적으로 주는 것이 불가능하고, 한 스텝씩(증감연산자) 순차적 반복일때만 가능하다.

 

 

5. 로또 프로그램을 작성하시오.

5-1. 메인 클래스

public class LottoMain {
	public static void main(String[] args) { 
        Lotoo lotto = new Lotoo(); 
        lotto.user(); 
    } 
}

 

5-2. 로또 알고리즘 클래스

import java.util.Arrays; 
import java.util.Random; 
import java.util.Scanner; 

public class Lotoo { 
	private int[] ltNum = new int[6]; 
    private int[] com = new int[6];
    
    public Lotoo() { } 
    
    public Lotoo(int[] ltNum, int[] com) { 
    	this.ltNum = ltNum; this.com = com; 
    } 
    
    public int[] getLtNum() { 
    	return ltNum; 
    } 
    
    public void setLtNum(int[] ltNum) { 
    	this.ltNum = ltNum;
    }
    
    public int[] getCom() { 
    	return com; 
    }
    
    public void setCom(int[] com) {
    	this.com = com;
    } 
    
    private void inputLtNum() { // 로또 번호 입력
        Scanner scanner = new Scanner(System.in); 

        System.out.println("1 ~ 45번까지 중복 없는 로또 번호를 6개 기입해주세요.");
        System.out.println("ex) 3 6 4 9 30 27"); 

        for (int i = 0; i < ltNum.length; i++) {
        	ltNum[i] = scanner.nextInt(); 
        } 

        Arrays.sort(ltNum); // 입력한 번호의 배열 요소 정렬 

        scanner.close(); 
    }
    
    private boolean isOverlap() { // 입력한 로또 번호 중복 검사 
        for (int i = 1; i < ltNum.length; i++) {
        if (ltNum[i-1] == ltNum[i]) { 
        return false; // 두 요소 값이 같을 때(중복) false로 리턴
        } 
        }
        return true;
        } 

        private int[] getResult() { // 랜덤으로 로또 번호 생성
        Random random = new Random(); 

        for(int i = 0; i < com.length; i++) {
            com[i] = random.nextInt(45) + 1; // 1 ~ 45 사이의 숫자 생성
            
            for(int j = 0; j < i; j++) {
                if(com[i]==com[j]) { 
                	i--; // 랜덤으로 생성된 로또 번호도 중복 값 배제
                } 
            }
        }

        Arrays.sort(com); // 생성된 com 배열 요소 또한 정렬 

        return com;
    }
    
    private int numCompare() { // 입력한 것과 랜덤으로 나온 로또 번호 비교 
        int numCnt = 0; 
        getResult();

        if (isOverlap() == true) {
            for (int i = 0; i < 6; i++) { 
                if (ltNum[i] == com[i]) {
                	numCnt++; 
                } 
            } 
        } else if (isOverlap() == false) {
        	return 0; 
        } 
        
        return numCnt; 
    } 
    
    private void getWinning() {
        if (isOverlap() == true) { // 중복없이 번호를 선택했을경우 결과 출력
            switch (numCompare()) { // 맞춘 숫자 개수 별 분기에 따라 출력
                case 0:
                    System.out.println("안타깝습니다. 다음 기회에...");
                    break;

                case 1: 
                    System.out.println("축하합니다. 1개 맞추셨습니다.");
                    break; 

                case 2: 
                    System.out.println("축하합니다. 2개 맞추셨습니다.");
                    break;

                case 3:
                    System.out.println("축하합니다. 3개 맞추셨습니다.");
                    break;

                case 4:
                    System.out.println("축하합니다. 4개 맞추셨습니다.");
                    break; 

                case 5:
                    System.out.println("축하합니다. 5개 맞추셨습니다."); 
                    break; 

                case 6:
                    System.out.println("축하합니다. 6개 맞추셨습니다.");
                    break;
            }
        } else { 
        	System.out.println("번호가 중복되었습니다. 다시 입력해주세요.");
        }
    } 
    
    public void user() { 
        inputLtNum(); 
        getWinning();
    }
}

 

 

6. 아래의 프로그램을 참고 하여 Box class 를 짜시오.

public static void main(String[] args) { 
    Box[] ar = new Box[5];  
    ar[0] = new Box(101, "Coffee");
    ar[1] = new Box(202, "Computer"); 
    ar[2] = new Box(303, "Apple"); 
    ar[3] = new Box(404, "Dress");
    ar[4] = new Box(505, "Fairy-tale book");

    for (Box e : ar) {
        if (e.getBoxNum() == 505) 
            System.out.println(e);
    }
}

 

6-1. Box 클래스

public class Box { 
	private int num; 
    private String value; 
    
    public Box(int num, String value) { 
    	this.num = num; 
    	this.value = value; 
    } 
    
    public int getNum() { 
    	return num; 
    }
    
    public void setNum(int num) {
    	this.num = num;
    } 
    
    public String getValue() {
    	return value; 
    } 
    
    public void setValue(String value) { 
    	this.value = value;
    }
    
    public String toString() { 
    	return this.num + " " + this.value; 
    } 
    
    public int getBoxNum() {
    	return num; 
    }
}

 

 

7. 양의 정수 10개를 랜덤생성하여, 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력해보자.

7-1. 메인 클래스

public class MultiplicationMain { 
    public static void main(String[] args) {
        Multiplication multiplication = new Multiplication();
        multiplication.user(); 
    } 
}

 

7-2. 알고리즘 클래스

import java.util.Random;

public class Multiplication { 
    private int[] num = new int[10];

    public Multiplication() { } 

    public Multiplication(int[] num) { 
    	this.num = num; 
    } 

    public int[] getNum() {
    	return num;
    } 

    public void setNum(int[] num) { 
    	this.num = num; 
    } 

    public int[] rndNum() { 
        Random random = new Random(); 

        for (int i = 0; i < num.length; i++) {
        	num[i] = random.nextInt(2147483647) + 1; // 양의 정수 랜덤 생성하여 배열에 담기
        } 

        return num; 
    } 

    public void getThree() { 
        for (int i = 0; i < num.length; i++) {
            if (num[i] % 3 == 0) { // 3의 나머지가 0인것 == 3의 배수
            	System.out.print(num[i] + " "); 
        	}
    	} 

    	System.out.println(); 
    } 

    public void user() {
        rndNum();
        getThree();
    } 
}

 

 

8.아래의 프로그램을 짜시오.(필수)

-5개의 숫자를 랜덤으로 받아 배열로 저장
-5개의 숫자중 가장 큰값을 출력

 

8-1. 메인 클래스

public class MaximumMain { 
    public static void main(String[] args) {
    	Maximum maximum = new Maximum();
    	maximum.user();
    }
}

 

8-2. 알고리즘 클래스

import java.util.Arrays;
import java.util.Random; 

public class Maximum { 
    private int[] num = new int[5];

    public Maximum() { } 

    public Maximum(int[] num) { 
    	this.num = num; 
    } 

    public int[] getNum() {
    	return num; 
    } 

    public void setNum(int[] num) { 
    	this.num = num;
    } 

    private int[] maxNum() { 
        Random random = new Random();

        for (int i = 0; i < num.length; i++) { 
        	num[i] = random.nextInt(2147483647) + 1; 
        }

        Arrays.sort(num); // 배열의 요소를 오름차순 정렬 

        return num; 
    }

    public void user() { 
    	maxNum(); 
    	System.out.println("최대값은 " + num[4] + " 입니다."); // 오름차순으로 정렬했으므로 배열의 마지막 번호가 최대값
    }
}

 

 

9.아래의 프로그램을 짜시오.

-5개의 숫자를 랜덤으로 받아 배열로 저장
-5개의 숫자를 내림차순으로 정렬하여 출력

 

9-1. 메인 클래스

public class DescMain { 
    public static void main(String[] args) { 
        Desc desc = new Desc();
        desc.user();
    } 
}

 

9-2. 알고리즘 클래스

import java.util.Arrays;
import java.util.Random; 

public class Desc { 
    private int[] num = new int[5]; 

    public Desc() { }

    public Desc(int[] num) { 
    	this.num = num;
    }

    public int[] getNum() { 
    	return num;
    } 

    public void setNum(int[] num) {
    	this.num = num;
    } 

    private int[] rndNum() { 
        Random random = new Random();

        for (int i = 0; i < num.length; i++) {
        	num[i] = random.nextInt(2147483647) + 1; 
        } 

        Arrays.sort(num); // 배열의 요소를 오름차순 정렬 

        return num; 
    }

    public void user() { 
        rndNum();

        for (int i = (num.length-1); i >= 0 ; i--) { // 역으로 순차적 감소시켜 출력 
        	System.out.print(num[i] + " ");
        }

        System.out.println();
    }
}

 

 

10. char 배열을 생성하여, 알파벳 A~Z까지 대입 후, 출력해보자. 알파벳은 26개.

10-1 메인 클래스

public class AlphabetMain {
    public static void main(String[] args) {
        Alphabet alphabet = new Alphabet();
        alphabet.user();
    } 
}

 

10-2. 알고리즘 클래스

public class Alphabet { 
    private char[] eng = new char[26]; 

    public Alphabet() { } 

    public Alphabet(char[] eng) {
    	this.eng = eng; 
    } 

    public char[] getEng() { 
    	return eng; 
    }

    public void setEng(char[] eng) {
    	this.eng = eng; 
    } 

    private void getAlpha() { 
        for (int i = 0; i < eng.length; i++) { 
        	eng[i] = (char)(65 + i); // 'A'의 ASCII 코드인 65 인코딩
        } 
    } 

    public void user() {
        getAlpha();

        for (int i = 0; i < eng.length; i++) { 
        	System.out.print(eng[i] + " ");
        }

        System.out.println(); 
    } 
}

 

 

11. 배열과 반복문을 이용하여 프로그램을 하시오. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전이 각 몇 개로 변환되는지 예시4와 같이 출력하라. 이때 반드시 다음 배열을 이용하고 반복문으로 작성하라.

int[] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1}; // 환산할 돈의 종류

금액을 입력하시오 » 65123
50000 원 짜리 : 1개
10000 원 짜리 : 1개
1000 원 짜리 : 5개
500 원 짜리 : 0개
100 원 짜리 : 1개
50 원 짜리 : 0개
10 원 짜리 : 2개
1 원 짜리 : 3개

 

11-1. 메인 클래스

public class ExchangeMain {
    public static void main(String[] args) {
        Exchange excharge = new Exchange(); 
        excharge.user(); 
    } 
}

 

11-2. 알고리즘 클래스

import java.util.Scanner;

public class Exchange { 
    private int[] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1}; // 환산할 돈의 종류
    private int money;

    public Exchange() { } 

    public Exchange(int[] unit, int money) { 
        this.unit = unit; 
        this.money = money;
    }

    public int[] getUnit() {
    	return unit; 
    } 

    public void setUnit(int[] unit) {
    	this.unit = unit;
    } 

    public int getMoney() { 
    	return money; 
    } 

    public void setMoney(int money) { 
    	this.money = money;
    } 

    private void inputMoney() { 
        Scanner scanner = new Scanner(System.in); 

        System.out.print("금액을 입력하시오 >> "); 
        money = scanner.nextInt();
        
        scanner.close(); 
    } 

    private void moneyExchange() { 
        for (int i = 0; i < unit.length; i++) {
            int cnt = money / unit[i];
            System.out.println(unit[i] + " 원 짜리 : " + cnt + "개"); 
            money = money - cnt * unit[i]; 
        } 
    } 

    public void user() {
        inputMoney(); 
        moneyExchange();
    } 
}

 

 

12.정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라.

랜덤한 정수들 : 3 6 3 6 1 3 8 9 6 9
평균은 5.4

 

12-1. 메인 클래스

public class AvgNumMain {
    public static void main(String[] args) { 
        AvgNum avgNum = new AvgNum(); 
        avgNum.user();
    } 
}

 

12-2. 알고리즘 클래스

import java.util.Random;

public class AvgNum {
    private int[] num; 
    private final int ROWS; 

    public AvgNum() { 
        ROWS = 10; 
        num = new int[ROWS]; 
    } 

    public int[] getNum() {
    	return num;
    }

    public void setNum(int[] num) {
    	this.num = num;
    } 

    private void rndNum() { 
        Random random = new Random();

        for (int i = 0; i < num.length; i++) { 
        	num[i] = random.nextInt(10) + 1; 
        } 
    } 

    private double rndNumAvg() { 
        int sum = 0; 

        for (int i = 0; i < num.length; i++) { 
        	sum += num[i];
        } 

        return (double)sum / num.length; 
    } 

    public void user() { 
        rndNum(); 
        System.out.print("랜덤한 정수들 : "); 

        for (int i = 0; i < num.length; i++) {
        	System.out.print(num[i] + " ");
        } 

        System.out.println();
        System.out.println("평균은 " + rndNumAvg()); 
    }
}

 

 

13. 4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.

8 6 1 1
7 3 6 9
4 5 3 7
9 6 3 1

 

13-1. 메인 클래스

public class MatrixMain { 
    public static void main(String[] args) { 
        Matrix matrix = new Matrix(); 
        matrix.user();
    } 
}

 

13-2. 알고리즘 클래스

import java.util.Random; 

public class Matrix {
    private int[][] mat; 
    private final int ROWS;
    private final int COLS;

    public Matrix () {
        ROWS = 4;
        COLS = 4; 
        mat = new int[ROWS][COLS];
    } 

    public int[][] getMat() { 
    	return mat; 
    }

    public void setMat(int[][] mat) { 
    	this.mat = mat; 
    } 

    public void rndNum() { 
        Random random = new Random();

        for (int i = 0; i < mat.length; i++) {
            for (int j = 0; j < mat[i].length; j++) { 
            	mat[i][j] = random.nextInt(10) + 1; 
            }
        }
    }

    public void user() { 
        rndNum();

        for (int i = 0; i < mat.length; i++) { 
            for (int j = 0; j < mat[i].length; j++) { 
            	System.out.print(mat[i][j] + " "); 
            } 
            
            System.out.println();
        } 
    } 
}

 

 

14. 아래를 메모리 구조로 표현하시오.

int[][] arr = new int [3] [4];

'WebDev > 본과정' 카테고리의 다른 글

다형성과 오버라이딩  (0) 2021.05.12
정렬 심화와 상속  (0) 2021.05.12
String 클래스의 메소드 및 배열 기초  (0) 2021.05.12
오버로딩과 String  (0) 2021.05.11
캡슐화와 static 키워드  (0) 2021.05.11