기록/자바_국비

[배운 내용 정리] 1110 자바 국비교육

mois 2020. 11. 10. 22:22
728x90

2020년 11월 10일 9시 ~ 15시 30분 zoom 으로 수업 진행

 


 

Math.random() 의 랜덤 값 반환 범위를 20부터 35까지로 설정하기 

 0.999 … x 16 = 15.984…

 (int)Math.random()*16 의 범위 0 ~ 15

 (int)(Math.random()*16)+20 의 범위 20 ~ 35

 

 

package com.test01;

 

public class SwitchTest01 {

            

             public void test() {

                           int i=2;

                          

                           switch(i) {

                                        case 1 :

                                                     System.out.println("1입니다.");

                                        case 2 :

                                                     System.out.println("2입니다.");

                                        case 3 :

                                                     System.out.println("3입니다.");

                                        default :

                                                     System.out.println("다른 숫자입니다.");

                           }

             }

 

}

package com.test01;

 

public class SwitchTest01 {

            

             public void test() {

                           int i=2;

                          

                           switch(i) {

                                        case 1 :

                                                     System.out.println("1입니다.");

                                                     break;

                                        case 2 :

                                                     System.out.println("2입니다.");

                                                     break;

                                        case 3 :

                                                     System.out.println("3입니다.");

                                                     break;

                                        default :

                                                     System.out.println("다른 숫자입니다.");

                           }

             }

 

}

둘의 차이점 : break;

 switch case 문은 break;를 만나지 않으면 break;를 만날때까지 다음 case 문의 내용을 계속 실행한다

 test() 함수를 실행하면  2입니다 3입니다 다른 숫자입니다 가 출력된다

 

package com.test01;

 

public class SwitchTest01 {

            

             public void test() {

                           int i=2;

                           switch(i) {

                                        case 1 :

                                                     System.out.println("1입니다."); break;

                                        case 2 :

                                                     System.out.println("2입니다."); break;

                                        case 3 :

                                                     System.out.println("3입니다.");  break;

                                        default :

                                                     System.out.println("다른 숫자입니다.");

                           }

             }

 

             public void test2() {

                           char ch = 'b';

                           switch(ch) {

                                        case 'a' :

                                                     System.out.println("a입니다."); break;

                                        case 'b' :

                                                     System.out.println("b입니다."); break;

                                        case 'c' :

                                                     System.out.println("c입니다."); break;

                                        default :

                                                     System.out.println("다른 영어입니다.");

                           }

             }

            

             public void test3() {

                           int i=2;

                           //i가 홀수인지 짝수인지 판단하는 프로그램 작성

                           switch(i) {

                                        case 1:

                                        case 3:

                                                     System.out.println("홀수입니다"); break;

                                        case 2:

                                        case 4:

                                                     System.out.println("짝수입니다"); break;

                                        default:

                                                     System.out.println("다른 숫자입니다.");

                           }

             }

}

 

반복문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로,

특정 문장들을 반복해서 수행하도록 함

for문과 while 문이 있음

 

for 문

for(초기식; 조건식; 증감식) {

   수행될 문장;

}

초기식 확인 후, 조건식 확인 -> 조건식이 true일 경우 수행될 문장 수행, false일 경우 실행x

후에 증감식 연산 후 조건식 확인, 조건식이 true일 경우 수행될 문장을 수행하고, false 경우 실행하지 않는다.

조건식이 false가 될 때까지 문장을 수행한다!

이때 조건식이 끝없이 true일 경우 무한 반복 가능하다

 

while문

while(조건식) {

    수행될 문장;

    [증감식 or 분기문]

}

조건식이 true일 경우 수행될 문장을 수행한다 문장 수행이 끝나면

다시 위로 올라가 조건식을 확인하고 조건식이 true일 경우 실행,

조건식이 false가 될 때까지 수행하고, 조건식이 false가 될 경우 반복문이 종료된다.

 

do while 문

do {

  수행될 문장;

  [증감식 or 분기문];

}while(조건식);

do 안의 내용 먼저 실행하고 조건식 확인 후 true면 문장 수행, false면 종료

while 뒤에 ; 꼭 필요

 

do while 과 while 문 의 차이

do~while은 do 안의 내용이 먼저 실행하고 조건식을 만나 조건식을 확인,

while 은 조건식을 먼저 확인하고 조건식에 따라 내용을 실행하거나 하지 않는다.

 

중첩 반복문

for(초기값1; 조건식1; 증감식1) {

   수행될 문장1;

   for(초기값2; 조건식2; 증감식2) {

       수행될 문장2;

   }

  수행될 문장3;

}

 for문에 진입하면 수행될 문장 1을 먼저 수행하고, 두 번째 for문 만나 두 번째 for문에 진입하게 된다,

 조건식 2 false가 될 때까지 수행될 문장 2를 수행하고 나오면 수행될 문장 3를 수행하고 조건식 1로 돌아오게 된다.

 조건식1 false 가 될 때까지 반복한다.


 

분기문

for 문 안에서의 break;

for(초기값1; 조건식1; 증감식1) {

     수행될 문장1;

     for(초기값2; 조건식2; 증감식2) {

         수행될 문장2;

         [break;]

     }

    수행될 문장3;

    [break;]

}

 첫번째 [break;] 즉 두 번째 포문 내부의 [break;]를 만날 경우 두 번째 포문을 종료시키지만

 두번째 [break;] 즉, 첫번째 포문 내부의 [break;] 를 만나면 해당 포문을 종료해 버린다.

 

break

 반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문

 

continue

 반복문 내에서만 사용 가능, 반복문 실행 시 continue 아래 부분은 실행하지 않고!

 반복문을 다시 실행한다.

 for문의 경우 증감식으로 이동하고, while(do~while)문의 경우 조건식으로 이동한다

 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하게 사용한다.

 

 

 

//while(조건식) 조건식이 true일 경우 while문 실행

while(i<10) {

           System.out.println(i+"번째 반복문 수행");

}

 i 값이 증가하지 않아 계속 1인 상태를 유지해서 반복문이 무한으로 반복한다.

 

package com.test01;

 

public class WhileTest01 {

 

           public static void main(String[] args) {

                     WhileTest01.testWhile();

 

           }

          

           public static void testWhile() {

                     int i = 1;

                    

                     //while(조건식) 조건식이 true일 경우 while문 실행

                     while(i<10) {

                                System.out.println(i+"번째 반복문 수행");

                                ++i;

                     }

                     System.out.println("while 종료 후 i의 값 >> " + i); //10

                    

                    

           }

 

}

 

package com.test01;

 

import java.util.Scanner;

 

public class WhileTest01 {

 

           public static void main(String[] args) {

                     WhileTest01.testWhile2();

           }

          

           public static void testWhile2() {

                     //문자열을 입력받아 인덱스별로 문자 출력

                     Scanner sc = new Scanner(System.in);

                    

                     System.out.print("문자열 입력 >> ");

                     String str = sc.nextLine();

                    

                     int index = 0;

                    

                     //문자열.length()는 해당 문자열의 길이를 얻어오는 함수

                     //apple의 경우 length = 5

                     while(index < str.length()) {

                                char ch = str.charAt(index);

                                System.out.println(index + " : " + ch);

                                ++index;

                     }

                    

           }

          

}

 위의 while 문의 조건식을 index <= str.length() 으로 변경할 경우

 index가 해당 문자열의 범위를 벗어나게 되어 ( apple의 경우 index가 4까지 존재하는데 index가 5가 된 상태로 while 문을 수행하게 되어) 에러가 나게 된다.

 index = 1; 로 변경하고 해당 프로그램을 실행하면 pple 만 출력된다.

.length()함수

 문자열.length() 의 형태로 사용하고, 해당 문자열의 길이를 받아오는 함수이다,

 문자열이 apple일 경우 받아오는 값은 5이다.

 

문자열 인덱싱

 -> apple

a

p

p

l

e

0

1

2

3

4

문자열의 인덱싱은 0부터 시작한다.

 

 

package com.test01;

 

import java.util.Scanner;

 

public class WhileTest01 {

             public static void main(String[] args) {

                           WhileTest01.testWhile3();

             }

             public static void testWhile3() {

                           //1부터 입력받은 수까지 정수들의 합

                           System.out.print("정수 하나 입력 >> ");

                           int num = new Scanner(System.in).nextInt();

                           int i=1, sum=0;

                           while(i<=num) {

                                        sum += i;

                                        System.out.println("i : " + i + "\t");

                                        ++i;

                           }

                           System.out.println("i : " + i + "\t sum : " + sum);

                          

             }

}

package com.test01;

 

import java.util.Scanner;

 

public class WhileTest01 {

             public static void main(String[] args) {

                           WhileTest01.testWhile4();

             }

             public static void testWhile4() {

                           //키보드로 4를 입력받을 때 까지 반복, 4입력받으면 종료

                           Scanner sc = new Scanner(System.in);

                           while(true) {

                                        System.out.print("숫자입력[1~10] : ");

                                        int i=sc.nextInt();

                                       

                                        if(i == 4) {

                                                     System.out.println("4입력됐음 종료합니다.");

                                                     break;

                                        }

                           }

                          

             }

 

}

 

 

package com.test01;

 

import java.util.Scanner;

 

public class WhileTest02 {

 

             public static void main(String[] args) {

                           WhileTest02.test();

             }

            

             public static void test() {

                           int i=1;

                          

                           do {

                                        System.out.println("i : " + i);

                                        ++i;                                  

                           }while(i<10);

                          

                           System.out.println("");

                          

                           //키보드로 영어 문자열 값을 입력받아 출력 반복 실행 (단 "exit" 라는 문자열 입력받으면 종료)

                           Scanner sc = new Scanner(System.in);

                           String str;

                           do {

                                        System.out.print("영어 문자열 입력 >> ");

                                        str = sc.nextLine();

                                       

                                        System.out.println("입력받은 문자열 : " + str);

                                       

                           }while(!str.equals("exit"));

 

                           System.out.println("종료");

                           // == 로는 문자열을 비교 할 수 없습니다.

                           // 문자열변수.equals("비교할 문자열") 을 이용해야 한다.

                           // 참조형 : String, 사용자 정의형 은 == 으로 비교 할 수 없다

                          

                           //지역변수

                           //String str을 do while문 안에서 선언했을 경우 while 조건식에서 에러가 난다

                           //왜?

                           //String str을 do while문 내부의 지역변수로 선언했기 때문에 do while 문 안에서만 사용 할 수 있다.

                           //매개변수도 지역변수

                          

             }

 

}

 

 

자바의 문자열 비교

 참조형 데이터 String, 사용자 정의형은 == 연산자로 비교할 수 없다.

 String 과 String 을 비교할 때 문자열변수.equals(“비교할 문자열”) 을 이용해 문자열을 비교한다.

 

do ~ while 문 내부에서 선언한 String형의 변수 str을 do while의 조건식으로 사용하려고 하니 에러가 난다 이유는?

do ~ while 문 내부에서 선언한 변수는 do ~ while문 안에서만 사용이 가능하다.

이는 do ~ while문 뿐만 아니라 함수 내부, if문 내부 등 상관없이 해당 변수가 선언된 블록에서만 사용가능 하다.  이를 지역변수라고 부른다.

 

package com.test01;

 

public class WhileTest03 {

           public static void main(String[] args) {

                     //1부터 100까지의 숫자를 역순으로 출력

                     prn01();

                     System.out.println("\n-----");

                    

                     // 1부터 100까지의 숫자 중 2의 배수만 출력

                     prn02();

                     System.out.println("-----");

                    

                     // 1부터 100까지의 숫자 중 7의 배수의 갯수와 총 합을 출력

                     prn03();

                     System.out.println("-----");

           }

           public static void prn01() {

                     //1부터 100까지의 숫자를 역순으로 출력

                     int i = 100;

                     while(i>0) {

                                System.out.print(i + " ");

                                if((i != 100) && (i % 10 == 0)) {

                                           System.out.println("");

                                }

                                --i;

                     }

                    

           }

          

           public static void prn02() {

                     // 1부터 100까지의 숫자 중 2의 배수만 출력

                    

                     int i = 2;

                     int cnt = 0;

                    

                     while(i <= 100) {

                                if(i%2 == 0) {

                                           System.out.print(i + " ");

                                           cnt++;

                                }

                                ++i;

                                if(cnt == 5) {

                                           System.out.println("");

                                           cnt = 0;

                                }

                     }

           }

          

           public static void prn03() {

                     // 1부터 100까지의 숫자 중 7의 배수의 갯수와 총 합을 출력

                     int i = 1, sum = 0, cnt = 0;

                    

                     while(i <= 100) {

                                if(i%7 == 0) {

                                           cnt++;

                                           sum += i;

                                           System.out.print(i + " ");

                                }

                                i++;

                     }

                    

                     System.out.println("\n1부터 100까지의 숫자 중 7의 배수의 갯수 : " + cnt

                                           + " , 7의 배수의 총합 : " + sum);

           }

 

}

 

package com.test01;

 

import java.util.Scanner;

 

public class ForTest01 {

          

           public static void main(String[] args) {

                     testFor5();

           }

          

           public static void testFor() {

                     //0 ~ 10 출력

                    

                     int no = 0;

                    

                     while(no <= 10) {

                                System.out.print(no + " ");

                                no++;

                     }

                     System.out.println("");

                    

                     //위의 코드와 같은 것

                     //for

                     for(int i=0; i<=10; ++i) {

                                System.out.print(i + " ");

                     }

                    

           }

          

           public static void testFor2() {

                     //0 ~ 10 역순 출력

                    

                     //for

                     for(int i=10; i>=0; --i) {

                                System.out.print(i + " ");

                     }

                    

           }

          

           public static void testFor3() {

                     //증감식은 굳이 1씩 증가 할 필요 없습니다.

                     for(int i=0; i<=10; i+=2) {

                                System.out.print(i + " ");

                     }

                     System.out.println("");

                    

                     //초기식과 증감식은 1개 이상 기입 가능

                     //조건식은 안된다, 조건식에서 두 개 사용하려면 && || 기호 사용 필요

                     for(int i=0, j=10; i<10 && j>0 ; i++, j--) {

                                System.out.println("i :" + i + "\t j : " + j );

                     }

                    

                     System.out.println("");

                    

                     for(char ch='a'; ch <= 'z'; ++ch) {

                                System.out.println("ch : " + ch);

                     }

                    

                    

           }

          

           public static void testFor4() {

                     //1부터 100사이ㅇ의 임의의 난수를 구한다름,

                     //1부터 난수까지의 합을 구하여 출력하라

                    

                     int randNum = ((int)(Math.random()*10)+1);

                     int sum = 0;

                    

                     for(int i=1; i <= randNum; ++i) {

                                sum += i;

                     }

                     System.out.println("1부터 " + sum + "까지의 합 : " + sum);

                                          

           }

          

           public static void testFor5() {

                     //정수 두개를 키보드로 입력받고

                     //작은 수 ~ 큰 수 까지의 합을 구하시오.

                     Scanner sc = new Scanner(System.in);

                    

                     System.out.print("정수 입력 >> ");

                     int num1 = sc.nextInt();

 

                     System.out.print("정수 입력 >> ");

                     int num2 = sc.nextInt();

                    

                     int tmp = 0, sum = 0;

                    

                     if(num1 >= num2) {

                                tmp = num1;

                                num1 = num2;

                                num2 = tmp;

                     }

                    

                     for(int i=num1; i<=num2; ++i) {

                                System.out.print(i + " ");

                                sum += i;

                     }

                     System.out.println("sum : " + sum);

                    

                    

           }

          

          

}