Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 한번 해블로그

[Java] 9. 사고력 키우기 2탄 본문

Java

[Java] 9. 사고력 키우기 2탄

hide on bush 2023. 11. 23. 11:39

이전 게시물에서는 연산자에 대해서 알아봤다면 오늘은 명령문에 대해서 알아보자
명령문에 의해 왜 사고력이 필요한지 뼈저리게 느끼게 될 것이다. 물론 명령문뿐만 아니라 나머지도 ^^,,,


✋ 잠깐! 명령문 설명 전에 키보드로부터 데이터를 입력받는 방법부터 알아보자

Scanner scan = new Scanner(System.in);

요고는 키보드(우리가 진짜 손으로 뚝딱거리는) 장치로부터 자바가 데이터를 읽는 것을 의미한다. 코드를 짜고 우리가 직접 데이터를 넣으면 출력해주는 것이다.

  • int num=scan.nextInt(); → 정수 입력
  • float num=scan.nextFloat(); → 실수 입력
  • double num=scan.nextFloat(); → 실수 입력
  • String str=scan.next(); → 공백 앞까지의 문자열 입력
    • ex) Hello World! 입력 시 Hello 까지만 출력
  • String str=scan.nextLine(); → 공백 상관없이 엔터까지의 문자열 입력
    • ex) Hello World! 입력 시 Hello World! 까지 출력

또 한가지 중요한 점은, import java.util.Scanner라고 기재해야 한다. 아니면 < Scanner scan = new Scanner(System.in);> 를 적을 때 java.util.Scanner라고 계속 적어줘야 하기 때문에 우리는 귀찮으니까 한 번만 딱 적으면 된다. 그럼 어디에 적냐고?

이렇게 우리가 평소에 익숙하게 보이던 public class 앞, 제일 첫번째로 적어주면 된다. 그럼 끝!

<예시>

import java.util.*;
public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        System.out.print("정수를 입력하시오:");
        int num=scan.nextInt(); 
        System.out.println("num = " + num);

        System.out.print("실수를 입력하시오:");
        float f=scan.nextFloat();
        System.out.println("f = " + f);

        System.out.print("문자를 입력하시오:");
        String str=scan.next();
        System.out.println("str = " + str);

        scan.nextLine();//버퍼비우기(스트림 비우기)
        
        System.out.print("문자를 입력하시오:");
        String str1=scan.nextLine();
        System.out.println("str1 = " + str1);

        scan.close();
    }
}

여기서  scan.nextLine(); 이 확인되는데 이것을 버퍼 비우기(스트림 비우기)라고 한다. 이거를 안 하면 다음 str1에서 이전 str값이 나오게 된다.

그럼 이제 진짜 명령문에 대해서 알아보자!


1. 조건문 if

1) 단순 if문
- 조건식이 참이면 중괄호로 둘러 쌓인 블록 안의 문장들이 실행
- if(조건삭){문장 1;}

import java.util.Scanner;
public class IfbasicTest {
    public static void main(String[] args) {
        //Q. 정수 1개를 입력 받아 입력된 수가 7의 배수인지를 출력하시오
        Scanner scan=new Scanner(System.in);
        System.out.println("정수를 입력하세요:");
        int num=scan.nextInt();
        if(num%7==0){
            System.out.println(num + "은 7의 배수입니다");
        }

        //Q. 나이를 입력 받아 19세 이상이면 성인임을 출력하는 코드
        System.out.println("나이 :");
        int age=scan.nextInt();
        if(age>=19){
            System.out.println(age + "살은 성인입니다");
        }
        System.out.println("종료");
    }
}

 

2) 블록 if문
- if의 조건식이 참이면 조건식 바로 다음의 블록이 실행되고, 거짓이면 else문 다음의 블록이 실행
- if(조건문){문장1;}else{문장2;} → 문장 1은 조건식이 참일 때, 문장 2는 조건식이 거짓일 때

import java.util.Scanner;
public class IfElseTest {
    public static void main(String[] args) {
        int x=10;
        if(x>=0){
            System.out.println("0 or 양수");
        }else {
            System.out.println("음수");
        }
        //Q. 정수 1개를 입력 받아 짝수인지 홀수인지를 판단하는 코드
        Scanner sc=new Scanner(System.in);
        System.out.println("정수를 입력하세요 :");
        int num=sc.nextInt();
        if(num%2==0) {
            System.out.println("짝수입니다");
        }else{
            System.out.println("홀수입니다");
        }
        //Q. 입력받은 수가 12의 배수인지를 출력하는 코드를 작성하세요
        System.out.println("정수를 입력하세요 :");
        int su=sc.nextInt();
        if(su%12==0){
            System.out.println("12의 배수입니다");
        }else {
            System.out.println("12의 배수가 아닙니다");
        }
    }
}

 

3) 다중 if문
- if문 안의 문장이 또 다른 if문인 경우(if-else문을 포함)
- if(조건문){문장1;}else if(조건){문장2;}else{문장3;}

import java.util.Scanner;
public class IfElseIfTest {
    public static void main(String[] args) {
        Scanner abc = new Scanner(System.in);
        System.out.println("점수를 입력하시오");
        int score = abc.nextInt();
        if (score >= 00 && score <= 100) {
            if (score >= 90) {
                System.out.println("A반");
            } else if (score >= 85) {
                System.out.println("B반");
            } else if (score >= 80 && score < 85) {
                System.out.println("C반");
            } else {
                System.out.println("불합격");
            }
        } else {
            System.out.println("유효한 점수가 아닙니다");
        }

2. 선택문 switch-case

- 주로 다중 선택에 사용하는데, 다중 if문보다 간결
- 대신, 사용 영역이 if-else에 비해 제한적
- switch(수식){ case 상수 : 문장 1; break; case 상수2: 문장 2; break; default;}
- 여기서 break란 탈출을 의미한다. 즉, 수식이 상수 1과 일치하면 case 1을 실행하고 break로 탈출!
- default는 수식과 상수가 일치하는게 없을 때 default 문장으로 넘어가는 것!

import java.util.Scanner;
public class SwitchTest2 {
    public static void main(String[] args) {
        //Q. 요일에 해당하는 운동을 출력
        Scanner day=new Scanner(System.in);
        System.out.println("요일을 입력하세요");
        String str=day.nextLine();

        switch(str){
            case "sunday" :
                System.out.println("야구하기");
                break;
            case "monday" :
                System.out.println("농구하기");
                break;
            case "tuesday" :
            case "wednesday" :
                System.out.println("수영하기");
                break;
            default:
                System.out.println("휴식");
        }
    }
}

- 여기서 sunday를 입력하면 야구하기가 출력되면서 끝이나고 상수에 없는 friday를 입력하면 휴식이 출력되며 종료된다!


3. 반복문

1) for, foreach
- 일반적으로 반복하는 횟수가 정해진 경우에 사용
- 초기식, 조건식, 증감식으로 구성되고 세미콜론(;)으로 구분. 여기서 초기식은 처음 한번만 수행되고 이후 조건식 → 반복한 문장 → 증감식이 반복적으로 수행
- for문 형식 : for(초기식 ; 조건식; 증감식){반복한 문장;}
- foreach문 : for(변수:컬렉션){반복할 문장;}
- 여기서 컬렉션은 컬렉션에 저장된 데이터를 하나씩 꺼내와서 더이상 사용할 데이터가 없을때까지 반복

public class ForLoopTest {
    public static void main(String[] args) {
        //Q. int[] numbers={1,2,3,4,5,6,7,8,9,10}; 배열 원소를 향상된 for문으로 출력
        int[] numbers={1,2,3,4,5,6,7,8,9,10};
        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }

        for(int su : numbers ){
            System.out.println(su);
        }
    }
}

 

2) 이중 for문
- 반복문안에 또 다른 반복문이 오는 경우를 중첩 반복이라고 함
- for( ; ; ){for( ; ; ){ }}

public class LoopLoopTest {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 2; j < 10 ; j++) {
                System.out.print(j+"x"+i+"="+(j*i)+"\t");
            }
            System.out.println();
        }
    }
}

그럼 이런 식으로 나오는데 나같은 초짜가 무작정 따라하면 배열을 분명히 i부터 썼는데 왜 j가 앞으로 왔더라,, 하는 어처구니 없는 의문을 가지게 된다. 
System.out.print(j+"x"+i+"="+(j*i)+"\t"); 를 보면 내가 j, 즉 열이 앞으로 오게 작성했기 때문이다 ^^;;;;!

 

3-1) while
- 먼저 조건식을 검사하고 반복할 문장을 실행
- 조건식을 먼저 검사하므로 거짓이면 바로 종료 될 수도 있음
- 초기식;while(조건식){반복할 문장; 증감식;}

public class WhileLoopTest {
    public static void main(String[] args) {
        //0~5까지 출력
        int i=0;
        while(i<=5){
            System.out.println(i);
            i++;
        }

 

3-2) do~while
- 반복한 문장을 실행한 수에 조건식 검사
- 반복문 내에 있는 문장을 최소한 한 번 실행하고자 할 때 유용
- 주의사항은 반드시 마지막에 세미콜론(;)을 써야한다
- 초기식; do{반복할 문장; 증감식;} while(조건식);

public class WhileLoopTest {
    public static void main(String[] args) {
        //0~5까지 출력
        int i=0;
        while(i<=5){
            System.out.println(i);
            i++;
        }

        //int[] numbers={1,2,3,4,5,6,7,8,9,10} 주어진 배열의 모든 원소 출력
        int[] numbers={1,2,3,4,5,6,7,8,9,10};
        i=0;//여기서는 앞에 int i=0;을 썼기때문에 다시 초기화 시켜줘야해서 int빼고 i=0임을 선언
        while(i<numbers.length){
            System.out.println(numbers[i]);
            i++;
        }

        //do while 문
        i=1;
        do{
            System.out.println(i);
            i++;
        }while(i<=5);
    }
}

여기서 앞에 while 예시를 같이 작성했다. while에서 이미 int i=0;이라고 썼기때문에 다시 초기화 시켜줘야해서 int를 뺀 i=0임을 선언해야한다. 초기화를 안하면 에러남!


4. 제어문

- 반복문과 함께 사용하며 break와 continue를 만나면서 흐름을 바꾸는 것

1) break
- 현재 사용 중인 반복문을 중단하고 제어를 반복문 바깥으로 이동

2) continue
- 현재 수행 중인 반복문에서 현재 조건 값에 대한 처리를 중단하고, 다음 조건값에 대한 처리를 수행

public class BreakContinueTest {
    public static void main(String[] args) {
        //Q. char[] c={'s','h','u','t','d','o','w','n'}; 위 배열의 값을 출력 중
        // 'o'라는 문자를 만나면 반복 중단
        char[] c={'s','h','u','t','d','o','w','n'};
        for(int i=0 ; i<c.length ; i++){
            if(c[i]=='o') break;
            System.out.print(c[i]);
        }
        //Q. 1~10까지의 수 중 3의 배수의 개수를 구하여 출력
        int count=0;
        for (int i = 1; i < 10 ; i++) {
            if(i%3!=0) continue;
                count++;
        }
        System.out.println(count);
    }
}

여기서 int count=0;을 한 이유는 1에서부터 10까지 3의 배수라는 조건이 충족될 때마다 count를 증가시켜 최종적으로 그 조건을 만족하는 개수를 알 수 있는 것이다. 만약, int count=1;을 했다면 1+3(1~10까지 3의 배수가 3개)라서 결과값이 4로 출력, int count=2로 했다면 2+3이라서 결과값이 5로 출력된다.


하나씩 따라하면서 이해한 것처럼 느껴지지만 간단한 코테를 하면 내가 이걸 어디 써먹어야하는지,, 어떻게 사용해야하는지 아무리 떠오르지 않는다 ㅎㅎ,, 이래서 사고력이 필요한거다,,, 벌써 뇌가 굳은 것 같아서 걱정인데,, 일단 원리를 다시 복습하고 어떻게 사용할지 좀 더 고민해봐야겠다..
일단 좋은 소식은 제구케 모두 재계약 완료로 티원은 롤드컵 우승 멤버로 24시즌 로스터 확정이다...!💘🙏🙏🙏🙏
꼬감도 티원으로 다시 돌아왔고,,내년에도 함께하자,,! 죽어도 너네 못보낸다,,