type[] 변수이름;
int[] score;
String[] name;
type 변수이름[];
int score[];
String name[];
배열의 초기화
1.
int[] score = new int[5];
score[0] = 100;
score[1] = 90;
score[2] = 80;
score[3] = 70;
score[4] = 60;
2. int[] score = {100, 90, 80, 70, 60};
3. int[] score = new int[]{100, 90, 80, 70, 60};
예제
거스름돈에 동전의 단위마다 몇개의 동전이 필요한지 출력
ex) 거스름돈:2860원 / 1000원:2개 / 500원:1개 / 100원:3개 / 50원:1개 / 10원:1개
int[] changeMny = { 1000, 500, 100, 50, 10 };
int money = 2860;
System.out.print("거스름돈 : " + money + "원");
for (int i = 0; i <= changeMny.length - 1; i++) {
System.out.print(" / " + changeMny[i] + "원:" + money / changeMny[i] + "개");
money %= changeMny[i];
}
int[] changeMny = { 1000, 500, 100, 50, 10 };
우선 거슬러 줄 돈의 단위들을 배열에 넣어준다.
for (int i = 0; i <= changeMny.length - 1; i++) { System.out.print(" / " + changeMny[i] + "원:" + money / changeMny[i] + "개"); money %= changeMny[i]; }
배열안의 값의 개수 만큼 for문을 돌려주고, 한 단위의 계산이 끝날때마다 거스름돈과 계산한 단위의 돈을 모듈러 연한 해주고 나온 값을 다시 거스름돈에 넣어준다.
결과
예제2
1~5 사이의 랜덤한 값이 10개 저장된 배열에서 중복된 값이 제거된 배열을 만들어주세요.
ex)[1,3,3,2,1,1,4,5,5,1,3] -> [1,3,2,4,5]
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 5 + 1);
}
int count = 0;
for (int i = 1; i < arr.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (arr[i] == arr[j]) {
count++;
break;
}
}
}
int[] changeArr = new int[arr.length - count];
changeArr[0] = arr[0];
count = 1;
for (int i = 1; i < arr.length; i++) {
boolean check = true;
for (int j = i - 1; j >= 0; j--) {
if (arr[i] == arr[j]) {
check = false;
break;
}
}
if (check) {
changeArr[count] = arr[i];
count++;
}
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(changeArr));
int[] arr = new int[10]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random() * 5 + 1); }
랜덤한 1~5까지의 수를 10개를 뽑아서 배열에 넣어주는 작업이다.
int count = 0; for (int i = 1; i < arr.length; i++) { for (int j = i - 1; j >= 0; j--) { if (arr[i] == arr[j]) { count++; break; } } }
배열 전체 값중에서 중복된 값이 얼마나 있는지 확인하는 작업이다.
int[] changeArr = new int[arr.length - count]; changeArr[0] = arr[0];
원래있던 배열의 길이에서 중복된 값의 개수만큼 빼준 길이의 새로운 배열을 하나 생성한 후 원래배열의 첫 번째값은 비교할 대상이 자신 밖에 없기 때문에 우선 먼저 넣어준다.
count = 1; for (int i = 1; i < arr.length; i++) { boolean check = true; for (int j = i - 1; j >= 0; j--) { if (arr[i] == arr[j]) { check = false; break; } } if (check) { changeArr[count] = arr[i]; count++; } }
안쪽의 for문으로 진입 후 원래의 배열의 두 번째 숫자부터 중복된 값이 있나 검증과정을 거친다. 만약 중복된 값이 있을 시 check값은 false가 되고 해당 숫자의 검증은 즉시 끝이난다. 그리고 해당 숫자를 새로만든 배열에 넣어주는 과정은 생략하고, 다음 숫자의 검증으로 넘어가며, check의 값은 다시 true로 초기화 된다.
if (check) { changeArr[count] = arr[i]; count++; }
중복된 값이 없을 때에만 check가 true를 유지하게 되고 마지막에 오는 해당 if문에 접근할 수 있게 된다.
결과
ArrayList 클래스
생성
import java.util.ArrayList;
ArrayList<datatype> integers1 = new ArrayList<datatype>();
ArrayList<datatype> integers2 = new ArrayList<>();
ArrayList<datatype> integers3 = new ArrayList<>(10);
메서드
ArrayList를 활용한 일반 배열 예제2
import java.util.ArrayList;
ArrayList<Integer> arr = new ArrayList<Integer>();
int arrSize = 10;
for (int i = 0; i < arrSize; i++) {
arr.add((int) (Math.random() * 5 + 1));
}
System.out.println(arr);
for (int i = 1; i < arrSize; i++) {
for (int j = i - 1; j >= 0; j--) {
if (arr.get(i) == arr.get(j)) {
arr.remove(i);
i--;
arrSize--;
break;
}
}
}
System.out.println(arr);
그냥 배열로 문제를 풀때는 for문을 돌려 중복된 개수 구하고 그 개수 만큼 빼준 길이의 배열을 하나 더 생성 후 다시 for문을 돌려 새로 생성한 배열에 넣어주는 과정을 거쳤지만 ArrayList를 활용해서 배열 1개, 2중 for문 1개로 해결한 것을 볼 수 있다.
결과
클래스(Class)
객체(Object)
ex)
클래스 | 객체 |
---|---|
제품설계도 | 제품 |
TV설계도 | TV |
붕어빵기계 | 붕어빵 |
객체의 구성요소
형식
// 파일명은 해당클래스 이름과 같아야 한다.
// 클래스 이름은 첫 글자를 항상 대문자로 해야 한다.
// 하나의 파일에 여러가지 클래스가 있다면 하나의 클래스에만 public을 써야한다.
public class ClassName {
int 변수1;
String 변수2;
void 메서드(){
code...;
}
void 기능(){
code...;
}
}
class ClassName2{
code...;
}
public class Main{
public static void main(String[] args) {
ClassName classTest = new ClassName(); // 인스턴스화
classTest.변수1 = value;
classTest.메서드();
classTest.기능();
}
ex) TV
public class TV { String color; boolean power; int channel = 7; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } }
public class TvTest { public static void main(String[] args) { TV t = new TV(); // TV클래스를 인스턴스화 하였다.(TV를 한개 생성한 것과 같다) t.channelDown(); System.out.println("현재 채널은 " + t.channel + " 입니다."); } }
결과 : 현재 채널은 6 입니다.
public class TV { String color; boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } }
String color; boolean power; int channel;
이 3가지 클래스 변수는 TV제품의 속성이다.
TV의 색상, 전원의 상태, 채널의 상태이다.
void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; }
이 3가지 메서드는 TV의 기능이다.
power()메서드는 전원의 On/Off 기능이고, channelUp(), channelDown()은 채널이동 기능 이다.