배열
- Java 프로그래밍에서 여러 개의 변수를 분류통 같은 곳에 모아서 저장하고 싶을 때 "배열"이라는 변수에 저장함. 여러 개의 값들을 한 꺼번에 넣거나 하나씩 넣을 수도 있고, 꺼낼 때는 하나씩 꺼낼 수 있음
- 분류통은 자료구조라고 불림
선언 [ ]
- int 와 같은 기본형 변수는 1개의 값만 저장할 수 있다면, int[ ] 같은 배열형 변수는 여러 개를 변수에 저장할 수 있음
- 하나의 배열형 변수에 는 같은 타입의 변수만 담을 수 있음
- 한 번에 많은 양의 데이터를 다루거나 계산할 때 사용함
- 배열은 영어로 Array라고 부름
- 선언 방법
- 타입 [ ] 변수;
- ex. int [ ] intArray;
- 타입 변수 [ ];
- ex. int intArray[ ];
- 타입 [ ] 변수;
생성
- 배열(Array)는 참조형 변수들처럼 new 명령어를 통해 생성, [ ] 안에 크기를 지정
- 사이즈를 지정해서 생성된 배열은 각 칸마다 순번이 있음
- 순번은 0부터 시작함(8개 사이즈의 배열은 0번 ~ 7번까지)
- Int array[ ] = new int[8]
- new int[8] : 배열 크기를 지정
- 배열은 생성될 떄 각 타입별 초기 값으로 초기화되어 채워짐
- int 는 0 , boolean은 false , String은 null 값 같이 초기 값이 정해져 있음
- 참조형 변수이기 때문에 실제 값을 담지 않고 실제값의 주소값을 저장하고 있음(Stack, Heap 구조)
순회
- 배열 안에 담겨 있는 변수들을 하나씩 꺼내서 사용하는 것
- 배열 조회는 해당 배열변수 뒤에 [ ]로 감싸서 명시
- ex. intArray라는 배열에서 n번 째 값을 순회할 경우 intArray[n]
- 배열의 순회 방법은 반복문을 사용하는 것이 일반적임
초기화
- 배열 초기화 할 때는 3가지 방법이 있음
- 중괄호 { } 사용해서 초기화
- 반복문 for 문을 사용해서 초기화(또는 향상된 for문)
- Array.fill 메서드를 사용해서 초기화
- Array 클래스는 Java 기본 제공 메서드가 담긴 클래스
Array
package week02.array;
public class Array01 {
public static void main(String[] args) {
// 배열 생성
int[] intArray = new int[3];
boolean[] boolArray = new boolean[3];
String[] stringArray = new String[3];
// 배열 선언 먼저 -> 나중에 초기화
int [] intArray2;
intArray2 = new int[3];
// 생성한 배열을 순회
// 단건 조회
System.out.println(intArray[1]);
// 다건 조회
for (int i=0; i<intArray2.length; i++) {
System.out.println(intArray2[i]);
}
}
}
package week02.array;
import java.util.Arrays;
public class Array02 {
public static void main(String[] args) {
// 초기화
// 배열의 특정값 대입 선언
int[] intArr = {1, 2, 3, 4, 5};
String[] strArr = {"a", "b", "c", "d"};
// for문 사용해서 대입
for (int i = 0; i < intArr.length; i++) {
intArr[i] = i;
}
// 다건 출력
for (int i = 0; i < intArr.length; i++) {
System.out.println(intArr[i]);
}
int[] intArr2 = {10, 20, 30, 40, 50};
// 향상된 for문 사용 다건 출력
for (int item : intArr2) {
System.out.println(item);
}
// 배열 주소를 모두 같은 값으로 초기화
Arrays.fill(intArr, 1);
for (int item : intArr) {
System.out.println(item);
}
}
}
복사
- 얕은 복사
- 배열 변수간에 대입 연산자 = 를 사용해서 복사를 하게 되면 주소 값만 복사 됨
- 주소 값만 복사되고 실제 값은 1개로 유지되는 것을 얕은 복사라고 함
- 주소 값만 복사되는 것은 변수명은 서로 다르지만 같은 값을 보고 있다는 것을 뜻함
- 깊은 복사
- 새로운 배열을 똑같이 만드록 싶을 때 깊은 복사를 사용함
- 실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사하면 됨
- 반복문 for문을 통해서 하나씩 꺼내서 복사해주는 방법과 여러 메서드를 사용하는 방법이 있음
- .clone( ) 메서드 : 2차원 이상의 배열에서는 얕은 복사로 작동함
- .copyOf( ) 메서드 : 배열과 함께 length 값도 같이 넣어서 실행
array copy
package week02.array;
public class Array03 {
public static void main(String[] args) {
// 얕은 복사
int [] a = {1, 2, 3, 4};
int [] b = a; // 얕은 복사
b[0] = 3; // b의 0번째 값 변경
System.out.println(a[0]);
}
}
package week02.array;
import java.util.Arrays;
public class Array04 {
public static void main(String[] args) {
// 2. Arrays.copyOf() 메서드
int[] a = {1, 2, 3, 4};
int[] b = Arrays.copyOf(a, a.length); // 배열과 배열의 length도 같이 넣음
a[3] = 0;
System.out.println(a[3]);
System.out.println(b[3]);
}
}
String 배열
- 선언, 생성 초기화
- 배열 중에서 가장 많이 사용하게 되는 배열이 문자열 배열임
- 선언 방법은 기존 배열과 동일
- 배열 선언 및 생성
- String[ ] stringArrray = new String[3];
- 배열의 초기화
- 1개 씩 초기화 : stringArray[0] = "val1"
- 선언과 동시에 초기화 : String[ ] stringArray = new String[ ] {"val1", "val2", "val3"}
- String 기능 활용 (= char 배열)
- char 배열은 문자 배열, String은 문자열
- 수식으로 표현 시 : String = char [ ]
- String은 char 배열과 같기 때문에 둘 다 문자열을 저장할 수 있는 변수
- String을 많이 쓰는 이유는 참조형 변수가 더 많은 기능을 가지고 있음
- String만 가지고 있는 기능
- char 배열은 문자 배열, String은 문자열
string Array
package week02.array;
public class Array05 {
public static void main(String[] args) {
// 문자(char), 문자열(String)
// String = char[]
// 기본형 변수는 소문자로 시작함, 참조형 변수는 대문자로 시작함
// - Wrapper class에서 기본형 변수를 boxing 하면 int -> Integer
// 기본형 변수는 값 자체를 저장, 참조형 변수는 별도의 공간에 값 저장 후 그 주소를 저장(=주소형 변수)
// String이 기능이 많아서 char보다 많이 사용함
// String 활용 예시
String str = "ABCD";
// length
int strLength = str.length();
System.out.println(strLength);
// charAt(int index)
char strChar = str.charAt(1);
System.out.println(strChar);
// substring(int fromIdx, int toIdx)
String strSub = str.substring(0, 3);
System.out.println(strSub);
// equals(String str)
String newStr = "ABCD";
boolean strEqual = newStr.equals(str);
System.out.println(strEqual);
// toCharArray() : String -> char[]
char[] strCharArray = str.toCharArray();
// char[] -> String -> char
char[] charArray = {'A', 'B', 'C'};
String charArrayString = new String(charArray);
System.out.println(charArrayString);
}
}
다차원 배열
- 2차원 배열(2열 배열), 순회
- 1열로 구성된 분류통을 배열이라고 하고, 1차원 배열이라고도 부름
- 1열 배열을 위로 쌓으면 2열 배열이 되고 이걸 2차원 배열이라고 함
선언
- 2차원 배열을 선언할 때는 1차월 배열에 대괄호를 하나 더 추가
- int [ ] [ ] array , int array[ ] [ ] , int [ ] array [ ]
- 2차원 배열을 생성할 때도 대괄호를 하나 더 추가
- int [ ] [ ] array = new int [ ] [ ];
- 초기화
- 2차원 배열 초기화는 2가지 방법이 존재
- 중괄호를 사용해 선언과 동시에 초기화
- 선언/ 생성 이후 반복문을 통해 초기화
- 2차원 배열 초기화는 2가지 방법이 존재
2 dimension Array
package week02.array;
public class Array06 {
public static void main(String[] args) {
// 2차원 배열
int[][] array = new int[2][3]; // 최초 선언
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[j].length; j++) {
System.out.println("출력값 =>" + i + ", " + j);
array[i][j] = 0;
}
}
}
}
2. 가변 배열
- 2차원 이상의 배열을 생성할 때 열의 길이를 생략하여, 행마다 다른 길이의 배열을 요소로 저장할 수 있음
- 행마다 다른 길이의 배열을 저장할 수 있는 배열을 가변 배열이라고 함
3. 2차원 배열 이상의 다차원 배열
- 2차원 배열 외에도 3차원, 4차원 등이 있으나 대부분 3차원 까지만 사용하는 경우가 많음
- 3차원 배열은 2차원 배열 생성에 괄호를 하나 더 추가함
- ex. int [ ] [ ] [ ] multiArray
- 초기화 할 때는 중괄호를 하나 더 추가
- {{{배열원소1}, {배열원소2}}, {{배열원소3}}} 와 같은 형태로 초기화가 가능
Variable Array
package week02.array;
public class Array07 {
public static void main(String[] args) {
// 가변 배열
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}
};
}
}
4. 다차원 배열 조회
- 2차원 배열 조회 시 2차원 인덱스를 가진만큼 2중 반복문을 통해 출력 가능
- 2중 반복문을 통해 가변 배열도 출력 가능
최대값, 최소값 구하기
package week02.array;
public class Array08 {
public static void main(String[] args) {
// 최대값 구하기
int[] array = {3, 2, 1, 5, 1};
// 최대값 초기화 세팅
int max = array[0];
// 최대값 구하기 로직
for (int num : array) {
if (num > max) {
max = num;
}
}
// 최소값 구하기
int min = array[0];
// 최소값 구하기 로직
for (int num : array) {
if (num < min) {
min = num;
}
}
System.out.println("최대값은 => " + max);
System.out.println("최소값은 => " + min);
}
}
컬렉션(Collection)
Java 프로그래밍에서는 배열을 더 고도화 시켜서 컬렉션이라는 이름으로 참조형 자료구조를 제공함.
컬렉션
- Java에서 컬렉션은 배열보다 다수의 참조형 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능을 많이 가지고 있음
- 컬렉션 기능 : 크기 자동조정/ 추가/ 수정/ 삭제/ 반복/ 순회/ 필터/ 포함확인 등...
- 컬렉션 종류
- collection 에는 List, Set, Queue, Map 이 있음.
- List : 순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷
- Queue : 빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합
- First In First Out : 먼저 들어간 순서대로 값을 조회할 수 있음
- Set : 순서가 없는 데이터의 집합 (데이터 중복 허용 안 함) - 순서없고 중복 없는 배열
- Map : 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합 (Key 값 중복 허용 안함)
- Map하고 python의 Dictionary가 같은 기능을 가졌다고 판단 됨.
- 컬렉션은 기본형 변수가 아닌 참조형 변수를 저장함
- 자주 쓰는 참조형 변수
- int 의 참조형 변수 = Integer
- long 의 참조형 변수 = Long
- double 의 참조형 변수 = Double
- String 은 원래부터 참조형 변수
- 자주 쓰는 참조형 변수
List
순서가 있는 데이터의 집합(데이터 중복 허용) - 배열과 비슷
ArrayList
배열(Array) 처럼 일렬로 데이터를 저장하고 조회하여 순번값(인덱스)로 값을 하나씩 조회할 수 있음
- 특징
- 배열(Array)처럼 크기가 정해져 있지 않고 필요할 때마다 크기가 점점 더 늘어납니다.
- Array처럼 크기가 고정된 정적배열이 아닌 크기가 가변적으로 늘어나는 동적배열
- Array는 메모리에 연속된 공간을 요청한 사이즈만큼 받아서 실제값을 저장하는 기본형 변수로 저장해서 정적배열
- ArrayList는 생성 시 작은 연속된 공간을 요청해 참조형 변수들을 담아놓고, 값이 추가될 때 더 큰 공간이 필요 시 필요한 공간을 받아서 저장해서 동적 배열
- 기능
- 선언 : ArrayList <Integer> intList 형태로 선언
- 생성 : new ArrayList <Integer> ( ); 형태로 생성
- 초기화 : 사이즈를 지정하는 것이 없기 때문에 초기화 필요 없음
- 값 추가 : intList.add( { 추가할 값 } ) 형태로 값을 추가
- 값 수정 : intList.set( { 수정할 순번 } , { 수정할 값 } ) 형태로 수정
- 값 삭제 : intList.remove( {삭제할 순번 } ) 형태로 값을 삭제
- 전체 출력 : intList.toString( ) 형태로 전체 값을 대괄호 [ ] 로 묶어서 출력
- 전체 제거 : intList.clear( ) 형태로 전체 값을 삭제
ArrayList
package week02.collection;
import java.util.ArrayList;
public class Col1 {
public static void main(String[] args) {
// List
// 길이 지정 안 해도 생성 가능
// Array -> 정적배열
// List(ArrayList) -> 동적배열
ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 + 생성
intList.add(99);
intList.add(15);
intList.add(3);
System.out.println(intList.get(0));
// 2번째 값 변경
intList.set(1, 10);
System.out.println(intList.get(1));
// 삭제
intList.remove(0);
System.out.println(intList.get(0)); // 0번째 값이 삭제되고 1번째 값이 0번째 값으로 바뀜
System.out.println(intList.toString());
intList.clear();
System.out.println(intList.toString());
}
}
LinkedList
메모리에 남는 공간을 요청해서 여기저기 나누어서 실제 값을 담아놓고, 실제 값이 이쓴 주소 값으로 목록을 구성하고 저장함
- 특징
- 기본 기능은 ArrayList와 동일, LinkedList는 값을 나누어 담기 때문에 모든 값을 조회하는 속도가 느림. 대신, 값을 중간에 추가하거나 삭제할 때는 속도가 빠름
- 중간에 값을 추가하는 기능이 있음. (속도 빠름)
- 기능
- 선언 : LinkedList <Integer> linkedList 형태로 선언
- 생성 : new LinkedList <Integer> ( ); 형태로 생성
- 초기화 : 사이즈를 지정하는 것이 없어서 초기화 필요 없음
- 값 추가 : linkedList.add ( { 추가할 값 } ) 형태로 값을 추가
- 값 중간에 추가 : linkedList.add ( { 추가할 순번 } , { 추가할 값 } ) 형태로 값을 중간에 추가함
- 값 수정 : linkedList.set ( { 수정할 순번 } , { 수정할 값 } ) 형태로 값을 수정함
- 값 삭제 : linkedList.remove( { 삭제할 순번 } ) 형태로 값을 삭제
- 전체 출력 : linkedList.toString( ) 형태로 전체 값을 대괄호 [ ]로 묶어서 출력
- 전체 제거 : linkedList.clear( ) 형태로 전체 값을 삭제
LinkedList
package week02.collection;
import java.util.LinkedList;
public class Col2 {
public static void main(String[] args) {
// LinkedList
// 실제 값이 있는 주소 값으로 목록을 구성하고 저장하는 자료구조
LinkedList<Integer> linkedList = new LinkedList<Integer>();
linkedList.add(5);
linkedList.add(10);
linkedList.add(3);
System.out.println(linkedList.get(0));
System.out.println(linkedList.get(1));
System.out.println(linkedList.get(2));
System.out.println(linkedList.toString()); // toString()은 속도가 느림
linkedList.add(200);
System.out.println(linkedList.toString());
linkedList.add(2, 4);
System.out.println(linkedList.toString());
linkedList.set(1, 30);
System.out.println(linkedList.toString());
linkedList.remove(1);
System.out.println(linkedList.toString());
linkedList.clear();
System.out.println(linkedList.toString());
}
}
Stack
값을 수직으로 쌓아놓고 넣었다가 빼서 조회하는 형식으로 데이터를 관리함. (Last In First Out 성질을 가짐)
- 특징
- 상자에 물건을 넣고 빼는 것처럼 밑에서 위로 쌓고, 꺼낼 때는 위에서부터 꺼내는 형식
- 넣는 기능( push( ) ), 조회( peek( ) ), 꺼내는 ( pop( ) ) 기능이 있음
- 최근 저장한 데이터를 나열하고 싶거나 데이터의 중복 처리를 막고 싶을 때 사용
- 기능
- 선언 : Stack <Integer> intStack 형태로 선언
- 생성 : new Stack <Integer> ( ); 형태로 생성
- 추가 : intStack.push( { 추가할 값 } ) 형태로 값을 추가
- 조회 : intStack.peek( ) 형태로 맨 위 값을 조회
- 꺼내기 : intStack.pop( ) 형태로 맨 위 값을 꺼냄(꺼내고 나면 삭제 됨)
Stack
package week02.collection;
import java.util.Stack;
public class Col3 {
public static void main(String[] args) {
// stack
// push, peek, pop
Stack<Integer> intStack = new Stack<Integer>();
intStack.push(10);
intStack.push(5);
intStack.push(1);
// 다 지워질 때까지 출력
while (!intStack.isEmpty()) {
System.out.println(intStack.pop());
}
// 추가
intStack.push(10);
intStack.push(5);
intStack.push(1);
// peak
System.out.println(intStack.peek());
System.out.println(intStack.size());
}
}
Queue
빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합
- 특징
- First In First Out : 먼저 들어간 순서대로 값을 조회할 수 있음
- 넣는 기능( push( ) ), 조회( peek( ) ), 꺼내는 ( poll( ) ) 기능만 있음
- Queue 는 생성자가 없는 껍데기라서 바로 생성할 수는 없음. (껍데기 = 인터페이스)
- 생성자가 존재하는 클래스인 LinkedList를 사용하여 Queue를 생성 받을 수 있음
- (Queue 가 부모 / LinkedList 가 자식)
- 기능
- 선언 : Queue <Integer> intQueue 형태로 선언
- 생성 : new LinkedList <Integer> ( ); 형태로 생성
- 추가 : intQueue.add( { 추가할 값 } ) 형태로 값을 맨 위에 추가
- 조회 : intQueue.peek( ) 형태로 맨 아래 값을 조회
- 꺼내기 : intQueue.poll( ) 형태로 맨 아래 값을 꺼냄(꺼내고 나면 삭제됨)
Queue
package week02.collection;
import java.util.LinkedList;
import java.util.Queue;
public class Col4 {
public static void main(String[] args) {
// Queue
// add , peek , poll
// Queue : 생성자가 없는 인터페이스
Queue<Integer> intQueue = new LinkedList<>(); // Queue 선언, 생성
intQueue.add(1);
intQueue.add(5);
intQueue.add(9);
while (!intQueue.isEmpty()) {
System.out.println(intQueue.poll());
}
intQueue.add(1);
intQueue.add(5);
intQueue.add(9);
// peek
System.out.println(intQueue.peek());
System.out.println(intQueue.size());
}
}
Set
순서가 없는 데이터의 집합(데이터 중복 허용 안함) - 순서 없고 중복 없는 배열
- 특징
- 순서가 보장되지 않는 대신 중복을 허용하지 않도록 유지할 수 있음
- Set은 그냥 Set으로 쓸 수 있지만, HashSet, TreeSet 등으로 응용하여 사용할 수 있음
- Set은 생성자가 없는 껍데기라서 바로 생성할 수는 없음.
- 생성자가 존재하는 클래스인 HashSet를 사용하여 Set를 생성 받을 수 있음
- 기능
- 선언 : Set <Integer> intSet 형태로 선언
- 생성 : new HashSet <Integer> ( ); 형태로 생성
- 추가 : intSet.add( { 추가할 값 } ) 형태로 값을 맨 위에 추가
- 조회 : intSet.get( { 조회할 순번 } ) 형태로 순번에 있는 값을 조회
- 삭제 : intSet.remove( { 삭제할 값 } ) 형태로 삭제할 값을 직접 지정
- 포함 확인 : intSet.contains( { 포함확인 할 값 } ) 형태로 해당 값이 포함되어 있는지 boolean 값으로 응답 받음
- 종류
- HashSet : 가장 빠르며 순서를 전혀 예측할 수 없음
- TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있음
- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능
- 보통 HashSet을 사용하며 순서보장 필요 시 LinkedHashSet을 주로 사용
Set
package week02.collection;
import java.util.HashSet;
import java.util.Set;
public class Col5 {
public static void main(String[] args) {
// Set(집합): 순서 없고, 중복 없음
// 순서 보정 없이, 중복 허용 않하는 프로그램에 사용되는 자료구조
// Set -> HashSet, TreeSet
// Set 바로 생성 불가(생성자가 없음)
// HashSet
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);
}
// contains
System.out.println(intSet.contains(2));
System.out.println(intSet.contains(5));
}
}
Map
value 값들만 넣는 자료구조와 다르게 key - value 구조로 구성된 데이터를 저장할 수 있음.
- 특징
- key-value 형태로 데이터를 저장하기 때문에 기존에 순번으로만 조회하던 방식에서, key 값을 기준으로 value 조회 가능
- key 값 단위로 중복을 허용하지 않는 기능이 있음
- Map은 그냥 Map으로 쓸 수 있지만, HashMap, TreeMap 등으로 응용하여 사용 가능
- Map으로 쓸 수도 있지만, HashSet, TreeSet 등으로 응용하여 사용 가능
- 기능
- 선언 : Map <String, Integer> intMap 형태로 선언
- 생성 : new HashMap < > ( ); 형태로 생성
- 추가 : intMap.put( { 추가할 key 값 }, { 추가할 value 값 } ) 형태로 Key에 Value 값을 추가
- 조회 : intMap.get( { 조회할 key값 } ) 형태로 Key에 있는 Value 값을 조회
- 전체 key 조회 : intMap.keyset( ) 형태로 전체 key 값들을 조회
- 전체 value 조회 : intMap.values( ) 형태로 전체 value 값들을 조회
- 삭제 : intMap.remove( { 삭제할 key 값 } ) 형태로 key에 있는 value 값 삭제
- 종류
- HashMap : 중복을 허용하지 않고 순서를 보장하지 않음, 키와 값으로 null이 허용
- TreeMap : Key 값을 기준으로 정렬을 할 수 있음, 저장 시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림
Map
package week02.collection;
import java.util.HashMap;
import java.util.Map;
public class Col6 {
public static void main(String[] args) {
// Map : Key-Value pair
// key 값은 중복 불가
// Map -> HashMap, TreeMap
Map<String, Integer> intMap = new HashMap<>();
// key setting
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14);
intMap.put("삼", 15);
// key 전체 출력
for (String key : intMap.keySet()) {
System.out.println(key);
}
// values 출력
for (Integer values : intMap.values()) {
System.out.println(values);
}
System.out.println(intMap.get("삼"));
}
}
길이 값 가져오기
length vs length( ) vs size( )
- length
- array( int[ ], double[ ] , String[ ] )
- length는 배열의 길이를 조회함
- length( )
- String related Object(String, StringBuilder etc.)
- length( )는 문자열의 길이를 조회함
- size( )
- Collection Object(ArrayList, Set etc)
- size( )는 컬렉션 타입목록의 길이를 조회함
레시피 메모장 - 자료 구조 사용 버전
package javatraining;
import java.util.*;
public class Recipe02 {
public static void main(String[] args) {
// 레시피 메모장 - 2주차
// 입력부 만들기
Scanner sc = new Scanner(System.in);
// 자료 구조 선택 및 요리 제목 받기
System.out.println("사용할 자료 구조를 입력하세요: ");
String colName = sc.next();
System.out.println("요리 제목을 입력하세요: ");
String title = sc.nextLine();
// 각 자료 구조 별로 입출력부 제작
switch (colName) {
case "List":
// List 생성
ArrayList<String> strList = new ArrayList<>();
// 입력 받기
while (true) {
String text = sc.nextLine();
if (Objects.equals(text, "끝")) {
break;
}
strList.add(text);
}
// 출력하기
title = "[ List " + title + " ]";
System.out.println(title);
for (int i = 0; i < strList.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + strList.get(i));
}
break;
case "Set":
// Set 생성
LinkedHashSet<String> strSet = new LinkedHashSet<>();
// 입력 받기
while (true) {
String text = sc.nextLine();
if (Objects.equals(text, "끝")) {
break;
}
strSet.add(text);
}
// 출력하기
Iterator<String> iterator = strSet.iterator();
title = "[ Set " + title + " ]";
System.out.println(title);
for (int i = 0; i < strSet.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + iterator.next());
}
break;
case "Map":
// Map 생성
Map<Integer, String> strMap = new HashMap<>();
int lineNumber = 1;
// 입력 받기
while (true) {
String text = sc.nextLine();
if (Objects.equals(text, "끝")) {
break;
}
strMap.put(lineNumber++, text);
}
// 출력하기
title = "[ Map " + title + " ]";
System.out.println(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("입력한 자료 구조는 사용할 수 없습니다.");
}
}
}
추후 과제 개선 사항 및 학습 필요 부분
- 요리 제목이 [ ]로 감싸진 부분이 아닌 아래쪽 레시피의 1번 항목으로 들어가는 문제
- Iterator에 대해 공부가 필요함(set에 포함된 자료를 확인하기 위해 사용했으나 이해가 부족함)
- switch문 사용할 수 있는 부분에 대한 이해
'항해 99 > Java' 카테고리의 다른 글
Java 문법 기초 테스트-2 (0) | 2024.01.20 |
---|---|
Java 문법 기초 테스트-1 (0) | 2024.01.20 |
Java 문법 종합 2주차-1 (0) | 2024.01.16 |
Java 문법 종합 1주차 (1) | 2024.01.16 |
Java 기초 3 - 반복문, 스코프, 형변환 (0) | 2024.01.15 |