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 |
최근댓글