JavaSE

04일차_형변환, 제어문if문

알 수 없는 사용자 2015. 6. 21. 07:12

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

예를 들어, 정수형인 경우

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문
- 조건식 작성
- 산술, 관계, 논리 연산자 우선순위