08일차_참조형, 배열

JavaSE 2015. 6. 21. 07:13

-------------------------------
참조형 (Reference type)

1. 객체의 주소를 저장.

2. 메모리 운영은 stack, heap 영역을 나눠서 운영되고 있습니다.
stack 영역에는 크기가 작고, 규격화된 데이터를 취급합니다.
heap 영역에는 크기가 크고, 비정형 데이터를 취급합니다.
stack  영역의 데이터는 바로 읽고, 쓰기가 가능하지만,
heap 영역의 데이터는 stack 영역의 참조주소를 통해서 읽고, 쓰기가 가능합니다.

3. 자료형 선언시

기본형은
자료형 변수 = 값;

참조형은
자료형 변수 = new 자료형();

배열(참조형)은
자료형[] 변수 = new 자료형[크기];

라고 선언합니다.


--------------------------------
배열(Array)

1. 같은 자료형을 가진 변수들의 집합체.

2. 인덱스를 사용해서 구분. 예를 들어, 변수[0], 변수[1], ...

3. 사용하기 전에 배열의 크기를 지정해야 한다. 배열 선언(생성)시 크기 지정.
- 배열 선언 기본 형식

자료형[] 변수명;
변수명 = new 자료형[크기];

자료형[] 변수명 = new 자료형[크기];


예를 들어, 국어, 영어, 수학 점수를 저장하는 변수 확보.

배열을 사용하지 않는 경우는 아래와 같다.
int kor=0;
int eng=0;
int mat=0;

배열을 사용하는 경우는 아래와 같다. 자동 초기화 지원됩니다.
int[] subjects = new int[3];

subjects[0], subjects[1], subjects[2] 를 사용해서 점수 저장.
배열의 인덱스를 이용해서 반복문 지정이 가능합니다.


4. 배열 변수는 자동 초기화를 지원하는데 자료형의 기본값은
정수형인 경우는 0, 실수형인 경우는 0.0, 참조형인 경우는 null로 초기화 됩니다.

5. 배열의 변수는 사용자가 직접 초기화할 수 있습니다.
자료형[] 변수 = {데이터1, 데이터2, ...};


//Sample50.java
package com.test;

public class Sample50 {

 public static void main(String[] args) {
  //일반적인 변수 선언 및 초기화
  //기본자료형 변수;
  //변수 = 값;
  int a;
  a = 10;
  System.out.println(a);
  
  //배열(참조형) 선언 및 초기화1
  //인덱스는 0부터 표기
  //배열은 자동으로 초기화가 진행된다
  //초기값은 자료형에 의해서 결정된다
  //자료형[] 변수 = new 자료형[크기];
  //변수[인덱스] = 값;
  int[] b = new int[10];
  b[0] = 10;
  b[1] = 20;
  //...
  b[9] = 100;
  //b[10] = 110; //->X
  
  System.out.println(b[0]);
  System.out.println(b[1]);
  //...
  System.out.println(b[9]);
  
  //b.length 에서 length 는 배열의 크기를 반환
  for(int c=0; c<b.length; ++c) {
   System.out.println(b[c]);
  }
  
  
  //배열 선언 및 초기화2
  int[] d = {10, 20, 30, 40, 50};
  for(int c=0; c<d.length; ++c) {
   System.out.println(d[c]);
  }  

 }

}

 

 

월의 마지막 날짜 출력하는 경우(배열 사용 전)
//Sample36.java
package com.test;

import java.util.Scanner;

public class Sample36 {

 public static void main(String[] args) {
  
  //배열 사용 전 - 월별 마지막 날짜 확인
  //m1, m2, m3, ... -> m변수  X
  //m[0], m[1], m[2],... -> m[변수] O
  int m1 = 31;  
  int m2 = 28;
  int m3 = 31;
  int m4 = 30;
  int m5 = 31;
  int m6 = 30;
  int m7 = 31;
  int m8 = 31;
  int m9 = 30;
  int m10 = 31;
  int m11 = 30;
  int m12 = 31;
  
  Scanner sc = new Scanner(System.in);
  System.out.print("월(1~12)?");
  int month = sc.nextInt();
  sc.close();

  int result = 0;
  switch (month) {
  case 1: result = m1; break;
  case 2: result = m2; break;
  case 3: result = m3; break;
  case 4: result = m4; break;
  case 5: result = m5; break;
  case 6: result = m6; break;
  case 7: result = m7; break;
  case 8: result = m8; break;
  case 9: result = m9; break;
  case 10: result = m10; break;
  case 11: result = m11; break;
  case 12: result = m12; break;
  }
  
  System.out.printf("%d 월 : %d 일", month, result);
  

 }

}

 

//Sample51.java
package com.test;

import java.util.Scanner;

public class Sample51 {

 public static void main(String[] args) {
  
  //월별 마지막 날짜 출력
  /*
  1월달->31일
  2월달->28일
  ...
  12월달->31일
  */
  //m1, m2, m3, ... -> m변수  X
  //m[0], m[1], m[2],... -> m[변수] O
  int m31 = 31;  
  int m28 = 28;
  int m30 = 30;

  Scanner sc = new Scanner(System.in);
  System.out.print("월(1~12)?");
  int month = sc.nextInt();
  sc.close(); 
  
  int result = 0;
  switch (month) {
  case 1: case 3: case 5: case 7:
  case 8: case 10:
  case 12: result = m31; break;
  case 4: case 6: case 9:
  case 11: result = m30; break;
  case 2: result = m28; break;
  }
  
  System.out.printf("%d 월 : %d 일", month, result);
  
  
 }

}

 

 


월의 마지막 날짜 출력하는 경우(배열 사용 후)
//Sample52.java
package com.test;

import java.util.Scanner;

public class Sample52 {

 public static void main(String[] args) {
  //월별 마지막 날짜 출력
  /*
  1월달->31일
  2월달->28일
  ...
  12월달->31일
  */
  int[] m = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  
  //int month = 1;
  //m[month-1] -> month[0] -> 31 -> 1월달 날짜
  
  Scanner sc = new Scanner(System.in);
  System.out.print("월(1~12)?");
  int month = sc.nextInt();
  sc.close(); 
  
  System.out.printf("%d 월 : %d 일", month, m[month-1]);
  
 }

}

 


문제) 가위, 바위, 보 게임을 user1, user2의 입력(1~3)을 받아서, 승자 출력.
1->가위, 2->바위, 3->보 출력되도록 한다. 배열 이용.
user1의 선택(1~3)?1
user2의 선택(1~3)?2

user1: 가위
user2: 바위
승자 -> user2


//Sample53.java
package com.test;

import java.util.Scanner;

public class Sample53 {

 public static void main(String[] args) {
  
  //입력 과정 -------------
  Scanner sc = new Scanner(System.in);
  System.out.print("user1의 선택(1~3)?");
  int user1 = sc.nextInt();
  System.out.print("user2의 선택(1~3)?");
  int user2 = sc.nextInt();
  sc.close();
  
  //처리 과정 -------------
  int s = 0;
  if (user1 == user2) {
   s = 0;
  } else {
   s = ((user1%3) == ((user2+1)%3))?1:2;
  }  
  
  //출력 과정 -------------
  String[] result = {"비겼습니다.", "user1 승!", "user2가 이겼습니다."};
  String[] array = {"가위", "바위", "보"};
  System.out.printf(" user1:%s %n user2:%s %n 승자=>%s %n"
     , array[user1-1]
     , array[user2-1]
     , result[s]);

 }

}

 

 


-----------------------------------------------------------------


여러개의 수 중에서 가장 작은 수만 출력하는 프로그램 작성. (배열 사용)
int[] a = {6, 5, 8, 1, 2, 9, 3, 4, 7, 0};

//Sample54.java
package com.test;

public class Sample54 {

 public static void main(String[] args) {

  /*
  여러개의 수 중에서 가장 작은 수만 출력하는 프로그램 작성. (배열 사용)
  int[] a = {6, 5, 8, 1, 2, 9, 3, 4, 7, 0};
  */
  
  //가장 작은 값 찾는 과정
  //1. 첫 번째 값->임시변수
  //2. 임시변수의 값과 두 번째 이후의 값들을 비교 -> 반복문
  //3. 비교 결과 작은 값이 있으면 임시변수에 저장
  //4. 비교가 끝나면 임시변수의 값 출력
  
  int[] a = {6, 5, 8, 1, 2, 9, 3, 4, 7, 0};
  
  int temp = a[0];
  for (int b=1; b<a.length; ++b) {
   if (temp > a[b]) {
    temp = a[b];
   }
  }
  System.out.printf("min:%d %n", temp);

 }

}

 

 

여러개의 수 중에서 가장 큰 수만 출력하는 프로그램 작성. (배열 사용)
int[] a = {6, 5, 8, 1, 2, 9, 3, 4, 7, 0};

//Sample55.java
package com.test;

public class Sample55 {

 public static void main(String[] args) {

  /*
  여러개의 수 중에서 가장 큰 수만 출력하는 프로그램 작성. (배열 사용)
  int[] a = {6, 5, 8, 1, 2, 9, 3, 4, 7, 0};
  */
  
  //가장 큰 값 찾는 과정
  //1. 첫 번째 값->임시변수
  //2. 임시변수의 값과 두 번째 이후의 값들을 비교 -> 반복문
  //3. 비교 결과 큰 값이 있으면 임시변수에 저장
  //4. 비교가 끝나면 임시변수의 값 출력
  
  int[] a = {6, 5, 8, 1, 2, 9, 3, 4, 7, 0};
  
  int temp = a[0];
  for (int b=1; b<a.length; ++b) {
   if (temp < a[b]) {
    temp = a[b];
   }
  }
  System.out.printf("max:%d %n", temp);

 }

}

 

 

 

 


외부에서 숫자 n개를 입력 받아서 가장 작은 수만 출력하는 프로그램 작성.
(배열 사용)
실행 예)
입력 범위(2~n)?3
정수1?10
정수2?30
정수3?20

입력 받은 정수 3개: 10 30 20
가장 작은 수 출력 : 10

//Sample56.java
package com.test;

import java.util.Scanner;

public class Sample56 {

 public static void main(String[] args) {
  
  //외부 입력 -> 배열에 저장
  //1. 배열의 크기 결정 -> n
  //2. 크기에 맞는 숫자(n개)를 입력 받는다.
  //3. 입력 받은 숫자들을 배열에 저장.
  //-> 배열에 순차적으로 입력되도록 한다.
  //-> 반복문
  //-> 반복횟수? n번

  //입력 과정 ---------------------------
  Scanner sc = new Scanner(System.in);
  System.out.print("입력범위(2~n)?");
  int n = sc.nextInt();
  int[] a = new int[n];
  for (int b=0; b<n; ++b) {
   System.out.printf("숫자%d?", (b+1));
   a[b] = sc.nextInt();
  }
  sc.close();
  
  //처리과정
  int temp = a[0];
  for (int b=1; b<a.length; ++b) {
   if (temp > a[b]) {
    temp = a[b];
   }
  }
  
  //출력과정
  System.out.printf("가장 작은 수 출력 : %d %n", temp);
  

 }

}

 

 


------------------------------------------


문제) 외부에서 숫자 n개를 입력 받고, 1부터 입력된 숫자까지 출력하는 프로그램 작성. (배열 사용)
실행 예)
입력 범위(2~n)?3
정수1?10
정수2?30
정수3?20

1 2 3 4 ... 10
1 2 3 4 ....      30
1 2 3 4 .....  20

 

//Sample57.java
package com.test;

import java.util.Scanner;

public class Sample57 {

 public static void main(String[] args) {

  //외부에서 숫자 n개를 입력 받고,
  //->배열에 저장
  //1부터 입력된 숫자까지 출력

  /*
  int n = 10;
  for (int a=1; a<=n; ++a){
   System.out.printf(" %d", a);
  }
  System.out.println();
  */
  
  //입력 과정 ---------------------
  Scanner sc = new Scanner(System.in);
  System.out.print("입력 범위(2~n)?");
  int n = sc.nextInt();
  
  int[] a = new int[n];
  
  for (int b=0; b<n; ++b) {
   System.out.printf("숫자%d?", (b+1));
   a[b] = sc.nextInt();
  }
  
  sc.close();
  
  //출력 과정 ------------------
  for (int d=0; d<n; ++d) {
   for (int c=1; c<=a[d]; ++c){
    System.out.printf(" %d", c);
   }
   System.out.println();
  }
  
  
 }

}

 

 

문제) 외부에서 숫자 n개를 입력 받고, 1부터 입력된 숫자까지 출력하고, 그 숫자들의 합을 같이 출력하는 프로그램 작성. (배열 사용)
실행 예)
입력 범위(2~n)?3
정수1?10
정수2?30
정수3?20

1 2 3 4 ... 10  => 55
1 2 3 4 ....      30 => ??
1 2 3 4 .....  20 => ??

 

//Sample58.java
package com.test;

import java.util.Scanner;

public class Sample58 {

 public static void main(String[] args) {

  //외부에서 숫자 n개를 입력 받고,
  //->배열에 저장
  //1부터 입력된 숫자까지 출력
  //->합 까지 출력

  /*
  int n = 10;
  for (int a=1; a<=n; ++a){
   System.out.printf(" %d", a);
  }
  System.out.println();
  */
  
  //입력 과정 ---------------------
  Scanner sc = new Scanner(System.in);
  System.out.print("입력 범위(2~n)?");
  int n = sc.nextInt();
  
  int[] a = new int[n];
  
  for (int b=0; b<n; ++b) {
   System.out.printf("숫자%d?", (b+1));
   a[b] = sc.nextInt();
  }
  
  sc.close();
  
  //처리 과정 ------------------
  //-> 배열에 저장된 숫자들의 합 계산
  int[] sum = new int[n];
  for (int d=0; d<n; ++d) {
   for (int c=1; c<=a[d]; ++c){
    sum[d] += c;
   }
  }
  
  //출력 과정 ------------------
  for (int d=0; d<n; ++d) {
   for (int c=1; c<=a[d]; ++c){
    System.out.printf(" %d", c);
   }
   System.out.printf(" => %d %n", sum[d]);
  }
    
 }

}

 


문제) 외부에서 숫자 n개를 입력 받고, 입력된 숫자들의 팩토리얼(n!) 값 출력.
배열 이용. 곱하기 연산의 초기값은 1로 지정해야 한다.
입력 범위(2~n)?3
정수1?2
정수2?3
정수3?4

2! -> ???
3! -> ???
4! -> ???

 

//Sample59.java

package com.test;

import java.util.Scanner;

public class Sample59 {

 public static void main(String[] args) {

  //외부에서 숫자 n개를 입력 받고,
  //->배열에 저장
  //입력된 숫자들의 팩토리얼(n!) 값 출력

  /*
  int n = 10;
  int pact = 1;
  for (int a=1; a<=n; ++a){
   pact *= a;
  }
  System.out.println(pact);
  */
  
  //입력 과정 ---------------------
  Scanner sc = new Scanner(System.in);
  System.out.print("입력 범위(2~n)?");
  int n = sc.nextInt();
  
  int[] a = new int[n];
  
  for (int b=0; b<n; ++b) {
   System.out.printf("숫자%d?", (b+1));
   a[b] = sc.nextInt();
  }
  
  sc.close();
  
  //처리 과정 ------------------
  //-> 배열에 저장된 숫자들의 팩토리얼(n!) 계산
  int[] pact = new int[n];
  for (int b=0; b<n; ++b) {
   pact[b] = 1;
   for (int c=1; c<=a[b]; ++c){
    pact[b] *= c;
   }
  }
  
  //출력 과정 ------------------
  for (int b=0; b<n; ++b) {
   System.out.printf("%d! => %d %n", a[b], pact[b]);
  }
  
 }

}

 

 

 

문제) 외부에서 숫자 n개를 입력 받고, 가장 작은 값, 가장 큰 값 출력.
배열 이용.

입력 범위(2~n)?3
정수1?10
정수2?30
정수3?20

가장 작은 수 출력 : 10
가장 큰 수 출력 : 30

 

package com.test;
import java.util.*;
public class work5 {
 public static void main(String ar[]) {
/*  문제) 외부에서 숫자 n개를 입력 받고
 *   가장 작은 값, 가장 큰 값 출력.
  배열 이용.

  입력 범위(2~n)?3
  정수1?10
  정수2?30
  정수3?20

  가장 작은 수 출력 : 10
  가장 큰 수 출력 : 30  
*/
  Scanner sc = new Scanner(System.in);
  System.out.print("숫자를 입력 하세요 = ");
  int number = sc.nextInt();
  int [] array = new int[number];
  for(int a = 0; a<number; ++a) {
   System.out.printf("정수%d =", a+1);
   array[a] = sc.nextInt();
  }sc.close();
  //입력과정---------------------------------------
  
  int Min = array[0], Max = array[0];
  
  for(int b = 1; b<number; ++b){
   //가장 작은값을 찾을떄.
   if (Min > array[b]) {
    Min = array[b];
   } else if(Max < array[b]){
    Max = array[b];    
   }
  }
  
  //처리과정----------------------------------------
  System.out.printf("min = %d max = %d %n",Min, Max);
 }
}


문제) 외부에서 숫자 n개를 입력 받고, 숫자들의 합, 평균 출력.
배열 이용.

입력 범위(2~n)?3
정수1?10
정수2?30
정수3?20

합 출력 : ????
평균 출력 : ????

 

package com.test;
import java.util.*;
public class work6 {
 public static void main(String ar[]) {
/* 문제) 외부에서 숫자 n개를 입력 받고, 숫자들의 합, 평균 출력.
 배열 이용.

 입력 범위(2~n)?3
 정수1?10
 정수2?30
 정수3?20

 합 출력 : ????
 평균 출력 : ????
*/
  Scanner sc = new Scanner(System.in);
  System.out.print("숫자를 입력하세요 = ");
  int number = sc.nextInt();
  
  int [] array = new int[number];
  for(int a = 0; a<number; ++a){
   System.out.printf("정수%d = ", (a+1));
   array[a] = sc.nextInt();
  }sc.close();
  //입력과정 --------------------------------------
   int sum = 0;
   int d = 0;
   for(int a = 0; a <number; ++a) {
    sum += array[a];
   }
   d = sum / number;
   
  //과정입력----------------------------------------
   System.out.printf("합은 = %d %n", sum);
   System.out.printf("평균은 = %d", d);
 }
}


문제) 외부에서 숫자 n개를 입력 받고, 숫자만큼의 별문자(*) 출력.
배열 이용.

입력 범위(2~n)?3
정수1?10
정수2?20
정수3?30

********** -> 10
******************** -> 20
****************************** -> 30

 

package com.test;
import java.util.*;
public class work7 {
 public static void main(String ar[]) {
/*  문제) 외부에서 숫자 n개를 입력 받고, 숫자만큼의 별문자(*) 출력.
  배열 이용.

  입력 범위(2~n)?3
  정수1?10
  정수2?30
  정수3?20

  ********** -> 10
  ******************** -> 20
  ****************************** -> 30
*/
  Scanner sc = new Scanner(System.in);
  
  System.out.print("W.N = ");
  int Number = sc.nextInt();
  
  int [] array = new int [Number];
  for(int i = 0; i <Number; ++i) {
  System.out.printf("숫자%d = ", (i+1));
  array[i] = sc.nextInt();
  }sc.close();
  //-------------------------------------------입력
  
  for(int i = 0; i <=Number; ++i){
   for(int j = 1; j<=array[i]; ++j){
    System.out.printf("*");
   }System.out.println();
  }
  //--------------------------------------------처리
  
 }
}

 


----------------------------------
요약

1. 참조형 자료형의 특징
- 기본자료형 -> stack
- 참조자료형 실제 데이터 -> heap
, 참조자료형의 참조주소 -> stack

2. 배열
- 같은 자료형, 변수의 집합체.
- 인덱스 지원.
- 기본 형식
자료형[] 변수명 = new 자료형[크기];
자료형[] 변수명 = {데이터1, 데이터2, ...};
- 인덱스 사용 예
for (int i=0; i<array.length; i++) {
 System.out.printf("%d ", array[i]);
}

-----------------------------------------


 

블로그 이미지

알 수 없는 사용자

,

---------------------------------------
외부 입력

1. 미리 내장된 값을 사용하는 것이 아니라, 프로그램 실행 중에 외부에서 값을 입력받는 것.

2. java.util 패키지의 Scanner 클래스 사용.

3. import 구문과 함께 패키지 등록해서 사용. import 구문에 패키지 등록을 하지 않아도 되는 경우는 java.lang 패키지만입니다.

import 패키지이름.클래스이름;

import 패키지이름.*;

4. 표준 입력 장치(키보드)를 통한 외부 입력을 문자열 또는 기본자료형 형태로 입력 받는 클래스입니다.

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String b = sc.next();
String c = sc.nextLine();

실행시 외부 입력을 받기 위해서 프롬프트가 깜박거리게 됩니다.
사용자는 적당한 데이터를 입력 후에 Enter키를 입력해야 입력 과정이 끝납니다.


//Sample42.java
package com.test;

//Scanner 클래스 사용을 위한 준비
import java.util.*;

public class Sample42 {

 public static void main(String[] args) {

  //표준 입력 장치(키보드)를 이용한 외부 데이터 입력 과정
  
  //Scanner 클래스에 대한 사용 준비
  Scanner sc = new Scanner(System.in);
  
  //외부 입력 데이터에 대한 메시지 출력
  System.out.print("데이터 입력?");
  //외부 데이터 입력 과정
  //->Enter 키 입력 전까지의 내용을
  //문자열로 전달해준다.
  String s = sc.next();
  
  System.out.println(s);
  
  //외부 자원 사용에 대한 마무리
  sc.close();
  
 }

}

 


//Sample43.java
package com.test;

import java.util.*;

public class Sample43 {

 public static void main(String[] args) {

  //---------------------------
  //입력 과정
  Scanner sc = new Scanner(System.in);
  System.out.printf("이름?");
  String name = sc.next();
  System.out.printf("전화?");
  String tel = sc.next();
  sc.close();
  
  //---------------------------
  //출력 과정
  System.out.printf("당신의 이름은 '%s'이고, 전화는 '%s'입니다.%n", name, tel);

 }

}

 


//Sample44.java -> 입력, 처리, 출력 과정을 물리적으로 구분할 수 있도록 작성할 것.
package com.test;

import java.util.*;

public class Sample44 {

 public static void main(String[] args) {

  //숫자 2개를 입력 받아서 합 연산 후 결과 출력.
  
  //입력 과정 -> 숫자 2개 입력 (공백으로 구분)
  Scanner sc = new Scanner(System.in);
  System.out.print("숫자 2개 입력(n m)?");
  int n = sc.nextInt();
  int m = sc.nextInt();
  sc.close();
  
  //처리 과정 -> 합 연산
  int sum = 0;
  sum = n + m;
  
  //출력 과정 -> 결과 출력
  System.out.printf("%d + %d = %d %n", n, m, sum);
  
 }

}

 

 

----------------------------------------
반복문
- 비슷한 액션을 반복 처리하는 구문

3. do~while문
- 기본 형식

do {
 //반복 실행할 구문;
}while(조건식);

- while문은 조건식 검사를 먼저하지만, do~while문은 조건식 검사를 나중에 합니다.
- 외부 입력을 판단한 후 반복 여부를 결정할 때 많이 사용합니다.


//Sample45.java
package com.test;

public class Sample45 {

 public static void main(String[] args) {
  
  //1~10까지의 수 출력
  //do~while 구문 이용
  
  for (int a=1; a<=10; ++a) {
   System.out.printf(" %d",a);
  }
  System.out.println();
  
  int b=1;
  while (b<=10) {
   System.out.printf(" %d",b);
   ++b;
  }
  System.out.println();
  
  //초기값 지정
  int c=1;
  //반복문 시작
  do {
   //변수의 값 출력
   System.out.printf(" %d",c);
   //변수의 값 증가
   ++c;
  //조건식 검사
  }while(c<=10);
  //반복문 끝
  
  System.out.println();

 }

}

 

외부 입력을 무한 반복해서 받도록 설정하고, 특정 문자(숫자) 입력시 입력 과정을 중단하도록 합니다.
//Ex37.java
package com.sist;

import java.util.*;

public class Ex37 {

 public static void main(String[] args) {
  
  Scanner sc = new Scanner(System.in);
  
  boolean  b = true;
  do {
   //무한 실행 영역
   //System.out.println("TEST");

   //무한 반복 구문 안에 외부 입력을 배치
   System.out.print("문자열 입력?");
   String c = sc.next();
   
   //입력된 내용을 화면에 출력.
   System.out.println(c);
   
   //프로그램 중단에 필요한 구문 추가
   //종료 문자열-> "x"
   //문자열 같음을 비교할 때는 equals() 메소드 이용
   //원본문자열.equals(비교문자열)
   if (c.equals("x")) {
    //프로그램 중단에 필요한 구문
    b = false;
   }

  }while(b);
  
  sc.close();

 }

}

 

 

//Ex38.java
package com.sist;

import java.util.*;

public class Ex38 {

 public static void main(String[] args) {
  //외부 입력을 무한 반복하는 과정을 while문으로 구성
  
  Scanner sc = new Scanner(System.in);
  
  boolean b = true;
  
  while(b) {
   
   System.out.print("문자열 입력?");
   String c = sc.next();
   
   System.out.println(c);
   
   //무한 반복 실행 중단 구문 추가
   if (c.equals("x")) {
    b = false;
   }
   
  }
  
  sc.close();

 }

}

 

4. break문
- 블럭 탈출 구문
- for, while, do~while,switch 구문 블럭을 탈출합니다.
- 반복문 조건식의 참, 거짓과 무관하게 블럭을 탈출합니다.

for (대입문; 조건식; 증감식) {

 //특정 조건이 되면 for 블럭을 탈출
 if (조건식) { 
  break;
 }
 
}


while(조건식) {

 //특정 조건이 되면 while 블럭을 탈출
 if (조건식) { 
  break;
 }

}

- 반복문이 중첩된 경우는 블럭 한 번만 탈출할 수 있습니다.

//Sample46.java
package com.test;

public class Sample46 {

 public static void main(String[] args) {
  
  //무한실행.
  //특정 조건 만족시 break; 구문으로 탈출.

  //1~10까지의 수를 출력.
  int a = 1;
  do {
   
   System.out.println(a);
   ++a;
   
   if (a>10) {
    break;
   }
   
  }while(true);

 }

}

 

//Sample47.java
package com.test;

import java.util.*;

public class Sample47 {

 public static void main(String[] args) {
  
  //무한실행.
  //특정 조건을 만족하면 break; 구문으로 탈출.
  
  //1~n까지의 수를 출력. 이때, n은 외부 입력.
  Scanner sc = new Scanner(System.in);
  System.out.printf("n(1 이상)?");
  int n = sc.nextInt();
  sc.close();
  
  int a = 1;
  do {
   System.out.printf(" %d", a);
   ++a;
   if(a>n) {
    break;
   }
  }while(true);

 }

}

 

 


무한 반복문과 함께 특정 숫자를 입력 받고, 1부터 특정 숫자까지 수를 출력하는 구문 작성. 입력 중단은 -1 입력시 중단합니다.

//Sample47.java
package com.test;

import java.util.*;

public class Sample47 {

 public static void main(String[] args) {
  
  //무한실행.
  //특정 조건을 만족하면 break; 구문으로 탈출.
  
  //1~n까지의 수를 출력. 이때, n은 외부 입력.

  Scanner sc = new Scanner(System.in);

  //무한 반복하는 과정
  do {
   //n값을 외부에서 입력받는 과정
   System.out.printf("n(1 이상)?");
   int n = sc.nextInt();
   //사용자의 의도에 의해 실행 중단
   if (n==-1) {
    break;
   }

   //1부터 n까지의 수를 출력하는 과정
   int a = 1;
   do {
    System.out.printf(" %d", a);
    ++a;
    if(a>n) {
     break;
    }
   }while(true);
   System.out.println();
   
  }while(true);
  
  sc.close();

 }

}

 

 

문제) 숫자(양의 정수)를 여러번(연속적으로) 외부 입력을 받고, 입력받은 모든 숫자들의 합을 마지막에 출력합니다. 입력 중단은 -1 입력시 중단합니다.

1단계. 숫자(양의 정수)를 여러번(연속적으로) 외부 입력
-> do~while, Scanner sc = new Scanner(System.in);

2단계. 입력 중단은 -1 입력시 중단
-> if (a == -1) {
  break;
 }

3단계. 입력받은 모든 숫자들의 합 연산
-> int sum = 0;    sum += a;

4단계. 합을 마지막에 출력
-> System.out.printf("%d %n", sum);


//Sample48.java
package com.test;

import java.util.*;

public class Sample48 {

 public static void main(String[] args) {

  Scanner sc = new Scanner(System.in);

  //숫자 여러개를 합산할 변수 준비
  int sum = 0;
  do{
   //외부 입력 (반복 실행)
   System.out.print("n(1 이상)?");
   int n = sc.nextInt();
   //외부 입력 -1인 경우는 반복 중단
   if (n == -1) {
    break;
   }
   //외부 입력된 숫자들을 합산 연산
   sum += n;
  }while(true);
  //외부 입력이 끝나면 합산 결과 출력
  System.out.printf("합 : %d %n", sum);
  
  sc.close();
  
 }

}

 

 

문제) 숫자(양의 정수)를 외부 입력을 받고, 입력 받은 숫자에 대한 팩토리얼 값 출력. 반복 실행. -1 중단.  a! = 1 * 2 *3* ...*a

package com.test;

import java.util.*;

public class work {
 public static void main(String ar[]) {
  Scanner sc = new Scanner(System.in);

  do {
   // 반복
   System.out.print("숫자를 입력하세요 = ");
   int number = sc.nextInt();
   // 빠져나감.
   if (number == -1) {
    break;
   }
   
   int mul = 1;
   do { // 팩토리얼구문.
    mul = mul * number;
    number--;
    if (number == 0) {
     break;
    }
   } while (true);
   System.out.printf("곱은 = %d %n", mul);
  } while (true);

  sc.close();
 }

}

문제) 외부 입력 받은 (영문 대문자로 구성된)문자열을 전부 소문자로 변환해서 출력하는 구문 작성. 입력 받은 문자열의 글자수는 length() 메소드 이용.
A -> 65
a -> 97
0 -> 48


A -> (int)A -> 65 -> 65+32 -> 97 -> (char)97 -> a

TEST
-> charAt(인덱스) 인덱스는 0~3
-> T, E, S, T
-> (int)T, (int)E, (int)S, (int)T
->  84, 69, 83, 84
-> 84+32, 69+32, 83+32, 84+32
-> (char)XX, (char)XX, (char)XX, (char)XX
-> t, e, s, t
-> test

 

package com.test;
import java.util.*;
public class work2 {
 public static void main(String ar[]) {
  Scanner sc = new Scanner(System.in);

  //대문자를 소문자로 변환문제
  do {
   System.out.printf("문구를 입력하세요. %n");
   String st = sc.next();
   int b = st.length();
   
   if (b == -1) {
    break;
   }
   
   int i = 0;
   do {
    int temp = (int) st.charAt(i); // index 0~5
    char c1 = 'a';
    if (temp >= 65 && temp <= 96) {
     c1 = (char) (temp + 32);
    } else {
     c1 = (char) temp;
    }
    System.out.print(c1);
    i++;
    
   } while (i<b);
   System.out.println();
  } while (true);
  sc.close();
 }
}

 

-----------------------------------------------------------


5. continue문
- break 구문은 반복문 구문을 탈출할 때 사용하고, continue 구문은 반복 실행 단계를 건너뛸때 사용합니다.

for (대입문; 조건식; 증감식) {
 //반복 실행할 구문1;
 if (조건식) {
  //한 번의 실행을 건너뛰고, 다음 단계로 진행
  continue;
 }
 if (조건식) {
  //현재 for 블럭을 탈출
  breaK;
 }
 //반복 실행할 구문2;
}


//Sample49.java
package com.test;

public class Sample49 {

 public static void main(String[] args) {
  
  //1부터 10까지의 수를 출력
  for (int a=1; a<=10; ++a) {
   System.out.printf(" %d",a);
  }
  System.out.println();

  //1부터 10까지의 수를 출력
  //단, 3의 배수는 제외.
  for (int a=1; a<=10; ++a) {
   if (a%3 == 0) {
    continue;
   }
   System.out.printf(" %d",a);
  }
  System.out.println();

 }

}

 

문제) 반복문 예제. for, while, do~while
1 -2 +3 -4 +5 -6 +7 -8 +9 -10 +11 .... -100 => ??

결과 : -50

 

 int sum =0;
  for(int a = 1; a <= 100; ++a) {
   if(a % 2 == 1){
    sum += a;
   }else {
    sum -= a;
   }
  }
  System.out.printf("합은 = %d ", sum);

 


문제) 반복문 예제.  for, while, do~while
1 + (1+2) + (1+2+3) + (1+2+3+4) +  ... + (1+...+100) => ???

결과 : 171700

 

int sum1 = 0;
  int sum2 = 0;
  
  for(int a = 1; a <= 100; ++a){
   for(int b = 1; b < a; ++b) {
    sum2 += b;
   }
   sum1 += a;
  }
  System.out.printf("sum1 = %d, sum2 = %d %n", sum1,sum2);
  System.out.printf("총합 = %d", sum1+sum2);

 


추가문제) 반복문 예제. 피보나치 수열.
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ?

 

int a = 1, b = 0;
  System.out.printf("%d ",a);
  for(int i = 1;i <=11 ;++i) {
   if(i % 2 == 1){
    b += a;
    System.out.printf("%d ",b);
   }else {
    a += b;
    System.out.printf("%d ",a);
   }
  }

 

 

추가문제) 회문(palindrome) 출력. 입력한 문자열을 거꾸로 출력하는 프로그램.
회문(回文: madam이나 nurses run처럼 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 단어나 구)

//Sample35.java
package com.test;

import java.util.Scanner;

public class Sample34 {

 public static void main(String[] args) {
  
  Scanner sc = new Scanner(System.in);
  do {
   System.out.print("문자열 입력(exit: x)?");
   String s = sc.nextLine();
   if(s.equalsIgnoreCase("x"))  {
    break;
   }  
   
   for (int a=1; a<=s.length(); ++a) {
    char c = s.charAt(s.length() - a);
    System.out.printf("%c", c);
   }
   System.out.println();
   
  }while(true);
  sc.close();

 }

}

 

---------------------------------------------
과제) java.util 패키지 Scanner 클래스 정리
next(), nextInt()

 

 

 

 

 

 


 

블로그 이미지

알 수 없는 사용자

,

----------------------------------------
반복문
- 비슷한 액션을 반복 처리하는 구문


1. for 문
- 기본 형식

for (자료형 변수=초기값; 조건식; 증감식) {
 //반복 실행할 구문;
}

- 실행순서
1) 자료형 변수=초기값;
2) 조건식 검사 -> 결과 true 또는 false
3) (조건식의 결과가 true인 경우만) 반복 실행할 구문;
4) 증감식 -> 변수의 값을 증감.
5) 조건식 검사 -> 결과 true 또는 false
6) (조건식의 결과가 false인 경우만) 반복문 실행 중지.

예를 들어, 1부터 10까지의 수를 출력

for (자료형 변수=1; 변수<=10; ++변수) {
 System.out.printf("%d ", 변수);
}


//Sample28.java
package com.test;

public class Sample28 {

 public static void main(String[] args) {
  
  /* 반복문 */
  for (int a=1; a<=10; ++a) {
   System.out.println(a);
  }
  /*
  1 -> int a=1 -> 1
  2 -> a<=10 -> true
  3 -> System.out.println(a) -> 1 출력
  4 -> ++a -> 2
  5 -> a<=10 -> true
  6 -> System.out.println(a) -> 2 출력
  7 -> ++a -> 3
  8 ->
  9 ->
  10 ->
  ...
  
  XX-2 -> System.out.println(a) -> 10 출력
  XX-1 -> ++a -> 11
  XX -> a<=10 -> false -> for 문 실행 중단
  */
  

 }

}

 

 

//Ex22.java
package com.test;

public class Ex22 {

 public static void main(String[] args) {
  
  //1부터 10까지의 수를 출력하는 반복문
  for (int a=1; a<=10; ++a) {
   System.out.printf("%d ", a); //1,2,3,...,10 => 10번
  }
  System.out.println();

  //0부터 9까지의 수를 출력하는 반복문
  for (int a=0; a<10; ++a) {
   System.out.printf("%d ", a); //0,1,2,...,9 => 10번
  }
  System.out.println();
  
  //n부터 m까지의 수를 출력하는 반복문
  for (int a=1; a<=10; a+=2) {
   System.out.printf("%d ", a); //1,3,5,...,9 => 5번
  }
  System.out.println();
  
  //n부터 m까지의 수를 출력하는 반복문
  for (int a=1; a<=10; a+=3) {
   System.out.printf("%d ", a); //1,4,7,10 => 4번
  }
  System.out.println();
  
  //n부터 m까지의 수를 출력하는 반복문
  for (int a=1; a<=10; ++a) {
   System.out.printf("%d ", ++a); //2,4,6,8,10 => 5번
  }
  System.out.println();
  
  //n부터 m까지의 수를 출력하는 반복문
  for (int a=1; a<10; ++a) {
   System.out.printf("%d ", a); //1~9 => 9번
  }
  System.out.println();
  
  //n부터 m까지의 수를 출력하는 반복문
  for (int a=0; a<10; ++a) {
   System.out.printf("%d ", a); //0~9 => 10번
  }
  System.out.println();

  //n부터 m까지의 수를 출력하는 반복문
  for (int a=0; a<=10; ++a) {
   System.out.printf("%d ", a); //0~10 => 11번
  }
  System.out.println();
  
  //문제) 100 이하의 짝수를 출력하는 반복문
    for(int a = 2; a <=100 ; a+=2){
   System.out.printf("%d ",a);
  }

  //문제) 100 이하의 홀수를 출력하는 반복문
     for(int b = 1; b <=100 ; b+=2) {
   System.out.printf("%d ",b);
  }  
 
 }

}


- 반복문 지정시 조건식, 증감식을 잘못 작성하면 한 번도 실행이 되지 못하거나, 무한 실행이 될 수 있다.

for (자료형 변수=1; 변수>=0; ++변수) {
 //반복 실행할 구문; -> 무한 실행
}

for (자료형 변수=1; 변수<=0; ++변수) {
 //반복 실행할 구문; -> 0번
}

for (;;) {
 //반복 실행할 구문; -> 무한 실행
}

 

//Ex23.java
package com.test;

public class Ex23 {

 public static void main(String[] args) {
  
  //무한 실행 예
  for (int a=1; a>=0; ++a) {
   System.out.printf("%d ", a);
  }
  System.out.println();

 }

}


문제) 1부터 100까지의 수를 모두 더한 값(5050)을 출력.


//Sample30.java
package com.test;

public class Sample30 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  //문제) 1부터 100까지의 수를 모두 더한 값(5050)을 출력.
  //1 + 2 + 3 + ... + 100 => 5050
  // + 숫자 연산은 for 블럭 안쪽에서 실행
  // 결과값 5050 출력은 for 블럭 바깥쪽에서 실행

  int b = 0;
  int c = 1;
  
  //  문제) 1부터 100까지의 수를 모두 더한 값(5050)을 출력.
  for (int a = 1; a <= 100; ++a){
   b += a; //b = b + a;
  }
  System.out.printf("1부터 100까지의 합 = %d %n", b);


 }

}

 

문제) 1부터 10까지의 수를 모두 곱한 값을 출력.


  int b = 0;
  int c = 1;

 

for(int a = 1; a <=10; ++a){
   c *= a; // c = c * a
  }
  System.out.printf("1부터 10까지의 곱 = %d %n", c);


문제) 1부터 100까지의 수를 모두 더한 값(5050)을 출력.
10 단위마다 중간 결과값도 같이 출력합니다.

if (a는 10의 배수일 때만) {
 System.out.printf("1부터 %d까지의 합 : %d  %n", a, b);
}


//Sample31.java
package com.test;

public class Sample31 {

 public static void main(String[] args) {

int a = 0;
  for(int i = 1; i <=100; ++i) {
   a += i;
   //a가 10의 배수마다 출력
   if(i %10 == 0){
   System.out.printf("1부터 %d까지 합은 = %d %n", i,a);
   }
  }
  
 }

}

 


문제) 1부터 100까지의 수를 출력하되 10단위마다 줄바꿈 처리.
//Sample32.java
package com.test;

public class Sample32 {

 public static void main(String[] args) {
  
 //문제 : 10개 출력시마다 줄바꿈 처리 과정 추가
  for (int a=1; a<=100; ++a) {
   //System.out.println(a);  //매번 줄바꿈 처리
   //System.out.print(a);  //줄바꿈 X
   System.out.printf(" %d", a);  //줄바꿈 X

   //if문
   //System.out.println();
   if (a % 10 == 0) {
    System.out.println();
   }
  }

 }

}

 

문제) 1부터 100까지의 수를 출력하되 10단위마다 줄바꿈 처리.
출력시 중간 합 결과가 같이 출력되도록 한다.
 1 2 3 4 5 6 7 8 9 10 => 55
 11 12 13 14 15 16 17 18 19 20 => 210
 21 22 23 24 25 26 27 28 29 30 => 465
 31 32 33 34 35 36 37 38 39 40 => ?
 41 42 43 44 45 46 47 48 49 50 => ?
 51 52 53 54 55 56 57 58 59 60 => ?
 61 62 63 64 65 66 67 68 69 70 => ?
 71 72 73 74 75 76 77 78 79 80 => ?
 81 82 83 84 85 86 87 88 89 90 => ?
 91 92 93 94 95 96 97 98 99 100 => 5050
-------------
=> 5050

//Sample33.java
package com.test;

public class Sample33 {

 public static void main(String[] args) {
  
 int b = 0;
  //1부터 100까지의 수를 출력
  for (int a=1; a<=100; ++a) {
   b = b + a;
   
   //System.out.println(a);  //매번 줄바꿈 처리
   //System.out.print(a);  //줄바꿈 X
   System.out.printf(" %d", a);  //줄바꿈 X
   
   //10개 출력시마다 줄바꿈 처리 과정 추가
   //if문
   //System.out.println();
   if (a%10 == 0) {
    System.out.printf(" => %d %n", b);
   }
   
  }
  System.out.println("--------------");
  System.out.printf(" => %d %n", b);

 }

}

 

 

- 반복문 지정시 반복문 안에 다시 반복문을 중첩해서 지정할 수 있습니다.

for (자료형 변수1=초기값; 조건식1; 증감식1) {
 //반복 실행할 구문;
 for (자료형 변수2=초기값; 조건식2; 증감식2) {
  //반복 실행할 구문;
 }
}


1부터 10까지의 수를 출력(안쪽 for문). 10번 반복(바깥쪽 for문)해서 출력.
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10
1 2 3 4 ... 10


for (10번 반복하는 실행과정) {
 for (1부터 10까지의 수를 출력) {
 }
}


//Sample34.java
package com.test;

public class Sample34 {

 public static void main(String[] args) {
  /*
  for (10번 반복하는 실행과정) {
   for (1부터 10까지의 수를 출력) {
   }
  }
  */

  for (int b=0; b<10; ++b) {
   for (int a=1; a<=10; ++a) {
    System.out.printf(" %d", a);
   }
   System.out.println();
  }

 }

}

 


 1
 1 2
 1 2 3
 1 2 3 4
 1 2 3 4 5
 1 2 3 4 5 6
 1 2 3 4 5 6 7
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8 9
 1 2 3 4 5 6 7 8 9 10

 

//Sample35.java
package com.test;

public class Sample35 {

 public static void main(String[] args) {
 
  for (int b=1; b<=10; ++b) {
   //반복문의 마지막 값(a<=b)이 가변적 상태가 되도록 한다.
   for (int a=1; a<=b; ++a) {
    System.out.printf(" %d", a);
   }
   System.out.println();
  }
  
 }

}

 


문제) 숫자 피라미드 출력. for 문 이용.
실행 예)
  1  2  3  4  5  6  7  8  9 10
  2  3  4  5  6  7  8  9 10 11
  3  4  5  6  7  8  9 10 11 12
  4  5  6  7  8  9 10 11 12 13
  5  6  7  8  9 10 11 12 13 14
  6  7  8  9 10 11 12 13 14 15
  7  8  9 10 11 12 13 14 15 16
  8  9 10 11 12 13 14 15 16 17
  9 10 11 12 13 14 15 16 17 18
 10 11 12 13 14 15 16 17 18 19


//Sample36.java
package com.test;

public class Sample36 {

 public static void main(String[] args) {
 
  int b = 1;
  while(b <= 10) {
   int a = b;
   while (a<=(b+9)){
    System.out.printf(" %2d", a);
    ++a;
   }
   System.out.println();
   ++b;
  }  
 }

}

 

----------------------------------------------------------------------


문제) 숫자 피라미드 출력.
실행 예)
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5


//Sample37.java
package com.test;

public class Sample20 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  /* int b = 2; =>1, 2, 3, ..=> 반복문으로 수정 */
  for (int b=1; b<=5; b+=1) {
  
   for (int a=1; a<=b; ++a ) {
    System.out.printf("%d ", a);
   }
   System.out.println();
  
  }

 }

}

 

문제) 숫자 피라미드 출력.
실행 예)
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1

 

//Sample38.java
for (int b=1; b<=10; ++b) {
  //반복문의 마지막 값(a<=(6-b))이 가변적 상태가 되도록 한다.
  for (int a=1; a<=(6-b); ++a) {
   System.out.printf(" %d", a);
  }
  System.out.println();
  }

 

 


추가문제) 숫자 피라미드 출력.
실행 예)
          1
       1 2
     1 2 3
   1 2 3 4
 1 2 3 4 5

//sample39.java

 

for (int b = 1; b<=10; ++b) {
   
   for(int a = 1; a<=(10-b); ++a) {
    System.out.print("  ");
   }
   for (int a = 1; a <=b; ++a) {
   System.out.printf(" %d", a);
   }
   
  System.out.println();
  }

 

 


1부터 100까지의 수를 출력. 10 단위까지로 나눠서 출력.
바깥쪽 반복문 10번
안쪽 반복문 10, 20, 30,... 100번 -> 변수로 처리

1 2 3 4 ... 10
1 2 3 4 ...       20
1 2 3 4 ...              30

 

//Sample40.java


for (int b=1; b<=10; ++b) {
   for (int a=1; a<=(b*10); ++a) {
    System.out.printf(" %d", a);
   }
   System.out.println();
  }

 


구구단 출력. 1단(1*1~1*9)부터 9단(9*1~9*9)까지.
실행 예)
1 * 1 => 1
1 * 2 => 2
...

9 * 9 => 81

 


과제) 1부터 100까지의 수를 모두 더한 값(5050)을 출력.
10 단위마다 중간 결과값도 같이 출력합니다.
1 단위 숫자도 같이 출력합니다. (for 구문 이용)
실행 예)
1 2 3 4 5 6 7 8 9 10 => 55
1 2 3 4 ...    19 20 => 210

...

1 2 3 4 ... 98 99 100 => 5050

 

//Sample41.java

 int b=1;
 while(b<=10){
  int c = 0;
  int a = 1;
  while(a <= (b*10)){
   c += a;
   System.out.printf(" %d", a);
   ++a;
  }
  System.out.printf(" => %d %n", c);
  ++b;
  }

 

---------------------------------------
2. while 문
- 기본형식

자료형 변수=초기값;
while(조건식) {
 //반복 실행할 구문;
 //증감식;
}

- 실행순서
1) 자료형 변수=초기값;
2) 조건식 검사 -> 결과 true 또는 false
3) (조건식의 결과가 true인 경우만) 반복 실행할 구문;
4) 증감식 -> 변수의 값을 증감.
5) 조건식 검사 -> 결과 true 또는 false
6) (조건식의 결과가 false인 경우만) 반복문 실행 중지.

예를 들어, 1부터 10까지의 수를 출력

for (자료형 변수=1; 변수<=10; ++변수) {
 System.out.printf("%d ", 변수);
}
-> while 구문으로 변경
자료형 변수=1;
while(변수<=10) {
 System.out.printf("%d ", 변수);
 ++변수;
}

- 반복문 지정시 조건식, 증감식을 잘못 작성하면 한 번도 실행이 되지 못하거나, 무한 실행이 될 수 있다.

while(true) {
 //반복 실행할 구문; -> 무한 실행
}

while(false) {
 //반복 실행할 구문; -> 0번
}

- 반복문 지정시 반복문 안에 다시 반복문을 중첩해서 지정할 수 있습니다.

for (자료형 변수1=초기값; 조건식1; 증감식1) {
 //반복 실행할 구문1;
 for (자료형 변수2=초기값; 조건식2; 증감식2) {
  //반복 실행할 구문2;
 }
}
->  while 구문 변경
자료형 변수1=초기값;
while(조건식1) {
 //반복 실행할 구문1;
 자료형 변수2=초기값;
 while(조건식2) {
  //반복 실행할 구문2;
  증감식2;
 }
 증감식1;
}

 


1부터 100까지의 수를 출력. 10 단위까지로 나눠서 출력.
바깥쪽 반복문 10번
안쪽 반복문 10, 20, 30,... 100번 -> 변수로 처리

1 2 3 4 ... 10
1 2 3 4 ...       20
1 2 3 4 ...              30

//Ex33.java
package com.test;

public class Ex33 {

 public static void main(String[] args) {
  
  //1단계.
  //1부터 10까지의 수를 출력. while 구문 이용.
  /*
  int a = 1;
  while(a<=10) {
   System.out.printf("%d ", a);
   ++a;
  }
  */
  
  //2단계.
  //1부터 b까지의 수를 출력. while 구문 이용.
  /*
  int b = 10;
  int a = 1;
  while(a<=b) {
   System.out.printf("%d ", a);
   ++a;
  }
  */
  
  //3단계.
  //변수 b의 값을 1~1까지의 수로 변화. 1씩 증가.
  //1부터 (b*10)까지의 수를 출력. while 구문 이용.
  int b = 1;
  while(b<=10) {

   int a = 1;
   while(a<=(b*10)) {
    System.out.printf("%d ", a);
    ++a;
   }
   System.out.println();
   ++b;
  }
  
  
 }

}

 

문제) 숫자 피라미드 출력. while 문 이용.
실행 예)
  1  2  3  4  5  6  7  8  9 10
  2  3  4  5  6  7  8  9 10 11
  3  4  5  6  7  8  9 10 11 12
  4  5  6  7  8  9 10 11 12 13
  5  6  7  8  9 10 11 12 13 14
  6  7  8  9 10 11 12 13 14 15
  7  8  9 10 11 12 13 14 15 16
  8  9 10 11 12 13 14 15 16 17
  9 10 11 12 13 14 15 16 17 18
 10 11 12 13 14 15 16 17 18 19

 

 

 

과제) 1부터 100까지의 수를 모두 더한 값(5050)을 출력.
10 단위마다 중간 결과값도 같이 출력합니다.
1 단위 숫자도 같이 출력합니다. (while 구문 이용)
실행 예)
1 2 3 4 5 6 7 8 9 10 => 55
1 2 3 4 ...    19 20 => 210

...

1 2 3 4 ... 98 99 100 => 5050


 for (int b=1; b<=10; ++b) {
  
  int c = 0;
  for (int a=1; a<=(b*10); ++a) {
   c += a;
   System.out.printf(" %d", a);
  }
   
  System.out.printf(" => %d %n", c);
 }


 int b=1;
 while(b<=10) {

  int c=0;
  int a=1;
  while(a<=(b*10)) {
   c += a;
   System.out.printf(" %d", a);
   ++a;
  }
  System.out.printf(" => %d %n", c);

  ++b;
 }

 


----------------------------------------------
요약

1. 반복문
- 비슷한 액션을 반복 처리하는 구문

2. for문, while문, do~while문

3. 반복횟수 지정. 변수의 값 변화.
예를 들어, 10부터 100까지의 수를 10씩 증가시키면서 변화.

for (int a=10; a<=100; a+=10) {
 //반복 실행할 구문;
}

int a=10;
while(a<=100) {
 //반복 실행할 구문;
 a+=10;
}

4. 반복문을 중첩하면 반복 실행할 구문의 실행 횟수는 반복횟수는 곱하기한 만큼 반복된다.

---------------------------------------

 

 

 

 

 


 

블로그 이미지

알 수 없는 사용자

,

------------------------------------
조건문 (if, switch)


정보처리 기사 과목 : (전자계산)알고리즘, 데이터베이스, 전산영어

정보처리 기사 실기 시험 합격 기준
- 평균 60점 이상이어야 합격
- 평균 60점 미만 불합격.

//Ex17.java
package com.test;

public class Ex17 {

 public static void main(String[] args) {
  
  /*
  정보처리 기사 과목 : (전자계산)알고리즘, 데이터베이스, 전산영어
  
  정보처리 기사 실기 시험 합격 기준
  - 평균 60점 이상이어야 합격
  - 평균 60점 미만 불합격.
  */
  
  int sub1 = 60;
  int sub2 = 80;
  int sub3 = 40;
  
  double ave = (sub1 + sub2 + sub3) / 3.0;
  
  //평균 원본 값
  System.out.println(ave);
  
  //절삭
  System.out.println(Math.floor(ave)); //소수 이하 첫 번째 자리부터
  System.out.println(Math.floor(ave*10)/10.0); //소수 이하 두 번째 자리부터
  System.out.println(Math.floor(ave*100)/100.0); //소수 이하 세 번째 자리부터
  
  //반올림
  //Math 클래스의 round() 메소드를 이용하면
  //반올림 연산을 할 수 있다.
  //반환 자료형은 long 형(정수형)이 된다.
  System.out.println(Math.round(ave));
  
  //1-> ave*10 -> 616.666
  //2-> Math.round(ave*10) -> 617
  //3-> Math.round(ave*10)/10.0 -> 61.7
  System.out.println(Math.round(ave*10)/10.0);

  //소수 이하 세 번째 자리부터
  System.out.println(Math.round(ave*100)/100.0);
  
  //합격, 불합격 판단
  long result = Math.round(ave);
  if (result >= 60) {
   System.out.printf("점수:%d -> 합격 %n", result);
  } else {
   System.out.printf("점수:%d -> 불합격 %n", result);
  }

 }

}

 

 


정보처리 기사 필기 시험 합격 기준
- 과목별 40점 이상, 평균 60점 이상이어야 합격
- 과목별 40점 미만 과락(불합격).
- 평균 60점 미만 불합격.


//Sample21.java
package com.test;

public class Sample21 {

 public static void main(String[] args) {

  /*
  정보처리 기사 과목 : (전자계산)알고리즘, 데이터베이스, 전산영어

  정보처리 기사 필기 시험 합격 기준
  - 과목별 40점 이상, 평균 60점 이상이어야 합격
  - 과목별 40점 미만 과락(불합격).
  - 평균 60점 미만 불합격.
  */
  
  int sub1 = 90;
  int sub2 = 75;
  int sub3 = 20;
  
  double ave = (sub1 + sub2 + sub3) / 3.0;
  
  long result = Math.round(ave);
  

  /*
  if (합격조건->평균60점이상, 과목별40점이상) {
   //합격
  } else {
   //불합격
   if (과락조건->평균60점이상) {
     //과락(불합격)
   } else {
    //불합격
   }
  }
  */
  System.out.printf("과목1:%d, 과목2:%d, 과목3:%d, 평균:%d %n", sub1, sub2, sub3, result);
  if (result>=60
    && sub1>=40 && sub2>=40 && sub3>=40) {
   System.out.println("->합격");
  } else {
   if (result>=60) {
    System.out.println("->불합격(과락)");
   } else {
    System.out.println("->불합격(평균60점미만)");
   }
  }
  
 }

}

 


문제) 특정 점수(0~100)가 특정 범위 안에 오는지 확인하고 범위명을 출력.


A등급 : 90~100
B등급 : 80~89
C등급 : 70~79
D등급 : 60~69
F등급 : 0~59

 

//Sample22.java
package com.test;

public class Sample22 {

 public static void main(String[] args) {

  //0~100 사이의 정수로 한정
  int score = 89;
  
  String grade = "";
  
  //if문
  if (score>=90) {
   grade = "A등급";
  } else if (score>=80) {
   grade = "B등급";
  } else if (score>=70) {
   grade = "C등급";
  } else if (score>=60) {
   grade = "D등급";
  } else {
   grade = "F등급";
  }
  
  
  System.out.printf("점수: %d, 등급: %s %n", score, grade);
  
  
 }

}

 

 

//Sample23.java
package com.test;

public class Sample23 {

 public static void main(String[] args) {

  //0~100 사이의 정수로 한정
  int score = 89;
  
  String grade = "";
  
  //if문
  if (score>=90) {
   grade = "A등급";
  }
  if (score<90 && score>=80) {
   grade = "B등급";
  }
  if (score<80 && score>=70) {
   grade = "C등급";
  }
  if (score<70 && score>=60) {
   grade = "D등급";
  }
  if (score<60) {
   grade = "F등급";
  }  
  
  
  System.out.printf("점수: %d, 등급: %s %n", score, grade);
  
  
 }

}

 

 

//Sample24.java
package com.test;

public class Sample24 {

 public static void main(String[] args) {

  //0~100 사이의 정수로 한정
  int score = 89;
  
  String grade = "";
  
  //if문
  int result = (score / 10);
  if (result==10 || result==9) {
   grade = "A등급";
  } else if (result==8) {
   grade = "B등급";
  } else if (result==7) {
   grade = "C등급";
  } else if (result==6) {
   grade = "D등급";
  } else {
   grade = "F등급";
  }
  
  
  System.out.printf("점수: %d, 등급: %s %n", score, grade);
    
  
 }

}

 

 

 


------------------------------------
2. switch문
- if문과 같은 조건식 검사 구문.
- 기본 형식

switch (식) {
case 값1:
 실행구문;
 break;
case 값2:
 실행구문;
 break;
default:
 실행구문; 
}

식의 결과값이 case 구문에 있는 값과 일치하는 경우에
case 구문을 실행합니다.

case 구문이 여러개인 경우는 첫 번째 조건을 만족하지 않는 경우
두 번째 case 구문을 검사합니다.

default 구문은 모든 case 구문이 일치하지 않는 경우에 실행됩니다.

break; 구문은 case 구문의 실행을 마치고 블럭을 나갈때 사용.


switch (식) {
case 값1:
case 값2:
 실행구문;
 break; 
default:
 실행구문; 
}

식의 결과값이 값1 이거나, 값2인 경우 실행.


특정 점수(0~100)가 특정 범위 안에 오는지 확인하고 범위명을 출력.


A등급 : 90~100
B등급 : 80~89
C등급 : 70~79
D등급 : 60~69
F등급 : 0~59

 

//Sample25.java
package com.test;

public class Sample25 {

 public static void main(String[] args) {
  
  //0~100 사이의 정수로 한정
  int score = 89;
  
  String grade = "";
  
  //if문 -> switch문 (일치하는 경우만 실행된다)
  //switch 문에서
  //case 구문은 여러개 추가 가능
  //default 구문은 생략 가능
  //break; 구문도 생략 가능
  //실행문은 최소한의 내용으로 작성할 것.
  /*
  switch(식) {
  case 값1: 실행문; break;
  case 값2: 실행문; break;
  default: 실행문; break;
  }
  */
  switch(score/10) {
  case 10:
  case 9: grade = "A등급"; break;
  case 8: grade = "B등급"; break;
  case 7: grade = "C등급"; break;
  case 6: grade = "D등급"; break;
  default: grade = "F등급"; break;
  }
  
  System.out.printf("점수: %d, 등급: %s %n", score, grade);

 }

}

 


----------------------------------------------------------
문제) 쿠폰 도장 갯수에 따른 서비스 제공
5개 -> 커피 1잔 무료 제공
10개 -> 음료 1잔 무료 제공
15개 -> 음료 2잔 무료 제공
20개 -> 전체 금액 10% 할인


----------------------------------------------------------
문제) 2+1 계산
1개 구입시->1개 가격
2개 구입시->2개 가격
3개 구입시->(2+1 적용) 2개 가격
4개 구입시->(2+1 적용) 3개 가격
5개 구입시->(2+1 적용) 4개 가격
6개 구입시->(2+1 적용) 4개 가격
...

//Sample27.java
package com.test;

public class Sample27 {

 public static void main(String[] args) {

  /*
  문제) 2+1 계산
  1개 구입시->1개 가격
  2개 구입시->2개 가격
  3개 구입시->(2+1 적용) 2개 가격
  4개 구입시->(2+1 적용) 3개 가격
  5개 구입시->(2+1 적용) 4개 가격
  6개 구입시->(2+1 적용) 4개 가격
  ...
  */
  
  int a = 11;
  String cp = "";
  int div = (a/5);

  switch(div) {
  case 1: cp = "Coffe 1잔무료"; break;
  case 2 : cp = "음료 1잔 무료 제공"; break;
  case 3 : cp = "음료 2잔 무료 제공"; break; 
  case 4 : cp = "전체 금액 10% 할인"; break;
  }
  
/*  if(a == 1) {
   cp = "Coffe 1잔 무료";
  } else if(a == 2) {
   cp = "음료 1잔 무료";
  } else if(a == 3) {
   cp = "음료 2잔 무료";
  } else {
   cp = " 전체 금액 10% 할인";
  }
  
*/  System.out.printf("할인 내용은 : %s 입니다.", cp);
 }

}

 

----------------------------------------------------------
가위, 바위, 보 게임에 대한 조건문 작성

가위를 1, 바위를 2, 보를 3로 표현한 경우
승패 규칙은 다음과 같다.

모든 경우의 수
user1  -  user2  -> 승
  1         2        2
  1         3        1
  2         1        2  (중복)
  2         3        3
  3         1        1  (중복)
  3         2        3  (중복)

중복을 제거한 경우의 수
user1  -  user2  -> 승
  1         2        2
  1         3        1
  2         3        3

승과 관련한 수학적 수식
user1    -   user2        -> 승
 1%3->1  !=  (2+1)%3->0     user2
 1%3->1  ==  (3+1)%3->1     user1
 2%3->2  !=  (3+1)%3->1     user2

 

//Sample26.java
package com.test;

public class Sample26 {

 public static void main(String[] args) {
  /*
  가위, 바위, 보 게임에 대한 조건문 작성
  가위를 1, 바위를 2, 보를 3로 표현한 경우
  */
  
  int user1 = 3;
  int user2 = 2;
  
  String s = "";
  if (user1 == user2) {
   //비긴 경우
   s = "비겼습니다.";
  } else {
   /*
   if ( (user1%3) == ((user2+1)%3) ) {
    //user1가 이긴 경우
    s = "user1이 이겼습니다.";
   } else {
    //user2가 이긴 경우
    s = "user2가 이겼습니다.";
   }
   */

   s = ((user1%3) == ((user2+1)%3))?"user1이 이겼습니다.":"user2가 이겼습니다.";

  }
  System.out.println(s);
  
  
 }

}

 

---------------------------------------
요약

1. 실수 표현->절삭, 반올림, 자릿수 지정

Math.floor()
정수 나눗셈 -> 결과가 절삭 효과

Math.round(a)
Math.round(a * 10) / 10.0

System.out.printf("%d", 정수);
System.out.printf("%f", 실수);
System.out.printf("%.1f", 실수);
System.out.printf("%s", 문자열);

2. if문
- 조건식 작성 (평균 60점 이상, 과락)
- 조건식 작성 (가위, 바위, 보 게임에 대한 수식)

2. switch문
switch(식) {
case 값1: 실행구문; break;
case 값2: 실행구문; break;
default: 실행구문;
}

switch(식) {
case 값1: case 값2: 실행구문; break;
case 값3: 실행구문; break;
default: 실행구문;
}

-------------------------------------------

 

 

 

 


 

블로그 이미지

알 수 없는 사용자

,

----------------------------------
기본자료형은 하위멤버를 가질 수 없다.

예를 들어, 정수형인 경우

int a = 10;
a.하위멤버; //X

클래스는 하위멤버를 가질 수 있다.
하위멤버 종류는 생성자, 메소드, 멤버변수 등이 있다.
클래스의 하위멤버는 접근은 클래스가 저장된 객체에서 .(dot) 연산자를 사용한다.

예를 들어, 문자열형인 경우

String str = "Hello, World";
str.하위멤버; //O


//Sample12.java
package com.test;

public class Sample12 {

 public static void main(String[] args) {
  
  //기본형은 하위멤버가 없다.
  int a = 10;
  //a.toString(); -> X
  
  //참조형(클래스)는 하위멤버가 있다.
  //하위멤버 접근은 .(dot) 연산자를 사용한다.
  String b = "TEST";
  b.toString(); //->O
  
  //참조형(클래스)는 하위멤버가 있다.
  //하위멤버 접근은 .(dot) 연산자를 사용한다.
  Integer c = 10;
  c.toString(); //-> O
  System.out.println(c.MAX_VALUE); //2147483647

 }

}

 

 


----------------------------------
형변환

1. String 클래스
- 문자열형에 해당하는 클래스 자료형
- String 변수 = "문자열";
- String 변수 = new String("문자열");
- String.format("서식문자열1, 서식문자열2, ...", 값1, 값2, ...);
- System.out.printf("서식문자열1, 서식문자열2, ...", 값1, 값2, ...);


format()
public static String format(String format,
            Object... args)
Returns a formatted string using the specified format string and arguments.

%[argument_index$][flags][width][.precision]conversion

's', 'S'  general  If the argument arg is null, then the result is "null". If arg implements Formattable, then arg.formatTo is invoked. Otherwise, the result is obtained by invoking arg.toString().

'd'  integral The result is formatted as a decimal integer


//Sample13.java
package com.test;

public class Sample13 {

 public static void main(String[] args) {
  
  //서식 지정 출력
  //서식 지정 문자열과 데이터가 서로 짝이 맞아야 한다.
  //%d -> 숫자(정수) 지정 서식
  //%n -> 줄바꿈 서식
  //%s -> 문자열 지정 서식
  //%f -> 숫자(실수) 지정 서식
  System.out.printf("%d %n", 10);
  System.out.printf("%d %d %d %n", 10, 20, 30);
  System.out.printf("a:%d, b:%d, c:%d %n", 10, 20, 30);
  System.out.printf("이름:%s, 나이:%d %n", "홍길동", 20);
  System.out.printf("%f %n", 123.456);
  System.out.printf("%.1f %n", 123.456);
  System.out.printf("%.10f %n", 123.456);


 }

}

 

 


//Sample07.java
package com.test;

public class Sample07 {

 public static void main(String[] args) {
  //형변환은
  //기본형<->기본형 또는 참조형<->참조형 간에는
  //캐스트 연산자를 이용(명시적 형변환)하고,
  //기본형<->참조형 간에는 클래스의 메소드를 이용한다.
  
  byte a = Byte.MAX_VALUE;
  int b = a + 1;  //int <- byte. 암시적 형변환
  long c = b + 1; //long <- int. 암시적 형변환
  System.out.printf("%d %d %d %n", a, b, c);
  
  //캐스트 연산
  int d = (int)c;  //int <- long. 명시적 형변환
  
  //byte 자료형이 허용하는 크기보다 큰 숫자를
  //저장하게 되므로 손실 발생.
  byte e = (byte)d; //byte <- int. 명시적 형변환
  System.out.printf("%d %d %n", d, e);
  
  String s = "10";
  //문자열과 숫자의 + 연산은 문자열 결합이 진행된다.
  System.out.printf("s:%s %n", s);
  System.out.printf("s+10:%s %n", (s+10));

  //문자열 10을 숫자 10으로 변환하는 과정 필요
  //int f = (int)s; //->X
  int f = Integer.parseInt(s); //->O
  System.out.printf("Integer.parseInt(s)+10:%d %n", (Integer.parseInt(s)+10));
  
  //숫자 10을 문자열 10으로 변환
  //String g = (String)10; //->X
  String g = String.valueOf(10); //->O
  
  
  
 }

}

 

 

 

//Ex10.java
package com.test;

public class Ex10 {

 public static void main(String[] args) {
  
  //변수 a, b, c에 들어있는 숫자들 중에서
  //가장 큰 숫자를 출력하는 과정.
  
  int a = 10;
  int b = 30;
  int c = 20;
  
  int max = ( a>b )?a:b;
  max = ( max>c )?max:c;

  int min = 가장 작은 값 얻는 과정 추가;
  
  System.out.printf("a:%d, b:%d, c:%d %n", a, b, c);
  System.out.printf("max:%d %n", max);
  System.out.printf("min:%d %n", min);

 }

}

 

 


2. Wrapper 클래스
- 기본형 자료형에 대한 참조형(클래스) 표현.
- boolean -> Boolean
- char -> Character
- byte -> Byte
- short -> Short
- int -> Integer
- long -> Long
- float -> Float
- double -> Double
- 기본형 자료형과 Wrapper 클래스 간에는 auto Boxing(기본형->Wrapper), auto UnBoxing(Wrapper->기본 자료형) 지원.


int a = 10;
a.하위멤버; //X

Integer a = new Integer(10);
a.하위멤버; //O

int e = c;  //Integer -> int (암시적 형변환, Auto UnBoxing)
System.out.println(e);
Integer f = e;  //int -> Integer (암시적 형변환, Auto Boxing)
System.out.println(f);


//Sample16.java
package com.test;

public class Sample16 {

 public static void main(String[] args) {
  
  //기본형 int 자료형 변수 선언 및 자료 저장.
  int a = 10;
  //a.toString(); //X
  
  //클래스(참조형) Integer 자료형 변수 선언 및 자료 저장.
  Integer b = new Integer(10);
  b.toString(); //O
  System.out.println(Integer.toBinaryString(255));
  System.out.println(Integer.toHexString(255));

  //Wrapper 클래스와 기본형 간에는
  //자동 형변환 지원
  int c = b;  //Integer -> int
  Integer d = c; //int -> Integer
  

 }

}

 


3. 여러가지 자료형을 다른 형으로 변환할 수 있다.
- 형변환은 원칙적으로 기본형끼리, 또는 참조형끼리만 변환이 가능하다. 캐스트 연산자 사용.

- 기본형과 기본형 간의 변환
byte 변수 = (int)값;

- 참조형과 참조형 간의 변환
Integer.valueOf(String 자료형); //-> Integer 자료형

- 기본형과 참조형 간의 변환
String.valueOf(기본형자료); //-> String 자료형
Integer.valueOf(int 자료형); //-> Integer 자료형
Integer.parseInt(String 자료형); //-> int 자료형

- 기본형 범위 내에서 정수형과 정수형의 변환
- 기본형 범위 내에서 실수형과 실수형의 변환
- 기본형 범위 내에서 실수형과 정수형의 변환
- 기본형 범위 내에서 정수형과 문자형의 변환
- 기본형 범위 내에서 정수형과 논리형의 변환
- 문자열형과 문자형의 변환
- 문자열형과 정수형의 변환
- 문자열형과 실수형의 변환
- 문자열형과 논리형의 변환


//Sample17.java
package com.test;

public class Sample17 {

 public static void main(String[] args) {

  //기본형과 기본형 간의 변환
  int a1 = 10;
  byte b1 = (byte)a1;  //int -> byte
  System.out.println(b1);
  
  //참조형과 참조형 간의 변환
  Integer a2 = new Integer(10);
  String b2 = a2.toString(); //Integer -> String
  System.out.println(b2);
  
  //기본형과 참조형 간의 변환
  int a3 = 10;
  String b3 = String.valueOf(a3); //int -> String
  System.out.println(b3);
  
  //기본형 범위 내에서 실수형과 실수형의 변환
  float a5 = 1.234F;
  double b5 = (float)a5;  //float -> double
  System.out.println(b5);
  
  //기본형 범위 내에서 실수형과 정수형의 변환
  double a6 = 1.234;
  int b6 = (int)a6; //double -> int (손실 발생 가능)
  System.out.println(b6);
  
  //기본형 범위 내에서 정수형과 문자형의 변환
  //문자마다 고유한 번호가 지정되어 있다.
  //->ASCII (48->0, 65->A, 97->a)
  int a7 = 65;
  char b7 = (char)a7; //int -> char
  System.out.println(b7);  //A
  
  //기본형 범위 내에서 정수형과 논리형의 변환
  int a8 = 10;
  //boolean b8 = (boolean)a8;  //X
  boolean b8 = Boolean.parseBoolean(String.valueOf(a8)); //int -> String -> boolean
  System.out.println(b8);  
  
  //문자열형과 문자형의 변환
  String a9 = "Hello!";
  //charAt(인덱스). 인덱스는 0부터 출발.
  char b9 = a9.charAt(0); //String -> char
  System.out.println(b9);
  
  //문자열형과 정수형의 변환
  String a10 = "Hello!";
  int b10 = (int)a10.charAt(0); //String -> char -> int
  System.out.println(b10);  
  
  //문자열형과 실수형의 변환
  String a11 = "1.234";
  double b11 = Double.parseDouble(a11); //String -> double
  System.out.println(b11);
  
  //문자열형과 논리형의 변환
  String a12 = "true";
  boolean b12 = Boolean.parseBoolean(a12); //String -> boolean
  System.out.println(b12);  
  
 }

}

 


------------------------------------
조건문 (if, switch)

1. if문
- 참, 거짓을 판단하는 조건식의 결과에 따라서 다른 실행 블록을 실행하도록 만들어진 문장.
- 기본형식

if (조건식) {
 //조건식의 결과가 참일 때 실행
}

if (조건식) {
 //조건식의 결과가 참일 때 실행
} else {
 //조건식의 결과가 거짓일 때 실행
}

if (조건식1) {
 //조건식1의 결과가 참일 때 실행
} else if (조건식2) {
 //조건식1 거짓이고, 조건식2 참일 때 실행
} else {
 //조건식1 거짓이고, 조건식2 거짓일 때 실행
}


문제)
if (조건식1) {
 if (조건식2) {
  //
 } else {
  //
 }
} else {
 if (조건식3) {
  //
 } else {
  //
 }
}


- 조건식은 관계(>, <, >=, <=, ==, !=), 논리(&&-AND, ||-OR, !-NOT)
 연산자를 이용해서 참, 거짓 결과가 나오도록 만들어야 합니다.
- 조건식에 참, 거짓 결과를 돌려주는 표현이면 연산자 없이도 가능.
- if문을 사용할 수 없는 영역에는 삼항(조건) 연산자를 사용합니다.

 

//Sample18.java
package com.test;

public class Sample18 {

 public static void main(String[] args) {
  
  int a = 4;
  
  System.out.printf("%d -> %s %n"
    , a, (a%2 == 0)?"짝수":"홀수" );
  
  /*
  if (조건) {
   참일때 실행할 문장;
  } else {
   거짓일때 실행할 문장;
  }
  */
  if (a%2 == 0) {
   System.out.println("짝수");
  } else {
   System.out.println("홀수");
  }
  

 }

}

 


//Ex14.java
package com.sist;

public class Ex14 {

 public static void main(String[] args) {
  
  //특정 수가 3의 배수인지 검사
  int a = 12;
  
  // 변수 a의 값이 3의 배수인지 확인
  if ( (a % 3) == 0 ) {
   System.out.printf("%d는 3의 배수입니다.", a);
  } else {
   System.out.printf("%d는 3의 배수가 아닙니다.", a);
  }

 }

}

 


//Sample19.java
package com.test;

public class Sample19 {

 public static void main(String[] args) {

  //특정 수가 3의 배수이거나, 4의 배수인 경우를 출력하되,
  //3과 4의 배수 -> 12, 24, ...
  //3의 배수 -> 3, 6, 9, 12(3과 4의 배수로 출력)
  //4의 배수 -> 4, 8, 12(3과 4의 배수로 출력), ...
  //3과 4의 배수가 아닌 경우 -> 1, 2, 5, 7, ....
  //로 나눠서 출력
  
  int a = 24;
  
  //if ( ((a%3)==0) && ((a%4)==0) ) {
  if ( a%(3*4) == 0 ) {
   //3과 4의 배수
   System.out.println("3과 4의 배수");
  } else if ( (a % 3) == 0 ) {
   //3의 배수
   System.out.println("3의 배수");
  } else if ( (a % 4) == 0 ) {
   //4의 배수
   System.out.println("4의 배수");
  } else {
   //3과 4의 배수가 아닌 경우
   System.out.println("3과 4의 배수가 아닌 경우");
  }
  
 }

}

 

//Ex16.java
package com.sist;

public class Ex16 {

 public static void main(String[] args) {

  //특정 숫자가 특정 범위에 속하는지 검사
  
  //65 -> A, 97 -> a, 48 -> 0
  //대문자 ASCII 코드 + 32 => 소문자 ASCII
  //소문자 ASCII 코드 - 32 => 대문자 ASCII
  //A(65) ~ Z(96) 범위에 속하는지 검사
  
  //HELLO! -> hello!
  String str = "HELLO!";
  
  //반복문
  for (int i=0; i<=5; i++) {
  
   int temp = (int)str.charAt(i); //index 0~5
   char c1 = 'a';
   if ( temp>=65 && temp<=96  ) {
    c1 = (char)(temp + 32);
   } else {
    c1 = (char)temp;
   }
   System.out.print(c1);

  }

 }

}

 

-------------------------------------------
요약

1. 형변환
- 암시적, 명시적
- 캐스트 연산자
- 참조형과 기본형 간의 변환

2. if문
- 조건식 작성
- 산술, 관계, 논리 연산자 우선순위

 

 

 

 

 

블로그 이미지

알 수 없는 사용자

,

----------------------------
연산자

1. 단항, 산술, 비교, 논리, 삼항(조건),  대입

2. 단항, 이항, 삼항 - 피연산자(operand), 연산자(operator)

3. 단항 연산자 - ++, --, 전위형, 후위형

//Sample05.java
package com.test;

public class Sample05 {

 public static void main(String[] args) {

  /* 단항 연산자 -> ++, -- */
  
  int a = 10;
  ++a;
  System.out.println(a);
  System.out.println(++a);
  System.out.println(--a);
  
 }

}


4. 산술 연산자
- +, -, *(곱하기), /(나누기), %(나머지)
- 산술 연산은 int형으로 연산 실행.
- 정수 나누기 정수는 정수 결과
- 정수(실수) 나누기 실수는 실수 결과
- 나머지 연산은 배수(홀,짝 포함) 확인할 때 많이 사용

//Sample06.java
package com.test;

public class Sample06 {

 public static void main(String[] args) {

  /* 산술연산 -> +, -, *, /, % */
  /*
  정수 / 정수는 결과가 정수(몫)가 된다.
  정수 / 실수는 결과가 실수가 된다.
  실수 표현은 접미사 d 또는 소수 이하 자리 지정.
  */
  
  int a = 10;
  int b = 20;
  
  /* 실수 표현 방법 */
  double c = 10d;
  double d = 20.0;
  
  System.out.println(a + b);
  System.out.println(a - b);
  System.out.println(a * b);
  
  System.out.println( a / b ); //0
  System.out.println( b / a ); //2
  System.out.println( c / d ); //0.5
  
  //캐스트 연산자를 이용한 형변환
  System.out.println( a / (double)b ); //0.5
  
  
 }

}

 

 

 


5. 형변환
- 특정 자료형을 다른 자료형으로 변환시키는 명령
- 암시적, 명시적 변환
- 암시적 변환은 작은 자료형을 큰 자료형의 변수에 저장할 때 자동으로 형변환 되는 상태.
- 명시적 변환은 큰 자료형을 작은 자료형의 변수에 저장할 때
캐스트 연산자( (자료형)변수 )를 이용해서 형변환 하는 상태.

//Sample07.java
package com.test;

public class Sample07 {

 public static void main(String[] args) {

  /* 암시적 형변환 */
  
  byte a = 127;
  System.out.println(a);
  
  int b = a + 1; // int <- byte
  System.out.println(b);
  
  /* 명시적 형변환 -> 캐스트 연산자, 손실 발생 가능 */
  
  byte c = (byte)b; // byte <- int
  System.out.println(c);
  
  
 }

}

 


//Sample05.java
package com.test;

public class Sample05 {

 public static void main(String[] args) {

  //암시적 형변환인 경우
  byte a = 10;
  System.out.println(a);

  // byte 변수의 값을 int 변수에 복사
  // 서로 다른 자료형은 같은 자료형이 되도록 해야 한다.
  // 경우에 따라서 자동으로 형변환이 진행되는 경우도 있다.
  // -> 암시적 형변환
  int b = a;
  System.out.println(b);
  
  
  //명시적 형변환인 경우
  //byte c = b;   //불가
  b += 127;
  byte c = (byte)b; //가능 (손실 발생 가능)
  System.out.println(c);
  
 
 }

}

 

 

6. 비교, 논리, 삼항(조건) 연산자
- 비교 연산자 : >, <, <=, >=, ==(equal), !=(not equal)
- 논리 연산자 : &&(AND, 논리곱), ||(OR, 논리합), !(NOT)
- 삼항(조건) 연산자 : (조건) ? 결과1 : 결과2
- 삼항 연산자에서 조건은 결과가 true, false가 나오는 식.
- 삼항 연산자에서 조건의 결과가 true이면 결과1 반환
- 삼항 연산자에서 조건의 결과가 false이면 결과2 반환


//Sample08.java
package com.test;

public class Sample08 {

 public static void main(String[] args) {
  
  int a = 20;
  int b = 30;
  int c = 10;
  
  System.out.printf("a : %d %n",a);
  System.out.printf("b : %d %n",b);
  System.out.printf("c : %d %n",c);
  
  System.out.println( a > b );  //false
  System.out.println( a <= b );  //true
  System.out.println( a>b && a>c ); //false
  System.out.println( a>b || a>c ); //true
  
  System.out.println( (a>b)?"a가 b보다 크다":"a가 b보다 작거나 같다" );
  System.out.println( (a>=b)?"a가 b보다 크거나 같다":"a가 b보다 작다" );

 }

}

 

//Ex06.java
package com.sist;

public class Ex06 {

 public static void main(String[] args) {
  
  int a = 15;
  int b = 20;
  int c = 10;
  
  //문제) 메시지 출력 구문 완성할 것.
  //예) a는 b 와(또는) c에 대해서 ... 이다.
  System.out.println( (a>b && a>c) ? "a는 b와 c에 대해서 모두 크다" : "  " );
  System.out.println( (a>b || a>c) ? "a는 b 또는 c에 대해서 크다" : "  " );
  System.out.println( (a<b && a<c) ? "  " : "  " );
  System.out.println( (a<b || a<c) ? "  " : "  " );
  System.out.println( (a==b && a==c) ? "  " : "  " );
  System.out.println( (a==b || a==c) ? "  " : "  " );
  System.out.println( (a!=b && a!=c) ? "  " : "  " );
  System.out.println( (a!=b || a!=c) ? "  " : "  " );
  
 }

}

 

7. 대입 연산자
- 연산자 오른쪽의 내용(결과값)을 왼쪽의 변수에 저장
- 변수 = 식 (또는 결과값);
- =, +=, -=, *=, /=, %=


//Sample09.java
package com.test;

public class Sample09 {

 public static void main(String[] args) {

  int a = 10;
  System.out.println(a);
  
  a = a + 10;
  System.out.println(a);
  
  a += 10;
  System.out.println(a);

  /*
  실행 순서
  - 연산 -> 1번
  = 연산 -> 2번
  println() -> 3번
  */
  System.out.println(a -= 10);
  System.out.println(a /= 10);
  System.out.println(a %= 10);  
  
 }

}

 

 

//Sample10.java
package com.test;

public class Sample10 {

 public static void main(String[] args) {
  
  int a = 7;
  int b = 4;
  System.out.println(a + b);  //11
  System.out.println(a / b);  //1 (몫)
  System.out.println(a % b);  //3 (나머지)

  System.out.println(a / (double)b);  //실수 결과
  
  a = a + 1;
  System.out.println(a);
  ++a;
  System.out.println(a);
  a = a + 2;
  System.out.println(a);
  a += 2;
  System.out.println(a);
  
  System.out.println( (a>b)?"a는 b보다 크다":"a는 b보다 작다"  );
  
  //변수 a의 값은 짝수인가? 홀수인가?
  System.out.println( ( a%2 == 0 )?"a는 짝수":"a는 홀수"  );
  
  
 }

}

 

 

 


----------------------------------
문제) 거스름돈 계산.
1000원 이하의 거스름돈을 가지고
500원, 100원, 50원, 10원 단위로 분류해서 갯수 출력.
예를 들어, 900원인 경우 500원 1개, 100원 4개, 50원 0개, 10원 0개.

//Sample11.java
package com.test;

public class Sample11 {

 public static void main(String[] args) {

  int a = 830;
  
  //몫과 나머지 연산
  //500원 개수->?
  //100원 개수->?
  //50원 개수->?
  //10원 개수->?
  System.out.println("거스름돈 총액 -> ");
  System.out.println(a);
  
  System.out.println("500원의 개수->");
  System.out.println( a/500 );
  a %= 500;
  System.out.println("100원의 개수->");
  System.out.println( a/100 );
  a %= 100;
  System.out.println("50원의 개수->");
  System.out.println( a/50 );
  a %= 50;
  System.out.println("10원의 개수->");
  System.out.println( a/10 );

 }

}

 

 

문제) 임의의 양의 정수가 들어 있는 3개의 변수 값을 비교해서 3개 중에서 가장 큰 값이 들어있는 변수의 값 출력.
예를 들어, a=10, b=20, c=30인 경우 30 출력.

//Sample12.java

 

 

추가문제) 임의의 양의 정수가 들어 있는 변수의 값이 특정 수
(짝수, 홀수, 3의 배수)의 배수인지 출력.
예를 들어, a=10인 경우 '짝수' 출력.

//Sample13.java

 

package com.test;

public class work4 {
 public static void main(String ar[]) {
  /*추가문제) 임의의 양의 정수가 들어 있는 변수의 값이 특정 수
  (짝수, 홀수, 3의 배수)의 배수인지 출력.
  예를 들어, a=10인 경우 '짝수' 출력.*/
  
  int a = 0;
  String str = " ", str1 = " ";
  str = (a % 2 ==  0) ? "짝수" : "홀수";
  str1 = (a % 3 == 0) ? "3의배수" : "";
  System.out.printf("%s %s 이다.", str, str1);
  
 }
}

 


-----------------------------------
요약

1. 연산자
- 단항, 이항, 삼항
- 단항 : ++, --
- 이항 : 산술(+, -, *, /, %), 비교(>, <, >=, <=, ==, !=) 논리 (&&, !!)
- 삼항 : 삼항(조건)   (조건식)?결과1:결과2
- 대입연산자 (=, +=, -= *=, /=, %=)

2. 형변환
- 암시적 : 자동 변환
- 명시적 : 강제 변환. 캐스트 연산자 (자료형)값
나눗셈 연산시 실수 결과를 얻으려면 실수 연산이 되어야 한다.
정수 / 정수 인 경우는 한 쪽을 실수로 변환해야 한다.
정수 / (double)정수 형태로 표기

---------------------------------------------

 

 

 

 

 

 

 

 

블로그 이미지

알 수 없는 사용자

,

-----------------------------------
이클립스 다운로드 및 설치

1. http://www.eclipse.org
2. Eclipse IDE for Java EE Developers, 259 MB, Win32Bit
eclipse-jee-luna-R-win32.zip

-----------------------------------
이클립스 실행 및 설정

1. workspace 설정
- 소스 코드 저장소 선택
2. Java Project 생성
- Java SE 전용
3. Project 생성 후에는 src 폴더에서 패키지 생성
- com.test -> 논리적 소속 표기
4. 패키지에서 class 생성
- class 이름은 첫 글자를 대문자로 표기
- Java 프로그램의 논리적 단위
- Java 프로그램은 class 집합체이다.
- class 생성시 public static void main(String[] args) 옵션 체크
- 물리적 저장시 클래스이름.java 파일로 생성됩니다.
- Java 프로그램은 논리적 클래스이름과 물리적 파일이름이 일치해야 합니다.
5. 자동 생성된 소스 코드 구조


--> Sample01.java
/* 패키지는 클래스의 논리적 집합체 */
/* package 패키지이름; */
package com.test;

/* 클래스 작성시 이름의 첫 글자는 대문자로 표기 */
/*
public class 클래스이름 {
 
}
*/
public  class Sample01 {
 
 /* main() 메소드가 있어야 단독 실행 가능한 클래스 */
 public static void main(String[] args) {
  System.out.println("Hello, Java World!");
 }

}

 


6. 주석 표기(프로그램 언어마다 표기법이 다르다)는 주석 내용을 블럭 지정하고 나서 Ctrl+Shift+/ 사용.
주석은 독립적인 문장으로 작성합니다.
7. 자바 프로그램 실행 단축키 Ctrl + F11

 

//Sample01.java
package com.test;

public class Sample01 {

 public static void main(String[] args) {
  
  System.out.println("Hello, World!");
  /*System.out.println("Hello, World!");*/
  
  /* 저장 -> Ctrl + S */
  
  /* 주석표기 -> Ctrl + Shift + /  */
  
  /* 컴파일 및 실행 -> Ctrl + F11 */
  
  /*
  syso
  ->Ctrl + SpaceBar
  ->System.out.println();
  */
  
  
 }

}

 

 

 

-------------------------------------
자바프로그램의 기본 구조

1. 자바프로그램 = 사용자 작성 클래스 + JAVA API에 속한 클래스
2. class > package > .jar파일 > JDK
3. class 내부에는 여러가지 멤버(생성자, 메소드, 멤버변수,...)를 구성할 수 있습니다.
4. 대표적인 클래스의 멤버로서 main() 메소드는 프로그램의 독립적인 실행을 위한 기본적인 구성 요소입니다.

5. 기본 구조
package com.sist;

/*자바의 기본 구성 요소로서 class를 만들어야 합니다.*/
/*클래스이름은 첫 글자를 대문자로 표기해야 합니다.*/
/*물리적 파일이름과 클래스 이름은 일치해야 합니다.*/
public class Hello {

 /*main() 메소드는 프로그램 독립적인 실행을 위한
 기본 구성 요소.*/
 public static  void main(String[] args) {
  System.out.println("Hello, World!");
 }

}

 

----------------------------------------
자료형

1. 기본 자료형, 참조형을 구분

2. 기본 자료형은 논리형, 문자형, 숫자형(정수, 실수) 으로 구분. 기본 자료형은 메모리에 자료형에 따른 크기의 공간을 할당 받고, 그 안에 데이터를 적재하게 됩니다.

3. 논리형 boolean (true, false)
4. 문자형 char (작은따옴표 표기)
5. 정수형 byte, short, int(기본, 4byte, 2147483647), long
6. 실수형 float, double(기본)

7. 문자열(String)은 참조형이지만 자주 사용되므로 기본형처럼 사용합니다. 큰따옴표로 표기.

8. 특정 자료형을 가진 메모리의 저장소(변수)에 데이터를 저장하는 액션은 대입문을 사용합니다.

자료형  변수명  =  데이터;

자료형은 기본자료형 중에 하나를 선택할 수 있습니다.
변수명은 변수명 작성규칙에 맞게 작성합니다.
 = 기호는 대입 액션을 실행하는 연산자입니다.
데이터는 자료형에 맞는 적절한 데이터를 선택해야 합니다.

실행예)
 char c = 'A';
 int a = 10;
 double b = 123.45;
 String str = "Hello, World";

9. 문자형은 ASCII 코드를 사용해서 표현합니다. 크기는 2byte. 유니코드 사용.
숫자 0 48, 영문대문자 A 65, 영문소문자 a 97

10. 자바의 예약어
package, class, public, static, void ...

 


//Sample02.java
package com.test;

public class Sample02 {

 public static void main(String[] args) {
  
  int i;  //1. 변수 선언
  i = 10; //2. 데이터 저장
  
  i = 100000000;  //정상 범위
  i = 10000000000;  //비정상 범위
  
  System.out.println(i); //3. 출력

 }

}

 

//Sample03.java
package com.test;

public class Sample03 {

 public static void main(String[] args) {
  // 자료형  변수명 = 데이터;
  
  //정상적인 저장이 되는 경우
  //1. 변수명의 자료형과 데이터의 자료형이 일치하는 경우
  //2. 데이터의 범위보다 변수의 범위가 큰 경우
  //3. 데이터와 변수명의 자료형이 틀려도 호환이 되는 경우

  //정수형
  int a = Integer.MAX_VALUE;  //2147483647
  System.out.println(a);
  byte b = Byte.MAX_VALUE;
  System.out.println(b);
  short c = Short.MAX_VALUE;
  System.out.println(c);
  long d = Long.MAX_VALUE;
  System.out.println(d);
  
  //실수형
  double e = Double.MAX_VALUE;
  System.out.println(e);
  
  //문자형
  char f = 'A';
  System.out.println(f);
  
  //논리형
  boolean g = true;
  System.out.println(g);
  
  //문자열형 (문자열 갯수에 제한이 없다-> 참조형)
  String h = "Hello, world!";
  System.out.println(h);
  
  //데이터(100) 범위<변수(21억)의 범위
  int i = 100;
  System.out.println(i);
  
  //데이터 자료형 != 변수 자료형 => 형변환 작동
  double j = 100;
  System.out.println(j); //100.0
  //int k = 100.0;

 }

}

 

 

------------------------------------------------
요약

1. 이클립스 다운로드 및 설치, 설정
2. 자바 프로그램의 기본 구조(논리적). 클래스.
3. 클래스의 기본 멤버. main() 메소드.
4. 자료형 - 기본형, 참조형

--------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 


 

'JavaSE' 카테고리의 다른 글

06일차_반복문(for, while문)  (0) 2015.06.21
05일차_제어문if문, 제어문switch문  (1) 2015.06.21
04일차_형변환, 제어문if문  (0) 2015.06.21
03일차_연산자, 형변환  (0) 2015.06.21
01일차_JAVA 개요, 개발환경 구축  (1) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

------------------------------------------
프로그램 환경

1. 콘솔 기반 - C/C++

2. 윈도우 기반 - VC++, VB, Delphy

3. 웹 기반 - Java(Servlet, JSP), C#(ASP.NET)

4. 모바일 기반 - 스마트폰


-----------------------------------------
JAVA

1. 객체 지향 프로그래밍 언어

2. 제임스 고슬링

3. Java API - 레고 블럭

-----------------------------------------
JVM (Java Virtual Machine)

1. 운영체제 별로 실행 환경이 서로 다른데, 그것을 동일하게 만들어주는 프로그램.

2. JAVA만을 위한 전용 실행 환경.

3. 환경에 따라서 적당한 JVM 설치 필요.

----------------------------------------
JDK(Java Development Kit)

1. JVM + Java API + Compiler(Javac)

2. http://www.oracle.com
Windows x86 (32비트 버전)
127 MB
jdk-7u75-windows-i586.exe

3. 폴더 체크
C:\Program Files(86)\Java\jdk1.7.0_75
C:\Program Files(86)\Java\jre7

4. bin 디렉토리에 대한 path 추가.
C:\Program Files(86)\Java\jdk1.7.0_75\bin


5. 주요 실행 프로그램
javac - 컴파일러
java - 실행 프로그램

6. Java API
http://docs.oracle.com/javase/7/docs/api

package -> class -> 상속구조, 설명, 멤버 구성

7. 개발 도구 선택
메모장(, editplus, NetBeans), Eclipse


---------------------------------------------
Hello, World! 출력하는 프로그램 작성 (메모장)

1. 탐색기에서 특정 폴더에 Hello.java 라는 파일 생성.

2. Hello.java 파일을 메모장으로 열기.

3. 소스 코딩 및 저장.
class Hello
{
 public static void main(String[] args)
 {
  System.out.println("Hello, world!");
 }
}

4. 컴파일(javac) 및 실행(java)
prompt>javac Hello.java

.java -> .class

prompt>java Hello

.class -> 메모리에 로딩 및 실행(JVM)

5. 결과 출력.
Hello, world!


----------------------------------
요약

1. Java - 객체 지향 프로그래밍 언어의 한 종류
2. JDK - JVM + Java API + Compiler(javac)
3. .java 코드 작성 -> .class 파일 생성 -> 실행

---------------------------------

 

 

 

 

 

 

 

 

 

 

 


 

블로그 이미지

알 수 없는 사용자

,