본문 바로가기
Study in Bootcamp/회고

Day 10 자바 JAVA 기초 이론 (배열, 배열 복사) , 계산기 만들기

by Bhinney 2022. 7. 7.

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.  돌아보기

배열의 개념은 어느 정도 따라갔다고 생각했다. 그것은 나의 오만함이였다. 코플릿을 풀기 시작하니 내 머릿속은 폭발했다. 도대체 어떻게 하라는 것인가. 배열의 복사 부분은 진짜 미치는 줄 알았다. 개념을 집어넣기에도 급급한 머릿속에 응용이라니.... 다행이도 코플릿 푸는게 페어 프로그래밍 시간이라 얼마나 다행인지 모르겠다. 진짜 페어분이 실력자고 , 너무 착하신 분이라 많이 도와주셨다. 내가 코드를 이해하는 시간을 가질 수 있도록 해주셨고, 이해가 안되는 것은 설명도 해주셨다. 후,.. 진짜 페어 분 아니었으면 줌 세션에서도 저게 무슨 소리인가 했을 것 같다. 후.. 코플릿을 몇일 풀어보니 꼭 응용이 있는 것 같다. 앞으로 전날 미리 훑어보고, 아침에 조금 일찍 개념공부를 시작해야겠다. 그래야 응용문제를 만나도 멘붕이 안 올 것 같다..

 

이번 주 주말에 배운 것들을 복습하고, 추가 자료들도 찾고 책도 참고해서 익숙해지자. 

그리고 개념은 진짜 시작이 중요하다. 

나중에 해야지는 절대절대절대 금물.

 

그리고 저 계산기를 레벨업 시킬 수 있는 코드들도 살펴보자!

댓글