Java 4일차

소윤정·2021년 5월 26일
0

JAVA

목록 보기
3/15

오늘은 지난 시간에 이어서 반복문에 대해 글을 써보려한다.

Switch문

  • if문과 비슷하지만 좀 더 정형화된 형태를 뜻한다.
  • if문처럼 조건식이 true일 경우에 블록 내부의 실행문을 실행하는 것이 아니라 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
    switch문
  • 특정 값과 일치하는 값을 찾아 실행된다.
  • break문 : switch과 반복문을 빠져나갈때 사용된다.

if문과 switch문의 차이점은?

  • if문 : 특정한 값하고 일치할때 범위를 줄때 편하다는 장점이 있다.
  • switch문 : 정확한 값을 찝어낼때 좋다는 장점이 있다.
import java.util.Scanner;

/* 연습문제
   국어점수, 영어점수, 수학 점수를 입력받아 총점, 평균, 합격 여부를 구하는 프로그램을 작성해보자
   (단, 학점은 평균기준이며 90점이상 A학점, 80점 이상 B학점, 70점 이상 C학점, 60점 이상 D학점, 나머지는 F학점)

   결과)
   국어점수를 입력하세요.
   영어점수를 입력하세요.
   수학점수를 입력하세요.

   국어 점수 : 90
   영어 점수 : 80
   수학 점수 : 70점
   총점 : 240점
   평균 : 80점
   학점 : B학점
*/
public class Switch2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("국어점수를 입력하세요.");
        int kor = sc.nextInt();
        System.out.println("영어점수를 입력하세요.");
        int eng = sc.nextInt();
        System.out.println("수학점수를 입력하세요.");
        int math = sc.nextInt();

        int total = kor + eng + math;
        int avg = total / 3;

        System.out.println("국어점수 : " + kor + "점");
        System.out.println("영어점수 : " + eng+ "점");
        System.out.println("수학점수 : " + math+ "점");
        System.out.println("총점 : "+ total+ "점");
        System.out.println("평균 : " + avg+ "점");

        // 90 / 10 -> 10 9 8 7 6 5 4 3 2 1

        switch (avg / 10){
            case 10: case 9:
                System.out.println("학점 : A학점");
                break;
            case 8:
                System.out.println("학점 : B학점");
                break;
            case 7:
                System.out.println("학점 : C학점");
                break;
            case 6:
                System.out.println("학점 : D학점");
                break;
            default:
                System.out.println("학점 : F학점");
        }
    }

}

반복문

  1. while문
while(조건식){

조건식이 true인 동안 반복할 문장;

...

}

문제1) 1 ~ 100까지 짝수의 총합을 구해보기

import java.util.Scanner;

public class While4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("원하는 단을 입력하세요.");
        int dan = sc.nextInt();
        int i = 1;

        System.out.println(dan + " 단");
        while (i <=9){
            // 5 * 1 = 5
            System.out.println(dan + " * " + i + " = " + (dan * i));
            i++;
        }
    }
}

do ~ while문

  • while문과 동일하지만, 첫 반복이 false인 경우 while문은 1번의 반복도 진행되지 않지만, do while문은 1번의 반복을 진행한 뒤 조건식을 판단.
do{

조건식이 true인 동안 반복할 문장;

...

}while(조건식);

  1. for문
for(변수의 초기화; 조건식; 증감식){

조건식이 true인 동안 반복할 문장;

...

}

Continue

  • 반복이 진행되는 도중 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 이동됨
public class Continue1 {
    public static void main(String[] args) {
        for(int i = 1; i <= 100; i++){
            if(i % 3  == 0){
                System.out.print("짝! ");
                continue;
            }
            System.out.print(i + " ");
        }
    }
}

Break

  • switch문 또는 반복문을 벗어날 때 사용
import java.util.Scanner;

public class Break1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("음식 자판기");

        while(true){
            System.out.println("<< 원하는 메뉴를 선택 >>");
            System.out.println("1. 라면, 2. 치킨, 3. 초밥, 4. 파스타, 5. 닭가슴살, 6.프로그램 종료");
            int sel = sc.nextInt();
            switch (sel){
                case 1:
                    System.out.println("라면이 나왔습니다.");
                    break;
                case 2:
                    System.out.println("치킨이 나왔습니다.");
                    break;
                case 3:
                    System.out.println("초밥이 나왔습니다.");
                    break;
                case 4:
                    System.out.println("파스타가 나왔습니다.");
                    break;
                case 5:
                    System.out.println("닭가슴살이 나왔습니다.");
                    break;
                case 6:
                    System.out.println("주문을 종료합니다.");
            }
            if(sel == 6) break;
        }
    }
}

중첩 반복문

  1. for문
for(int i =1; i ≤ 5; i++){

	....

	for(int j = 1; j ≤ 3; j++){

		....

	}

}
  1. while문

JVM 메모리 구조(⭐️⭐️⭐️)

  1. Class Loader

    • 자바에서 소스를 작성하면 .java파일이 생성된다.
    • .java 소스를 자바 컴파일러가 컴파일 하면 .class파일이 생성된다.
    • 클래스 파일들을 묶어서 JVM이 운영체제로부터 할당 받은 메모리 영역인 Runtime Data Area로 적재하는 역할

  2. Execution Engine

    • Class Loader에 의해 메모리에 적재된 클래스들을 명령어 단위로 실행하는 역할

  3. Garbage Collector

    • Heap 메모리 영역에 생성된 객체들 중 참조되지 않은 객체들을 탐색 후 제거

메모리 영역

  1. stack
    - 지역변수, 매개변수, 리턴 값, 연산에 사용되는 임시 값 등이 저장되는 영역

  2. Heap
    - new 키워드로 생성된 객체와 배열이 저장되는 영역
    - 생성된 객체의 배열은 JVM 스택 영억의 변수나 다른 객체의 필드에서 참조

  3. Method
    - 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보, 필드 정보, 메소드 이름, static 변수, final class 변수..영역

  4. PC Register

    • Thread가 생성될 때마다 생성되는 영역
    Thread란?
    • 하나의 프로그램에서 동작되는 과정

  5. Native methodd stack

    • 자바 외 언어로 작성된 네이티브 코드를 저장하기 위한 영역
      (C / C++ 등의 코드를 수행하기 위한 저장소)

예제

import java.util.Scanner;

/*
    20221년 05월 25일 
    가위바위보 게임 만들기
 */
 
public class Homework1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("<<<가위 바위 보 게임하기 >>");

        while(true){
            System.out.println("가위, 바위, 보 중 하나를 선택하세요.");
            System.out.print("컴퓨터 : ");
            String x = sc.next();
            System.out.print("유저 : ");
            String y = sc.next();

            if(y.equals("가위")){ // 유저 : 가위
                if(x.equals("가위")){
                    System.out.println("비겼습니다. 다시하세요.");
                    continue;
                } else if(x.equals("바위")){
                    System.out.println("졌습니다.");
                    continue;
                } else if(x.equals("보")){
                    System.out.println("이겼습니다. 게임을 종료합니다.");
                    break;
                }

            } else if(y.equals("바위")){ // 유저 : 바위
                if(x.equals("보")){
                    System.out.println("졌습니다.");
                    continue;
                } else if(x.equals("바위")) {
                    System.out.println("비겼습니다.");
                    continue;
                } else if(x.equals("가위")){
                    System.out.println("이겼습니다. 게임을 종료합니다.");
                    break;
                }

            } else if(y.equals("보")){ // 유저 : 보
                if(x.equals("가위")){
                    System.out.println("졌습니다.");
                    continue;
                } else if(x.equals("보")) {
                    System.out.println("비겼습니다.");
                    continue;
                } else if(x.equals("바위")){
                    System.out.println("이겼습니다. 게임을 종료합니다.");
                    break;
                }

            }
            break;
        }
    }
}

배운점

  • 가장 많이 사용되는 반복문에 대해 배웠다. 일반적인 반복문은 그래도 할만한데 중첩 반복문은 아직 어려운것같다.ㅜㅜ 예제를 통해서 계속 꾸준히 연습만이 답인것같다.ㅠㅠJVM은 첫날부터 계속 중복되어 나오는 부분인것같다 JVM이 어떠한 역할을 하고 실행과정이 어떻게 되는지 자세히 짚고 넘어가자!!(복습 필수!)

중요한 부분

  • JVM 메모리 구조에 대해 자세히 짚고 넘어가야 할것같다.
    (어느 부분에 어떠한 역할을 하는지 자세히 알고 있기)

0개의 댓글

관련 채용 정보