yoni

[08] 제어문 - 분기문(switch 문), 반복문(While, do-While), 배열(Array), 배열과 제어문의 사용 ★ 본문

java of educational by contents

[08] 제어문 - 분기문(switch 문), 반복문(While, do-While), 배열(Array), 배열과 제어문의 사용 ★

yoni-1117 2018. 12. 1. 12:27
[01] 제어문 - 분기문 Switch 문 
- 입력 값이 일정한 수치 형태로 나열되어 있는 경우 사용합니다. 
- case문에 올수 있는 데이터 타입은 byte, char, short, int, long처럼  
  정수 형태만 올 수 있습니다. 
- 문자열(String, JDK 1.7 부터 지원), 실수(float, double)는 사용 불가능. 
   . 현재 개발 버전은 대부분 1.8을 기준으로 함(2018년 기준).
- switch문은 if문을 여러개 결합한 것과 같음으로 전부 if 문으로 변경 가능. 
   

[실행 화면]

1월 January
2월 February
3월 March
1/4 분기만 가능합니다.

 
▷ SwitchTest.java 
-------------------------------------------------------------------------------------
public class SwitchTest {
 
  public static void main(String[] args) {
    int month = 1;
    
    switch(month) {
    case 1:
      System.out.println("1월 January");
      break;
    case 2:
      System.out.println("2월 February");
      break;
    case 3:
      System.out.println("3월 March");
      break;
    default:
      System.out.println("1/4 분기만 가능합니다.");
    }
 
  }
 
}
 
 
-------------------------------------------------------------------------------------
 
 
 
[02] 제어문 - 반복문 While, do-While 

1. While 문 
   - 참일동안 실행합니다. 
   - 조건을 만족하지 않으면 한번도 실행을 하지 않습니다. 
   - 순환 횟수를 정확히 지정할 수 없을 경우 사용합니다.
   예) Network server
   
1) 1씩 증가시키는 누적 알고리즘
    su = su + 1;
① JVM 메모리에서 su 변수의 값을 연산장치로 읽어옵니다.
② 연산장치는 su 변수의 값에 1을 더합니다.
③ 연산된 결과를 할당 연산자 '='의 명령에따라 su 변수의 메모리에 저장합니다.
④ su 메모리는 새로운 값으로 변경됩니다.

2) 1부터 5까지 출력 
   - 무한 루틴을 이용하는 경우: while(true){...
   - while문에 조건을 명시한 경우: while(index <= 4){...

[실행 화면]

1
2
3
4
5
--------
true
1
true
2
true
3
true
4
true
5
--------
5: false
 
▷ While1.java 
-------------------------------------------------------------------------------------
 
public class While1 {
 
  public static void main(String[] args) {
    int su = 0;
    
 
    System.out.println("---------------");
    su = 0;
    

    System.out.println("--------");
    System.out.println(su + ": " + (su <= 4)); // false
 
  }
 
}
 
 
 
   
-------------------------------------------------------------------------------------
 
 
  
[실습 1] 1부터 시작하여 1씩 증가하면서
           2 and 3 and 4 and 5 and 6의 배수가 발견되면
           출력하고 종료하는 프로그램을 제작하세요. 

[실행 화면]
60
 
▷ While2.java 
-------------------------------------------------------------------------------------
 
public class While2 {
 
  public static void main(String[] args) {
    int su = 0; // 4 byte, ±21억
 
 
  }
 
}
  
  
 
-------------------------------------------------------------------------------------
  
  

2. do-While 문 
   - 조건에 관계 없이 무조건 최소 1회는 실행합니다. 
     예) 반드시 하나의 수 이상을 입력 받아야 하는 경우 
   
[실행 화면]
평균: -60

▷ DoWhile1.java 

 
-------------------------------------------------------------------------------------
public class DoWhile1 {
 
  public static void main(String[] args) {
    int avg = -60;
    
    do {
      System.out.println("평균: " + avg);
    } while(avg >= 0); // 양수만 처리
 
  }
 
}
 
 
 
-------------------------------------------------------------------------------------
   
   

 
[실습 2] 1부터 시작하여 1씩 증가하면서
           2, 3, 4, 5, 6의 배수가 발견되면 출력하고 종료하는 프로그램을 제작하세요. 

[실행 화면]
60
 
▷ DoWhile2.java 
-------------------------------------------------------------------------------------
 
public class DoWhile2 {
 
  public static void main(String[] args) {
    int su = 0; // 4 byte, ±21억
 
 
  }
 
}
  
   
 
-------------------------------------------------------------------------------------
   
 
 

[실습 3] 1부터 100까지의 정수중에서 짝수와 홀수의 갯수를 출력하는 프로그램을 제작하세요. 

[실행 화면]
짝수: 50
홀수: 50
 
▷ DoWhile3.java 
-------------------------------------------------------------------------------------
 
public class DoWhile3 {
 
  // 1부터 100까지의 정수중에서 짝수와 홀수의 갯수를 출력하는 프로그램을 제작하세요. 
  // 변수는?
  public static void main(String[] args) {
    int su = 0;             // 증가되는 수
    int odd_count = 0;  // 홀수 갯수
    int even_count = 0; // 짝수 갯수
     
 
    
    System.out.println("짝수: " + even_count);
    System.out.println("홀수: " + odd_count);
  }
 
}
 
   
  
-------------------------------------------------------------------------------------
    
  
   

[실습 4] 1부터 100까지의 정수중에서 짝수와 홀수의 합을 출력하는 프로그램을 제작하세요. 
 
[실행 화면]
짝수: 2550
홀수: 2500
 
▷ DoWhile4.java 
-------------------------------------------------------------------------------------
 
public class DoWhile4 {
 
  // 1부터 100까지의 정수중에서 짝수와 홀수의 합을 출력하는 프로그램을 제작하세요.
  // 변수는?
  public static void main(String[] args) {
    int su = 0;           // 증가되는 수
    int odd_total = 0;  // 홀수의 합
    int even_total = 0; // 짝수의 합
    
 
    
    System.out.println("짝수: " + even_total);
    System.out.println("홀수: " + odd_total);
  }
 
}
  
   
 
-------------------------------------------------------------------------------------
     
  
 
[실습 5] 1/1.0, 1/2.0, 1/3.0 .... 1/10.0의 합을 출력하는 프로그램을 제작하세요. 
 
[실행 화면]
2.9289 
  
▷ DoWhile5.java 
-------------------------------------------------------------------------------------
 
public class DoWhile5 {
 
  // 1/1.0, 1/2.0, 1/3.0 .... 1/10.0의 합을 출력하는 프로그램을 제작하세요. 
  public static void main(String[] args) {
    double tot = 0.0; // 합계, 8 byte 
    int child = 1;  // 분자
    double parent = 0.0; // 분모
    
 
    System.out.println(tot);
  }
 
}
 
   
 
-------------------------------------------------------------------------------------
     
  

[실습 6] 1/2.0, 2/4.0, 3/6.0 .... 10/20.0의 합을 출력하는 프로그램을 제작하세요. 
 
[실행 화면]
5.0
   
▷ DoWhile6.java 
-------------------------------------------------------------------------------------
 
public class DoWhile6 {
 
  // 1/2.0, 2/4.0, 3/6.0 .... 10/20.0의 합을 출력하는 프로그램을 제작하세요. 
  public static void main(String[] args) {
    double tot = 0.0; // 합계, 8 byte 
    int child = 0;  // 분자
    double parent = 0.0; // 분모
 
 
    System.out.println(tot);
  }
 
}
 
 
 
-------------------------------------------------------------------------------------
  
   
     
[03] 배열(Array) 사용하기 
   - 배열의 장점:  
     . 통일된 하나의 변수명으로 다량의 데이터를 처리할수 있습니다. 
     . 순환문을 이용하여 각각의 데이터에 공통된 연산작업을 쉽게 적용할 수 있습니다. 
     . 변수 사용을 줄임으로 코드를 간결하게 할 수 있습니다. 

   - 배열의 단점:  
     . 배열의 사이즈는 필요에 따라 증가시키거나 감소할 수가 없습니다. 
     . 배열의 크기를 선언하고 이용하지 않으면 메모리 낭비가 발생합니다. 

   - 배열의 사용예:  
     . 사이즈가 변경되지 않는 데이터 배열인 경우 
     . 배열생성시에 사이즈와 초기값이 지정되어 사용되는 경우 
       예) 1월 ~12월, 월요일~일요일, 각종 지정된 공휴일 
            각 학교의 학년(1~6, 1~2, 1~3, 1~2, 2.6, 3, 4) 데이터를 구분하는 코드값 
  
   - index(순서)를 통한 배열 요소의 구분: 배열명[인덱스(순서)]=값, index는 0부터 시작 

   - new: 배열에 메모리를 할당하는 명령어 
 
      
1. 배열의 선언: [] 대괄호 이용, 순서 값(index)는 0부터 시작  
   1) 값이 지정되지 않은 경우, 메모리를 할당만 한 경우
      ⓐ int[] data= new int[5]; (범위: data[0]~data[4]), 5 * 4 =20 byte 
      ⓑ int data[] = new int[5]; 

   2) 값이 지정되어 있는 경우,  4 * 2 = 8 바이트 할당 
      ⓒ int data[] = {100, 200}; 자동으로 메모리가 부여되고 값이 할당됨.
  
  
2. 배열요소에 값 저장: 순서값(index)이 0부터 시작 
   int[] data = new int[3]; 
   data[0] = 3; 
   data[1] = 6;
   data[2] = 100;
 
 
3. 5개의 요소를 저장 할 수 있는 1차원 배열: index 순서 값은 0부터 시작합니다.


1) 문자열 저장 및 출력

[실행 화면]

 
JAVA
HTML5
CSS3
Javascript
JSP
배열의 크기: 5
--------------
2013 ← 배열의 값을 while(true){..., if문을 이용하여 출력하세요.
2014
2015
2016
2017
 
▷ DevEnvironment.java 

-------------------------------------------------------------------------------------
public class DevEnvironment {
 
  public static void main(String[] args) {
    String[] dev = new String[5];
    dev[0] = "JAVA";
    dev[1] = "HTML5";
    dev[2] = "CSS3";
    dev[3] = "Javascript";
    dev[4] = "JSP";
    
    System.out.println(dev[0]);
    System.out.println(dev[1]);
    System.out.println(dev[2]);
    System.out.println(dev[3]);
    System.out.println(dev[4]);
    System.out.println("배열의 크기: " + dev.length);
    System.out.println("-------------------");
    
    int[] years = new int[5];
    years[0] = 2013;
    years[1] = 2014;
    years[2] = 2015;
    years[3] = 2016;
    years[4] = 2017;
    
    int index = -1;
 

 
    
  }
 
}
 
  
 
-------------------------------------------------------------------------------------
  
  
 
[실습] 콘솔에서 월을 입력받아 월에 해당하는 영문이름을 출력하세요.
- 월: "January", "February", "March", "April", "May", "June", "Juliy", "August", "Setember", "October", "November", "December"

[실행 화면]
/ws_java/control/bin>java Array1 1
January

/ws_java/control/bin>java Array1 2
February

/ws_java/control/bin>java Array1 3
March

▷ Array1.java
- 배열을 사용하지 않으면 12개의 if문이 필요할 수도 있습니다. 

-------------------------------------------------------------------------------------
 
public class Array1 {
 
  public static void main(String[] args) {
    String[] months = {"January", "February", "March",
                               "April", "May", "June",
                               "Juliy", "August", "September",
                               "October", "November", "December"};
    
 
    
    System.out.println(months[index]);
 
 
  }
 
}
 
  
-------------------------------------------------------------------------------------
 
 
  
4. 2차원 배열 이용
  
   - 행과 열의 구조, 하나의 면을 구성함.
   - 2차원 배열은 메모리 낭비가 심함으로 특별한 경우가 아니면 사용하지
     않습니다.
   - 메모리 낭비 문제를 해결하기위한 JCF(Java Collection Framework)라고
     하는 처리 기술이 배열의 단점을 개선하였습니다.
   - int[][] score = new int[행의 갯수][열의 갯수];


[실행 화면]


          0열  1열
         ↓    ↓
0행 → 80,    100  <-- 3행 2열 배열
1행 → 75,    85                             
2행 → 90,    95

 
▷ TwoArray.java 
-------------------------------------------------------------------------------------
public class TwoArray {
 
  public static void main(String[] args) {
    int[][] score = new int[3][2];  // 3행 2열
     
    score[0][0] = 80; score[0][1] = 100;
    score[1][0] = 75; score[1][1] = 85;
    score[2][0] = 90; score[2][1] = 95;
    
    System.out.println(score[0][0] + ", " + score[0][1]);
    System.out.println(score[1][0] + ", " + score[1][1]);
    System.out.println(score[2][0] + ", " + score[2][1]);
    
  }
 
}
  
 
-------------------------------------------------------------------------------------
  
  
5. 3차원 배열
  - 0, 0, 0: 면, 행, 열의 구조
  - 실무에서 거의 쓰이지 않음
  - Game, 3D/Graphic 분야에 쓰임.
  - 선언: int[면][행][열] datas = new int[면][행][열];
    예) int[][][] datas = new int[2][3][4];
 
   


Comments