public class Test008 { public static void main( String[] args ) { System.out.println( 10.0 + 10.0 ); // 20.0 System.out.println( 10 + 10 ); System.out.println( 10.0 / 3.0 ); // 3.33xxx..5 System.out.println( 10 / 3 ); // 3 } }
자바에서 실수의 대표는 double 이고, 정수의 대표는 int.
double + double = double
int + int = int
10.0 / 3.0 == 3.333333 ???
위의 결과는 true 가 나올수도 false 가 나올수도 있다.
왜냐?
실수형 변수는 정확한 값이 아니라 "컴퓨터가 표현 가능한 최고 근사치" 를 표현한다. 자료형은 크기가 정해져있어 저장될 수 있는 값이 유한하다. 때문에 실수를 계산할때는 정확한 결과를 기대하기는 어렵다.
"컴퓨터는 기본적으로 같은 타입의 자료형끼리 연산한다." ( ALU )
int * int = int
int - int = int
double / double = double
public class Test009 { public static void main( String[] args ) { System.out.println( 10 + 10.0 ); //20.0 System.out.println( 10.0 + 10 ); //20.0 System.out.println( 10 + (int)10.0 ); //20 } }
008번 코드의 설명에서 기본적으로 같은 타입의 자료형끼리 연산한다고 했는데 자료형이 다를 경우 크기가 작은쪽의 자료형(int)이 큰 쪽의 자료형(double)으로 자동 형변환 되어 동작된다.
int + double => double + double = double
public class Test010{ public static void main( String[] args){ for(int i = 0; i < 5; i++){ System.out.println( i ); } // for( int j = 0; j < 3; j++){ for( int k = 0; k < 2; k++){ System.out.println("Helloworld"); } } } }
[1] 구역에서 i라는 변수를 선언한다.
[2] 구역에서 조건을 검사하고 참이면 [4] 로 이동한다.
[4] 구역에서의 코드를 수행하고
[3] 구역으로 이동해 i 를 증감시키고 다시 [2] 구역으로 이동해 조건을 검사한다.
[1] - [2] - [4] - [3] - [2] - [4] - [3] ... 을 반복하다가
[2] 구역에서의 조건이 거짓이 되면 반복문을 종료한다.
// 별찍기 public class Test011 { public static void main( String[] args ) { int len = 4; for( int i = 0 ; i < len ; i++ ) { for( int j = 0; j < (i+1) ; j++ ) { System.out.print("*"); } System.out.println(""); } for( int i = 0 ; i < (len-1) ; i++ ) { for( int j = 0; j < (len-1-i) ; j++ ) { System.out.print("*"); } System.out.println(""); } } }