2022.07.06
1. 오늘의 학습
- 배열
- 배열 복사
- 계산기 만들기 (과제)
2. 학습 내용
배열(Array)
1) 배열이란
• 동일한 타입의 값들을 하나로 묶은 자료 구조
• 배열을 사용하여 묶어 저장하면, 값들이 모여서 저장됨
• 배열의 요소(element) : 각 배열이 가진 값
• 인덱스(index) : 각 요소가 배열 받은 순서
❗️0부터 시작함 --> 총 개수 -1❗️
2) 배열의 종류
1️⃣ 일차원 배열
/* 타입[]참조_변수; 참조변수이름 = new 타입[개수] */ String[] MONTH; // 참조_변수 선언 MONTH = new String[12]; // 배열 개수 (12개) 생성, 초기화 // 참조변수이름 = {배열 요소들} MONTH = {January, Febuary, March, April, .... , November, December}; /* 코드를 조금 간략히 나타내면 타입[] 참조변수이름 = new 타입[요소의 개수]; */ String[] MONTH = new String[12] // 배열참조변수이름[인덱스] : 배열의 요소 MONTH[0] = January MONTH[11] = December /* 배열참조변수이름.length : 배열의 요소의 개수 (= 배열의 길이) +) 인덱스 = 요소의 개수 -1 MONTH.length = 12
2️⃣ 이차원 배열
• 배열의 각 요소가또 다른 배열인 구조
int[][] number; int number = = new int number[][];
3️⃣ 가변 배열
• n차원 배열(n>=2)에서 마지막 차수의 배열 길이를 고정하지 않아도 되는 배열
int[][] ages = new int [5][];
・ 배열 탐색
배열 복사(Array Copy)
1) System.arraycopy()
// (원본_소스, 원본_소스의_시작인덱스, 복사할_소스, 복사할_위치_시작인덱스, 복사하는_요소의_개수(길이)); System.arraycopy(src, srcPos, dest, destPos, length); import java.util.Arrays; // 두 배열을 하나의 배열로 합치기 public class Month2 { public static void main(String[] args){ String[] month1 = {"January", "February", "March", "April", "May","June"}; String[] month2 = {"July", "August", "September", "October", "November", "December"}; // 최종 배열의 길이 = 두 배열의 길이의 합 int len = month1.length + month2.length; // 두 배열을 합칠 하나의 배열 선언 String[] month = new String[len]; // 배열 month1의 인덱스 0부터 month1의 길이만큼 month의 인덱스 0으로 복사. System.arraycopy(month1,0,month,0,month1.length); // 배열 month2의 인덱스 0부터 month2의 길이만큼 month의 month1 다음으로(인덱스는 길이-1) 복사 System.arraycopy(month2,0,month,month1.length,month2.length); //Array.toString --> 안쓰면 month배열의 주소값 출력 System.out.println(Arrays.toString(month)); } } /* 출력 [January, February, March, April, May, June, July, August, September, October, November, December] */
2) Array.copyOf() / Array.copyOfRange()
//Array.copyOf(원본_배열, 복사할_길이); Array.copyOf(); //Array.copyOfRange(원본_배열, 복사할_시작_인덱스, 복사할_끝_인덱스); Array.copyOfRange(); import java.util.Arrays; public class Month1 { public static void main(String[] args){ String[] month1 = {"January", "February", "March", "April", "May","June"}; String[] month2 = {"July", "August", "September", "October", "November", "December"}; // (원본배열, 복사할길이) String[] month3 = Arrays.copyOf(month1,month1.length); // (원본배열, 복사시작인덱스, 복사끝인덱스) String[] month4 = Arrays.copyOfRange(month2,0,4); for(int i=0; i< month1.length; i++){ System.out.println(month3[i]+"");} System.out.println("----------구분선-----------"); for (int j=0; j<month2.length; j++){ System.out.println(month4[j]+" ");} } } /* 출력 January February March April May June ----------구분선----------- July August September October */
계산기 만들기
1️⃣ 사칙연산이 가능할 것
2️⃣ 소수점도 연산이 가능할 것
3️⃣ 연산자는 "+", "-", "*", "/"
+) 4️⃣ 조건문과 반복문 응용해서 만들어보기
import java.util.Scanner; public class Calculator { public static void main(String[] args){ System.out.println("Calculator made by JAVA"); Scanner input = new Scanner(System.in); double i; // 첫 번째 숫자 double j; // 두 번째 숫자 String o; // 연산자 String A; Scanner c = new Scanner(System.in); System.out.println("HELLO!"); while (true) { // 반복문 System.out.println("Please enter the first number."); i = c.nextInt(); while (true){ System.out.println("Please enter the operator."); o = c.next(); // 조건문 if ((o.equals("+")) || (o.equals("-")) || (o.equals("*")) || (o.equals("/"))){ break; } else System.out.println("ERROR!"); } System.out.println("Please enter the second number"); j = c.nextInt(); switch (o){ case "+" : System.out.println(i+j); break; // 브레이크를 안 넣으면, 4가지 케이스가 모두 출력 됨. case "-" : System.out.println(i-j); break; case "*" : System.out.println(i*j); break; case "/" : System.out.println(i/j); break; default: System.out.println("ERROR!"); } System.out.println("FINISH!"); } } }
2. 돌아보기
배열의 개념은 어느 정도 따라갔다고 생각했다. 그것은 나의 오만함이였다. 코플릿을 풀기 시작하니 내 머릿속은 폭발했다. 도대체 어떻게 하라는 것인가. 배열의 복사 부분은 진짜 미치는 줄 알았다. 개념을 집어넣기에도 급급한 머릿속에 응용이라니.... 다행이도 코플릿 푸는게 페어 프로그래밍 시간이라 얼마나 다행인지 모르겠다. 진짜 페어분이 실력자고 , 너무 착하신 분이라 많이 도와주셨다. 내가 코드를 이해하는 시간을 가질 수 있도록 해주셨고, 이해가 안되는 것은 설명도 해주셨다. 후,.. 진짜 페어 분 아니었으면 줌 세션에서도 저게 무슨 소리인가 했을 것 같다. 후.. 코플릿을 몇일 풀어보니 꼭 응용이 있는 것 같다. 앞으로 전날 미리 훑어보고, 아침에 조금 일찍 개념공부를 시작해야겠다. 그래야 응용문제를 만나도 멘붕이 안 올 것 같다..
이번 주 주말에 배운 것들을 복습하고, 추가 자료들도 찾고 책도 참고해서 익숙해지자.
그리고 개념은 진짜 시작이 중요하다.
나중에 해야지는 절대절대절대 금물.
그리고 저 계산기를 레벨업 시킬 수 있는 코드들도 살펴보자!
'Study in Bootcamp > 회고' 카테고리의 다른 글
Day 12 자바 JAVA 이론 (생성자, 내부 클래스) (2) | 2022.07.08 |
---|---|
Day 11 자바 JAVA 이론 (클래스, 객체, 필드, 메서드) (0) | 2022.07.08 |
Day 8 변수와 타입, 문자열 (0) | 2022.07.07 |
Day 7 Git (0) | 2022.07.01 |
Day 6 Linux (0) | 2022.06.30 |
댓글