int s = 10;
double o = 5;
int r = (int) (s * o);
System.out.println("r = " + r); // int
byte b1 = 100;
byte b2 = 50;
int r3 = b1 + b2;
System.out.println(r3);
char cc = 'A';
int plusNum = 3;
char r4 = (char) (cc + plusNum); // D
System.out.println("r4 = " + r4);
단축 평가
로 진행/*
&&, || -> 단축 평가 연산 (short circuit operation)
- 좌항의 연산 결과가 전체 연산 결과에 영향을 미칠 경우
우항의 연산을 진행하지 않습니다.
*/
int x = 10, y = 20;
System.out.println(x > 10 && (y / 0 == 10)); //false
System.out.println(x > 10 || y < 30); //true
단항(++, -- , !) > 이항(*, /, % ...) > 삼항(?:) > 대입(=)
()
로 꼭 묶어주어야함 ! // Math.random => 0.0 <= < 1.0
// (int) Math.random => 0 <= < 1
// Math.random * 10 => 0.0 <= < 10.0
// (int) (Math.random * 10) => 0 <= < 10
// -> Math.random * n 을 반드시 괄호로 묶어줌
int random = (int) (Math.random() * 10) + 1;
print();
println();
printf();
System.out.printf("%s의 강아지\n", name);
int month = 12;
int day = 25;
String anni = "크리스마스";
//12월 25일은 크리스마스 입니다.
System.out.println(month + "월 " + day + "일은 " + anni + " 입니다.");
System.out.printf("%d월 %d일은 %s입니다.\n", month, day, anni);
//실수를 표현하는 서식문자 %f -> 기본 6자리까지 표현.
//%.[자리수를 지정하는 숫자]f -> 원하는 자리수까지 표현.
//%라는 문자 자체를 표현할 때는 %% 쓰시면 됩니다.
double rate = 64.126;
System.out.printf("합격률은 %.2f%%입니다.", rate);
import java.util.Scanner; // Scanner 클래스의 정보를 import 하자
Scanner scan = new Scanner(System.in); // 입력준비 딱 1회만 하면됨
// 문자 입력받기
System.out.print("이름: ");
String userName = scan.nextLine();
System.out.println("userName = " + userName);
// 정수 입력받기 - 문자를 입력받은 뒤 정수로 변환, Integer.parseInt()
System.out.print("출생년도: ");
int birthYear = Integer.parseInt(scan.nextLine());
System.out.println("birthYear = " + birthYear);
int[] numbers; // 타입[] 변수이름;
numbers = new int[5]; // 생성할 때 배열의 크기를 지정
numbers[0] = 50;
numbers[1] = 77;
numbers[2] = (int) 66.7;
numbers[3] = numbers[0] + 20;
numbers[4] = 100;
// numbers[5] = 10; // 크기를 지정해놓았기 때문에 불가능
System.out.println(numbers.length);
for (int i = 0; i < numbers.length; i++) {
System.out.printf("numbers[%d]: %d\n", i, numbers[i]);
}
// 배열 순회 forEach : 단축키 iter
for (int n : numbers) {
System.out.println("n = " + n);
}
System.out.println(Arrays.toString(numbers));
{}
로 묵어주는 것이 포인트int[] pointList = new int[] {10, 20, 30, 40};
System.out.println(Arrays.toString(pointList));
new Type[]
생략 가능String[] pets = {"멍멍이", "짹짹이", "콩수니"};
System.out.println(Arrays.toString(pets));
pets = new String[] {"zzz", "fff"};
System.out.println(Arrays.toString(pets));
기본값
으로 미리 값을 넣어놓음 byte[] bArr = new byte[3];
double[] dArr = new double[6];
boolean[] blArr = new boolean[4];
String[] sArr = new String[5];
System.out.println(Arrays.toString(bArr)); // [0, 0, 0]
System.out.println(Arrays.toString(dArr)); // [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
System.out.println(Arrays.toString(blArr)); // [false, false, false, false]
System.out.println(Arrays.toString(sArr)); // [null, null, null, null, null]
System.out.println(bArr.length); // 3
System.out.println(dArr.length); // 6
System.out.println(blArr.length); // 4
System.out.println(sArr.length); // 5
// push: 맨 끝에 데이터 추가
int[] numbers = {10, 20, 30, 40};
int newNumber = 50;
// 1. 기존 사이즈보다 1개가 큰 새로운 배열 생성
int[] temp = new int[numbers.length + 1];
// 2. 기존 데이터를 새로운 배열에 전부 복사
for (int i = 0; i <numbers.length; i++) {
temp[i] = numbers[i];
}
// 3. 새 배열의 끝 인덱스에 넣을 데이터 추가
temp[temp.length -1] = newNumber;
// 4. numbers에 저장된 주소값을 temp의 주소값으로 변경
numbers = temp;
// 5. temp는 더이상 배열을 관리하면 안됨
temp = null;
System.out.println("numbers: " + Arrays.toString(numbers));
System.out.println("temp: " + Arrays.toString(temp));
int[] numbers = {10, 20, 30, 40, 50, 60};
// pop: 배열의 맨 끝 데이터를 삭제하면서 꺼내옴
// 1. 기존사이즈보다 1개 적은 사이즈의 배열을 생성
int[] temp = new int[numbers.length -1];
// 2. 원본 배열에서 맨 끝 인덱스를 제외한 모든 내용 사본에 복사
for (int i = 0; i <temp.length ; i++) {
temp[i] = numbers[i];
}
// 삭제값 백업 (pop의 특징)
int removedNumber = numbers[numbers.length -1];
// 3. 주소값 이전
numbers = temp;
temp = null;
System.out.println("numbers: " + Arrays.toString(numbers));
System.out.println("temp: " + Arrays.toString(temp));
System.out.println("삭제된 값 = " + removedNumber);
String[] pets = {"멍멍이", "야옹이", "짹짹이"};
// String[] petsCopy = pets; // 배열 복사가 아니라 배열 주소복사
// 배열 복사 : 새로운 배열을 생성 후 반복문을 통해 값을 넣어줌
String[] petsCopy = new String[pets.length];
for (int i = 0; i < pets.length; i++) {
petsCopy[i] = pets[i];
}
pets[1] = "냥냥이"; // 복사 후 원본 수정
System.out.println("pets = " + Arrays.toString(pets));
System.out.println("petsCopy = " + Arrays.toString(petsCopy));
int[] numbers = {1, 3, 5, 7, 9, 11};
위와 같은 배열이 있다고 생각해보자. 여기서 나는 5를 삭제하고 싶다. 그렇다면 어떻게 해야할까?
1. 5 -> 7로 바꿔서 , [1, 3, 7, 7, 9, 11]
만듦
2. 7 -> 9로 바꿔서 , [1, 3, 7, 9, 9, 11]
만듦
3. 9 -> 11로 바꿔서, [1, 3, 7, 9, 11, 11]
만듦
4. numbers보다 길이가 1 작은 temp 임시배열 생성
5. temp 배열 길이만큼 반복문을 돌며 numbers의 인덱스들을 넣음
6. [1, 3, 7, 9, 11]
의 배열을 얻을 수 있음
-> 즉, 1 ~ 3번 과정을 반복문에 넣은다면 내가 원하는 위치의 값을 삭제할 수 있음 !
package day02;
import java.util.Arrays;
public class ArrayDelete {
public static void main(String[] args) {
// 배열에서 원하는 위치의 값 삭제하기
int[] numbers = {1, 3, 5, 7, 9, 11};
int targetIndex = 0; // 내가 삭제하고싶은 인덱스
for (int i = targetIndex; i < numbers.length - 1; i++) {
numbers[i] = numbers[i + 1];
}
// 5 삭제 (targetIndex = 2)
// numbers[2] = numbers[3]; // 5 -> 7, [1, 3, 7, 7, 9, 11]
// numbers[3] = numbers[4]; // 7 -> 9, [1, 3, 7, 9, 9, 11]
// numbers[4] = numbers[5]; // 9 -> 11, [1, 3, 7, 9, 11, 11]
int[] temp = new int[numbers.length -1];
for (int i = 0; i <temp.length; i++) {
temp[i] = numbers[i];
}
numbers = temp;
temp = null;
System.out.println(Arrays.toString(numbers));
}
}