


//배열을 저장하는 변수를 선언
//자료형[] 변수명;
int[] numbers;
//배열 변수에는 타입에 맞는 변수를 생성해서 대입 -> 할당
//int형 변수를 3개 생성
numbers = new int[3];
//생성된 배열에 접근
//배열변수명[인덱스]
System.out.println("0: " + numbers[0]);
System.out.println("1: " + numbers[1]);
//배열 저장소에 값 저장하기
numbers[0] = 100;
numbers[1] = 99;
System.out.println("0: " + numbers[0]);
System.out.println("1: " + numbers[1]);
//선언된 배열 변수 타입과 할당한 배열의 타입은 일치해야 한다.
double[] height = new double[5];
char[] alphabet = new char[3];
String[] strArr = new String[5];
//자료형별 기본값
//정수형(byte. short, int, long): 0
//실수형(float, double): 0.0
//문자(char) : ' '
//문자열(String): null;
System.out.println("double: "+ height[0]);
System.out.println("char: "+ alphabet[0]);
System.out.println("string: "+ strArr[0]);
//배열의 길이(저장소갯수)를 알려주는 변수
System.out.println("friends: "+ friends.length);
for (int i = 0; i < friends.length; i++) {
System.out.println(i + "friends: "+ friends[i]);
}
char[] arrChar = {'가', '나', '다'};
for (int i = 0; i < arrChar.length; i++) {
System.out.println(i + " arrChar: "+ arrChar[i]);
}
double[] height = new double[] {180.5, 190.2, 177.3, 164.2};
for(int i = 0; i < height.length; i++) {
System.out.print("[" + i + "]: "+ height[i] + " ");
}
System.out.println();
배열은 한번 선언된 길이를 변경할 수 없음
만약 배열 길이를 늘려야할 때는 새로 더 긴 배열을 만들어서 복제해서 사용
배열 정렬
//오름차순 출력
for (int i = 0; i < height.length; i++) {
System.out.println(i + ": " + height[i]);
for (int j = 0; j < height.length; j++) {
if (height[i] < height[j]) {
double temp = height[i];
height[i] = height[j];
height[j] = temp;
}
}
}
System.out.println(Arrays.toString(height));
sort 기능 쓰면됨..
int[] num = {1, 2, 3, 4, 5};
int[] copyNum = num;
System.out.println(num);
System.out.println(copyNum);
num[0] = 100;
//복사한 다음 num[0]을 변경했지만 copyNum[0]에도 동일한값이 나온다.
System.out.println(copyNum[0]);
int[] deepCopyNum = new int[num.length];
for (int i = 0; i < num.length; i++) {
deepCopyNum[i] = num[i];
}
num[1] = 200;
//deepCopyNum의 [1]값은 바뀌지않음
System.out.println("num: " + Arrays.toString(num));
System.out.println("copyNum: " + Arrays.toString(copyNum));
System.out.println("deepCopyNum: " + Arrays.toString(deepCopyNum));
//깊은 복사 기능 이용하기 (메소드)
String[] names = {"a", "b", "c", "d", "e"};
String[] copyNames = new String[7];
System.arraycopy(names, 2, copyNames, 3, 2);
System.out.println("names: " + Arrays.toString(names));
System.out.println("copyNames: " + Arrays.toString(copyNames));
System.arraycopy(names, 0, copyNames, 0, names.length);
System.out.println("names: " + Arrays.toString(names));
System.out.println("copyNames: " + Arrays.toString(copyNames));
//완벽한 사본?
//clone()
//완전 동일한 배열 사본이 생성
String[] methodCopy = names.clone();
System.out.println("methodCopy: " + Arrays.toString(methodCopy));
//친구 3명 저장할수있는 변수를 선언, 저장소에 이름 저장 출력
//저장소에 이름 저장 후 출력
String[] friends = new String[3];
for (int i = 0; i < 3; i++) {
System.out.print(i + " 친구 이름 입력: ");
friends[i] = sc.next();
System.out.println(i + "friends: "+ friends[i]);
}
int[] numberList = new int[5];
for (int i = 0; i < numberList.length; i++) {
numberList[i] = i + 1;
}
for (int i = 0; i < numberList.length; i++) {
System.out.println(i + " numberList: " + numberList[i]);
}
데이터 필터 -> 원하는 값을 조회할 때, 수정할 때
수 10개를 저장하는 저장공간을 확보하고
10개의 저장소에 랜덤으로 1~100까지의 숫자를 저장
저장된 값중에서 50보다 큰 수가 몇개인지 출력
50보다 큰 수는 "00개"
int[] numberList2 = new int[10];
int count = 0;
for (int i = 0; i < numberList2.length; i++) {
numberList2[i] = rd.nextInt(100) + 1;
}
for (int i = 0; i < numberList2.length; i++) {
if (numberList2[i] > 50) {
count++;
System.out.println(i + "번째: " + numberList2[i]);
}
}
System.out.println("result: " + count + "개");
char findName = ' ';
int count = 0;
System.out.print("찾으려는 친구 성 입력: ");
findName = sc.next().charAt(0);
for (int i = 0; i < studentNameList.length; i++) {
if (studentNameList[i].charAt(0) == findName) {
count++ ;
System.out.print("[" + i + "]: "+ studentNameList[i] + " ");
}
}
System.out.println();
System.out.println("result: " + count + "명");
//동일값일 때 문제생길 때가 있어서 if만으로 줄 것?
double minHeight = 0.0d, maxHeight = 0.0d;
for (int i = 0; i < height.length; i++) {
if (height[i] < minHeight) {
minHeight = height[i];
} else if (height[i] > maxHeight) {
maxHeight = height[i];
} else if (minHeight == 0.0d) {
minHeight = height[i];
}
}

//2차원 배열
//배열 저장소가 두개 연결되어 있는 구조
int[][] intArr;
intArr = new int[3][3];
System.out.println(intArr);
System.out.println(intArr[0]);
System.out.println(intArr[0][1]);
String[][] strArr = {{"가","나","다"}, {"라","마","바"}};
strArr[0] = new String[] {"심심", "안심심", "배고픔"};
for(int i = 0; i < strArr.length; i++) {
for(int j = 0; j < strArr[i].length; j++) {
System.out.print(strArr[i][j] + " ");
}
System.out.println();
}
//2차원 배열 사용
char[][] chArr= {{'가', '다'},{'a', 'c'}};
for(char[] arr:chArr) {
for (char c:arr ) {
System.out.print("[chArr] " + c + "");
}
System.out.println();
}조건 : 중복값 없이 저장
중요하게 생각했던 건 random 숫자를 한번 돌릴 때마다 int형 배열 arr[i]가 전부 검색해서 중복을 찾아봐야한다, 였음.. 왜냐면 내가 너무 로직을 적다가 적다가 까먹어서 엄청 노트에 강조하고 손코딩을 했다 ㅠㅠ
int형 배열 arr[i]의 값이 0일 때, 중복이 카운트 됐을때 for문을 중단하고 빠져나왔다.
flagNum으로 5개 숫자 차는거 카운트, 반복문
for문 중복으로 안썼다고좋아했는데 이중반복문이다.. (while for)
중복 카운트가 없을 때 arr[i]에 값을 넣어주고 flagnum(반복문 카운트)를 올려준다
public void arrayRandomTest() {
int[] arr = new int[5];
int randNum = 0, flagNum = 0;
while (flagNum < 5) {
int count = 0;
randNum = rd.nextInt(10) + 1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
break;
} else if (arr[i] == randNum) {
count++;
break;
}
}
if (count == 0) {
arr[flagNum] = randNum;
flagNum++;
}
}
}
public void arrayRandomTest() {
int[] result = new int[5];
boolean[] cache = new boolean[11];
int cursor = 0;
while (cursor < 5) {
int next = random.nextInt(10) + 1;
if (!cache[next]) {
result[cursor] = next;
cache[next] = true;
cursor++;
}
}
}
