IT 면접족보/자바 면접족보

자바 면접 족보 정리(14일 차 )

낙산암 2020. 12. 11. 17:52

 

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

 

배열에 직접 값을 넣어서 초기화 시키는 방법이 있고, 배열 객체를 생성하고 아무 값도 집어넣지 않으면 자동으로 디폴드 값으로 초기화가 된다. 이 때 기본 자료형은 0으로, 인스턴스 배열 각각의 값은 null로 초기화 된다.

1. 디폴트 초기화

//기본 자료형 배열은 값을 안넣으면 모든 요소 0으로 초기화
int[] ar = new int[10]; //선언 객체생성

//인스턴스 배열(참조변수 배열)은 모든 요소 null로 초기화
String[] ar = new String[10];


2. 값을 넣어서 초기화

int[] ar = {1,2,4}
String course[] = {"Java", "C++", "HTML5"};

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

System.arraycopy(복사할 배열, 복사할 배열의 시작 index, 복사 될 배열, 복사될 배열의 시작 index, 복사할 개수); 


System.arraycopy(ar1, 0, ar2, 3, 4); 

/*
ar1  →  복사할 원본 
0    →  ar1의 index 0번부터 값을 ( = ar1[0] 부터의 값을 )
ar2  →  복사의 대상
3    →  ar2의 index 3번 부터 ( = ar2[3]부터 )
4    →  4개 복사 해라. ar2[3]부터 [4],[5],[6]까지 
*/

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

String[] args 는 프로그램 실행시 매개변수를 보내서 실행할 수 있다는 것.

실행 하자마자 받아야 하는 인자(파라미터)가 있을 수 있어 그럴 때 활용한다.

띄어쓰기로 지정해서 뒤에 파라미터 부분을 하나씩 구분해서 읽어서 배열로 저장함.

 

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

int[] ar = {1, 2, 3, 4, 5};

	//for(int i = 0; i < ar.length; i++) { -> 이 문장을 아래와 같이 변경

	for(int e : ar) {
	
	System.out.println(e);
}

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

//로또번호 :랜덤번호 1-45, 6개, 중복없이 

public class LottoMain {

	public static void main(String[] args) {
		Lotto lottoGame = new Lotto();
		lottoGame.showLandomN();
	}
}
public class Lotto {
	private int[] lottoNum;
	
	public Lotto() {
		
	}
	
	private int[] getLandomN () {
		int[] ranNum = new int[6];
		
		for(int i=0; i<ranNum.length;i++) {
			ranNum[i] = (int)(Math.random()*45+1);
			
			for(int j=0; j<i;j++) {
				if(ranNum[i] == ranNum[j]) {
					break;
				}
			}
		}
		return ranNum;
	}
	
	public void showLandomN() {
		lottoNum = getLandomN();
		
		for(int i=0; i<lottoNum.length;i++) {
			System.out.print(lottoNum[i]+" ");
		}
	}
}

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);
	}
}
class Box{
	int boxNum;
	String contents;
	
	public Box() {
		
	}
	
	public Box(int boxNum, String contens) {
		this.boxNum = boxNum;
		this.contents = contens;
	}

	public int getBoxNum() {
		return boxNum;
	}
	
	public String toString() {
		return contents;
	}
}

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

 

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

 

8 6 1 1

7 3 6 9

4 5 3 7

9 6 3 1

 

Mani 에서 처리

public class TowDArry {

	public static void main(String[] args) {
		int[][] numArr = new int[4][4]; //선언하는 부분. 메모리에 2차원 배열 올림
		
		for(int i=0; i<numArr.length; i++) {
			for(int j=0; j<numArr[i].length; j++) {
				numArr[i][j] = (int)(Math.random()*10)+1; //값 넣는 부분
			}
		}
		
		for(int i=0; i<numArr.length; i++) {
			for(int j=0; j<numArr[i].length; j++) {
				System.out.print(numArr[i][j]+" "); //출력 하는 부분
			}
			System.out.println();
		}
	}
}

클래스 나눈 후 (encapsulation 은 안함)

class TwoArr{
	
	final int ROWS = 4;  //배열 크기가 바뀔 수 있기 때문에 
	final int COLS = 4;  //다이렉트로 안하고 이렇게 함
	
	int[][] numArr;
	
	TwoArr(){
		numArr = new int[ROWS][COLS];
	}
	
	public void input() {
		for(int i=0; i<numArr.length; i++) {
			for(int j=0; j<numArr[i].length; j++) {   
				numArr[i][j] = (int)(Math.random()*10)+1; //값 넣는 부분
			}
		}
	}
	
	public void output() {
		for(int i=0; i<numArr.length; i++) {
			for(int j=0; j<numArr[i].length; j++) {
				System.out.print(numArr[i][j]+" "); //출력 하는 부분
			}
			System.out.println();
		}
	}
}


public class TowDArry {

	public static void main(String[] args) {
		TwoArr two = new TwoArr();
		two.input();
		two.output();
	}
}

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

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

 

  • arr[0], arr[1], arr[2]는 연속된 주소를 갖는다.

  • arr[0][0] ~ arr[0][3] arr[1][0] ~ arr[1][3] arr[2][0] ~ arr[2][3] 는 각각 연속된 주소를 갖는다.