[JAVA] 김영한의 자바 입문 Scanner, 배열

선뀰·2023년 12월 15일
0

JAVA

목록 보기
7/25

1. Scanner 클래스

System.out을 통하여 출력
System.in을 통해서 사용자의 입력을 받을 수 있다.

  • 변수 명을 한방에 바꾸는 단축키 : shift + f6

자료구조 책에서도 scanner를 배웠는데 강의에서도 scanner를 다루고 있다.
문제를 직접 풀어보는 단계여서 확실히 코드를 직접 짜는데 도움이 많이 된다.
파이썬보다 클래스를 지정할 게 많아서 귀찮긴 하다만 나름 재미가 있는듯?

  • temp를 사용한 예제
Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요");
        int num1 = scanner.nextInt();

        System.out.print("두 번째 숫자를 입력하세요");
        int num2 = scanner.nextInt();

        if (num1 > num2) {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }
        System.out.println("두 숫자 사이의 모든 정수 : ");
        for (int i = num1; i<=num2; i++){
            System.out.print(i);
            if (i != num2) {
                System.out.print(",");
            }
        }

    }
  • 개행하는 방법
    c언어에서는 \n를 사용해서 개행하면 됐는데..
    java는 생각보다 써야할게 많아서 시간이 오래 걸린다;

int age = scanner.nextInt(); // 10\n 엔터는
scanner.nextLine(); // \n빈 문자만 남는다. 한번 더 사용해서 라인을 읽고 버리면 된다.

  • while문을 사용해서 작성하는 코드
1. if문을 사용한 코드
while(true) {
            input = scanner.nextInt();

            if(input == -1) {
                break;
            }
            sum += input;
            cnt++;
        }
2. while문에 조건을 넣은 코드 
while ((input = scanner.nextInt()) != -1){
            sum += input;
            cnt++;
        }

while문 연산

  • 반복문 실행
    while ((input = scanner.nextInt()) != -1) //사용자 3입력
    while ((input = 3) != -1) // input에 3 대입
    while ((input(3)) != -1) // input의 값 읽기
    while ((3) != -1) // ()제거
    while (3 != -1) // 부등식 연산
    while (true) // while문 실행

  • 반복문 종료
    while ((input = scanner.nextInt()) != -1)
    while ((input = -1) != -1) // input에 -1 대입
    while ((-1) != -1) // ()제거
    while (-1 != -1) // 부등식 연산
    while (false) //while문 종료

scanner 예제 문제

Scanner scanner = new Scanner(System.in);
        int totalCost = 0;

        while(true) {
            System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료");
            int option = scanner.nextInt();


            if(option == 1){
                scanner.nextLine();
                System.out.print("상품명을 입력하세요 : ");
                String product = scanner.nextLine();

                System.out.print("상품의 가격을 입력하세요: ");
                int price = scanner.nextInt();

                System.out.print("구매 수량을 입력하세요: ");
                int quantity = scanner.nextInt();

                totalCost += price * quantity;
                System.out.println("상품명: " + product + "가격 : " + price + "수량 :" + quantity + " 합계 : " + price * quantity);

            } else if (option == 2){
                System.out.println("총 비용: " + totalCost);
                totalCost = 0;

            } else if (option == 3){
                System.out.println("프로그램을 종료합니다.");
            }else{
                System.out.println("올바른 옵션을 선택해주세요.");
            }
        }

2. 배열

동일한 자료형을 묶어 저장하는 참조 자료형이다.
생성할 때 크기를 지정해야 하고, 크기를 지정하면 절대 변경할 수 없다.

배열이 필요한 이유

같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것이다.
int[] a=new int[3];
int[] students; //배열 변수 선언;
students = new int[5]; 5개의 배열을 만드는 것이다.
[0, 1, 2, 3, 4] 생성된다.
boolean[] array5=new boolean[3];

int[] a=new int[]{3, 4, 5}; //이렇게 대입 가능하다.

배열의 크기만큼 메모리를 확보한다. 배열에는 변수의 참조 값만 들어있다.
배열을 생성하면 자바는 메모리 어딘가에 있는 배열에 접근할 수 있는 참조값(주소)(x001)을 반환하는 것이다. 변수는 참조값을 가지고 있다. 메모리에 있는 실제 배열에 접근하고 사용할 수 있다. 변수를 통해서 배열에 접근하는 것이다.

배열 사용

- 인덱스
students[0] = 90;
students[1] = 80;

System.out.println("학생1 점수 : " + students[0]);
배열은 0부터 시작한다. x001의 [0]으로 이동을 한다.

//배열 변수 선언
        int[] students = new int[]{90, 80, 70, 60, 50}; // 배열 생성과 초기화 이런 식으로도 가능하다.

        students[0] = 90;
        students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        // 변수 값 사용 students.length 배열의 길이를 반환한다.
        for(int i = 0; i<students.length; i++) {
            System.out.println("학생" + (i + 1) + "점수 : " + students[i]);

        }

2) int[] students = {90, 80, 70, 60, 50}; 이런식으로 최적화가 가능하다.
배열의 생성과 초기화가 가능하다.

- 힙 메모리에서 강제 초깃값(기본값)

1) 불리언(boolean) : false
2) 정수(byte, short/char, int, long) : 0
3) 실수(float, double) : 0.0
4) 클래스, 배열 : null

- 기본형 vs 참조형 타입

  • 기본형(Primitive Type)
    우리가 지금까지 봤었던 int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입이다.

  • 참조형(Reference Type)
    int[] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다. 객체나 클래스를 담을 수 있는 변수들도 모두 참조형이다.

  • 배열이 참조형을 사용하는 이유?
    동적으로 사이즈를 변경할 수 있다. Scanner를 사용하여 사용자 입력에 따라 size변수의 값이 변하고, 생성되는 배열의 크기도 달라질 수 있다. 동적 메모리 할당이라 한다. 기본형은 선언과 동시에 사이즈가 정해지지만, 참조형을 사용하면 동적으로 크기가 변하기 때문에 유연성이 생긴다. 기본형은 빠르고 메모리를 효율적으로 처리한다.

  • 리펙토링
    가독성을 높이고, 유지보수를 용이하게 하는 과정이다.
    프로그램의 성능을 향상시킨다.

2차원 배열

arr[0][0] : 1
arr[0][1] : 2
arr[0][2] : 3
arr[1][0] : 4
arr[1][1] : 5
arr[1][2] : 6

코드를 통해서 2차원 배열의 사용법을 알아보자.

int[][] arr = {
                {1,2,3},
                {4,5,6},
                {7,8,9}
        }; // 행3, 열3

        for(int row=0; row<arr.length; row++){
            for(int column =0; column< arr[row].length; column++){
                System.out.print(arr[row][column] + " "); // 0열을 출력하는 것이다.
            }
            System.out.println();
        }
    }
  • for문을 활용하여 자동으로 값이 할당 되도록 했다.
int[][] arr = new int[3][3];

        int i = 1;
        for(int row = 0; row<arr.length; row++){
            for(int column = 0; column<arr[row].length; column++){
                arr[row][column] = i++;
            }
        }

향상된 for문

for-each문이라고도 한다.
배열을 사용할 때 기존for문 보다 더 편리하게 사용할 수 있다.

for (변수 : 배열 또는 컬렉션) {
// 배열 또는 컬렉션의 요소를 순회하면서 수행할 작업
}

profile
공부 기록

0개의 댓글