int x = 5;
int y = 10;
int z = x + y; // 5(피연산자) +(연산자) 10(피연산자)
산술 -> 비교 -> 논리 -> 대입
+
, -
, *
, /
, %
, <<
, >>
<<
(왼쪽으로 자리수 옮기기), >>
(오른쪽으로 자리수 옮기기)>
, <
, >=
, <=
, ==
, !=
&&
(AND = 피연산자 모두 참),||
(OR = 피연산자 둘 중 하나라도 참),!
(피연산자의 반대 boolean값)=
+=
, -=
, *=
등++
: += 1
// --
: -= 1
++(피연산자)
, --(피연산자)
는 연산 전에 1이 더해지거나 뺌
(피연산자)++
, (피연산자)--
는 연산 후에 1이 더해지거나 뺌
int intNumber = 93 + (int) 98.8; // 93 + 98
double doubleNumber = (double) 93 + 98.8; // 93.0 + 98.8
(조건) ? (참결과) : (거짓결과)
int x = 1;
int y = 3;
boolean a = (x == y) ? true : false;
System.out.println(a); // false
boolean b = (x != y) ? true : false;
System.out.println(b); // true
(객체명) instance of (클래스명)
특정 조건에 따라 다른 연산을 수행하고 싶을 때
if
, switch
if (조건) {연산} else {연산}
if (조건) {연산} else if (조건) {연산} else {연산}
boolean flag = true;
int number = 2;
if (flag) {
if (number == 1) {
System.out.println("flag 값은 true 고, number 값은 1입니다.");
} else if (number == 2) {
System.out.println("flag 값은 true 고, number 값은 2입니다.");
} else {
System.out.println("flag 값은 true 고, number 값은 모르겠습니다.");
}
} else {
if (number == 1) {
System.out.println("flag 값은 false 고, number 값은 1입니다.");
} else if (number == 2) {
System.out.println("flag 값은 false 고, number 값은 2입니다.");
} else {
System.out.println("flag 값은 false 고, number 값은 모르겠습니다.");
}
}
switch (피연산자) { case (조건) : (연산) }
break;
를 꼭 넣어줘야 함default : (연산)
을 명시해주어 case 조건들이 모두 만족하지 않을 때 수행할 연산을 정해줘야 함int month = 8;
String monthString = "";
switch (month) {
case 1:
monthString = "1월";
break;
case 2:
monthString = "2월";
break;
case 3:
monthString = "3월";
break;
case 4:
monthString = "4월";
break;
case 5:
monthString = "5월";
break;
case 6:
monthString = "6월";
break;
case 7:
monthString = "7월";
break;
case 8:
monthString = "8월";
break;
case 9:
monthString = "9월";
break;
case 10:
monthString = "10월";
break;
case 11:
monthString = "11월";
break;
case 12:
monthString = "12월";
break;
default:
monthString = "알 수 없음";
}
System.out.println(monthString); // 8월
특정 조건에 따라 반복해서 동일한 연산을 수행하고 싶을 때
for
, while
, do-while
for (초기값; 조건문; 증가연산) {연산}
초기값
이 조건문
을 만족할 때까지 {연산}
을 수행하면서 회차마다 증가연산
을 수행함for (int i = 0; i < 4; i++) {
System.out.println(i + "번째 출력");
}
//
0번째 출력
1번째 출력
2번째 출력
3번째 출력
for (변수타입 변수명 : 목록변수) {연산}
int[] numbers = {3, 6, 9, 12, 15};
for (int number: numbers) {
System.out.print(number + " ");
}
// 3 6 9 12 15
while (조건문) {연산}
int number = 0;
while (number < 3) {
number++;
System.out.println(number + " 출력!");
}
//
1 출력!
2 출력!
3 출력!
do {연산} while (조건문)
int number = 4;
do {
System.out.println(number + " 출력!");
} while (number < 3);
//
4 출력!
break;
명령을 호출하면 가장 가까운 블럭의 for문, while문, switch문을 중단함continue;
명령을 호출하면 for문, while문에서 해당 순서를 패스함타입[] 변수명;
또는 타입 변수명[];
int[] intArr;
int intArr[];
new
명령을 통해 생성하며, 대괄호[ ]안에 크기를 지정해줌타입 변수명[] = new 타입[];
int[] intArray = new int[3]; // {0, 0, 0}
boolean[] boolArray = new boolean[3]; // {false, false, false}
String[] stringArray = new String[3]; // {"", "", ""}
int[] intArray = new int[3];
System.out.println(intArray[1]);
int[] intArray = new int[3];
for (int i = 0; i < intArray.length; i++) {
System.out.println(intArray[i]);
}
int[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"a", "b", "c", "d"};
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i;
}
for (int item: intArray) {
System.out.println(intArray[item]);
}
//
0
1
2
3
4
Arrays.fill(intArray, 1);
for (int item: intArray) {
System.out.println(intArray[item]);
}
//
1
1
1
1
1
int[] a = {1, 2, 3, 4};
int[] b = a;
b[0] = 3;
System.out.println(a[0]);
// 3
a 배열의 0번째 순번값도 수정됨
int[] c = {1,2,3,4};
int[] d = Arrays.copyOf(c, c.length);
// d 라는 새로운 배열이 생김
String[] stringArray = new String[3];
// 선언 후 하나씩 초기화
String[] stringArray = new String[3];
stringArray[0] = "val1";
stringArray[1] = "val2";
stringArray[2] = "val3";
// 선언과 동시에 초기화
String[] stringArray1 = new String[] {"val1", "val2", "val3"};
String[] stringArray2 = {"val1", "val2", "val3"};
int[][] array;
int array[][];
int[] array[];
int[][] array = new int[][];
int[][] array = {
{1, 2, 3},
{4, 5, 6}
};
int[][] array = new int[2][3];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
arr[i][j] = 0;
}
}
int[][] array = new int[3][];
// 배열 원소마다 크기 지정
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
// 중괄호 초기화도 원소배열 크기 다르게 생성 가능
int[][] array2 = {
{10, 20},
{10, 20, 30, 40},
{10}
};
// 선언 & 생성
ArrayList<Integer> intList = new ArrayList<Integer>();
// 추가
intList.add(1);
intList.add(2);
intList.add(3);
// 수정
intList.set(1, 10); // 배열의 1번 인덱스 값(2)을 10으로 변경
System.out.println(intList.get(1)); // 10
System.out.println(intList.get(0)); // 1
// 삭제
intList.remove(0); // 배열의 0번 인덱스를 삭제하고 나머지 배열을 앞으로 당김
System.out.println(intList.get(0)); // 10
// 배열 전체 값 조회하기
System.out.println(intList.toString()); // [10, 3]
// 전체 삭제
intList.clear();
System.out.println(intList.toString()); // []
LinkedList<Integer> linkedList = new LinkedList<Integer>();
linkedList.add(5);
linkedList.add(10);
linkedList.add(3);
System.out.println(linkedList.get(0)); // 5
System.out.println(linkedList.get(1)); // 10
System.out.println(linkedList.get(2)); // 3
System.out.println(linkedList.toString()); // [5, 10, 3]
// 이렇듯 조회할 때는 arraylist 보다 속도가 현저히 느리다.
// 추가
linkedList.add(200);
System.out.println(linkedList.toString()); // [5, 10, 3, 200]
linkedList.add(2, 4); // 2번 인덱스에 값(4)를 추가
System.out.println(linkedList.toString()); // [5, 10, 4, 3, 200]
// 수정
linkedList.set(1, 30);
System.out.println(linkedList.toString()); // [5, 30, 4, 3, 200]
// 삭제
linkedList.remove(1);
System.out.println(linkedList.toString()); // [5, 4, 3 200]
// 전체 삭제
linkedList.clear();
System.out.println(linkedList.toString()); // []
Stack<Integer> intStack = new Stack<Integer>();
intStack.push(10);
intStack.push(15);
intStack.push(1);
// 다 지워질 때까지 출력
while (!intStack.isEmpty()) {
System.out.println(intStack.pop());
} // 나중에 넣은 순서대로 1
15
10
// 다시 추가
intStack.push(10);
intStack.push(15);
intStack.push(1);
// peek : 제일 나중에 넣은 것 출력
System.out.println(intStack.peek()); // 1
// size
System.out.println(intStack.size()); // 3
Queue<Integer> intQueue = new LinkedList<>();
intQueue.add(1);
intQueue.add(5);
intQueue.add(9);
while (!intQueue.isEmpty()) {
System.out.println(intQueue.poll());
} // 넣은 순서대로 1
5
9
intQueue.add(1);
intQueue.add(5);
intQueue.add(9);
System.out.println(intQueue.peek()); // 1
System.out.println(intQueue.size()); // 3
Set<Integer> intSet = new HashSet<>();
intSet.add(1);
intSet.add(12);
intSet.add(5);
intSet.add(9);
intSet.add(1);
intSet.add(12);
for (Integer value: intSet) {
System.out.println(value);
} // 중복 허용 안하므로 1
5
9
12
// contains : 포함 여부
System.out.println(intSet.contains(2)); // false
System.out.println(intSet.contains(5)); // true
Map<String, Integer> intMap = new HashMap<>();
// 키 값
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14); // 중복 key
intMap.put("삼", 15); // 중복 key
// key 값 전체 출력 (향상된 for문)
for (String key: intMap.keySet()) {
System.out.println(key);
} // 중복 허용 안하므로 일
이
삼
// value 값 전체 출력 (향상된 for문)
for (Integer value: intMap.values()) {
System.out.println(value);
} // 중복 허용 안하므로 11
12
15
// 중복되는 값의 맨 마지막 값으로 덮어쓰기됨
System.out.println(intMap.get("삼")); // 15
package week02;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
public class Main02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String collectionName = sc.next();
String title = sc.next();
switch (collectionName) {
case "List":
ArrayList<String> strList = new ArrayList<>();
while (true) {
String text = sc.next();
if (Objects.equals(text, "끝")) {
break;
}
strList.add(text);
}
System.out.println("[ List로 저장된 " + title + " ]");
for (int i = 0; i < strList.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + strList.get(i));
}
break;
case "Set":
LinkedHashSet<String> strSet = new LinkedHashSet<>();
while (true) {
String text = sc.next();
if (Objects.equals(text, "끝")) {
break;
}
strSet.add(text);
}
System.out.println("[ Set 으로 저장된 " + title + " ]");
Iterator iterator = strSet.iterator();
for (int i = 0; i < strSet.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + iterator.next());
}
break;
case "Map":
Map<Integer, String> strMap = new HashMap<>();
int lineNumber = 1;
while (true) {
String text = sc.next();
if (Objects.equals(text, "끝")) {
break;
}
strMap.put(lineNumber++, text);
}
System.out.println("[ Map 으로 저장된 " + title + " ]");
for (int i = 0; i < strMap.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + strMap.get(i + 1));
}
break;
default:
System.out.println("저장할 수 없는 자료구조 입니다.");
}
}
}