본문 바로가기

Java/예제로 공부하는 Java 100 문제풀이

[예제로 공부하는 Java 100 문제풀이 Part.1] 섹션2 - 자료형, 연산자

1. 데이터 타입, 자료형, type

 

1) 자바의 데이터타입(자료형)에 대해서 각 타입의 사이즈와 함께 설명

 

(1) 크게 봤을 때 기본형 타입과 참조형 타입으로 분류

(2) 기본형 타입(Primitive Data Type) 8개

- 정수형: byte(1byte), short(2), int(4), long(8)

- 실수형: float(4), double(8)

- 문자형: char(2byte). 문자 1개. 참고로 문자열을 다루는 타입은 없다.

- 불린형: boolean(1byte). true or false.

(3) 참조형 타입(Reference Data Type)

- 위 기본형에 속하지 않는 데이터형들.

- 클래스(class), 배열(array), 인터페이스(interface), 문자열(String/immutable)

- 참조형 변수의 특징: 데이터가 저장된 메모리의 주소값을 저장하는 변수이다.

 

 

2. primitive type, 기본형, 바이트, 비트

 

1) Primitive Data Type의 바이트 크기와 비트 크기를 출력하는 코드 구현(정수형, 문자형만/최댓값, 최솟값도 출력)

 

public class Java100_variable_003{
    public static void main(String[] args){		
        System.out.println("-------------------정수형-------------------");
        System.out.println("byte: "+Byte.BYTES+"바이트"+" --> "+Byte.SIZE+"비트");	
        System.out.println("최솟값: " + Byte.MIN_VALUE);
        System.out.println("최댓값: " + Byte.MAX_VALUE);

        System.out.println("short: "+Short.BYTES+"바이트"+" --> "+Short.SIZE+"비트");	
        System.out.println("최솟값: " + Short.MIN_VALUE);
        System.out.println("최댓값: " + Short.MAX_VALUE);

        System.out.println("int: "+Integer.BYTES+"바이트"+" --> "+Integer.SIZE+"비트");	
        System.out.println("최솟값: " + Integer.MIN_VALUE);
        System.out.println("최댓값: " + Integer.MAX_VALUE);

        System.out.println("long: "+Long.BYTES+"바이트"+" --> "+Long.SIZE+"비트");	
        System.out.println("최솟값: " + Long.MIN_VALUE);
        System.out.println("최댓값: " + Long.MAX_VALUE);
		
        System.out.println();
        System.out.println("-------------------문자형------------------");
        System.out.println("char: "+Character.BYTES+"바이트"+" --> "+Character.SIZE+"비트");	
        System.out.println("최솟값: " + (int)Character.MIN_VALUE);
        System.out.println("최댓값: " + (int)Character.MAX_VALUE);
    }
}

 

-------------------정수형-------------------
byte: 1바이트 --> 8비트
최솟값: -128
최댓값: 127
short: 2바이트 --> 16비트
최솟값: -32768
최댓값: 32767
int: 4바이트 --> 32비트
최솟값: -2147483648
최댓값: 2147483647
long: 8바이트 --> 64비트
최솟값: -9223372036854775808
최댓값: 9223372036854775807

-------------------문자형------------------
char: 2바이트 --> 16비트
최솟값: 0
최댓값: 65535

 

(1) 함수

- 데이터타입.BYTES: 바이트 크기 계산

- 데이터타입.SIZE: 비트 크기 계산

- 데이터타입.MIN_VALUE: 최솟값

- 데이터타입.MAX_VALUE: 최댓값

(2) 여기서 int는 Integer, char는 Character로 표기해야 함.

(3) short와 char는 2바이트로 크기는 같으나 char는 숫자가 아닌 문자형이기 때문에 음수가 될 수 없음 -> 0~65535

 

 

3. 정수, 실수, 문자형, 변수

 

1) 정수, 실수, 문자형 타입의 변수 사용에서 틀린 곳을 찾아서 모두 수정하시오.

 

//문제
public class Java100_variable_DataType1{
    public static void main(String[] args){
        int a;
        int b; int c = 90;
        double d;
        char e;
           
        a = 10;
        d = 10;
        e = "A";
         
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

 

//풀이
public class Java100_variable_DataType1{
    public static void main(String[] args){
        int a;
        int b; int c = 90;
        double d;
        char e;
           
        a = 10;
        b = 20;
        d = 10.0;
        e = 'A';
         
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

 

(1) 변수 선언

int a;  //정수가 저장될 변수 이름을 a로 만들어라

int b; int c = 90;

double d;  //실수가 저장될 변수 이름을 d로 만들어라

char e;  //문자가 저장될 변수 이름을 e로 만들어라

(2) 선언된 변수에 값을 대입

a = 10;

d = 10;  //정수 10을 입력하면 10.0으로 출력

e="A";  //쌍따옴표하면 에러

(3) 출력

System.out.println(a); //10
System.out.println(b); //Err -> b=20; 초기화 필요
System.out.println(c);  //90
System.out.println(d); //10.0
System.out.println(e); //Err  -> 'A'로 바꾸면 A 출력

(4) 여러 개 변수 선언 및 초기화 -> 선언 후 값을 세팅

public class Java100_variable_DataType1{
    public static void main(String[] args){
        int x,y,z=900;
        // System.out.println(x);
        // System.out.println(y);
        System.out.println(z);
        //z만 초기화 되고 x,y는 초기화 안됨.
        
        //각각 초기화
        int x1,y1,z1;
        x1 = 700;
        y1 = 800;
        z1 = 900;
        System.out.println(x1+","+ y1 + "," + z1);
		
        //한꺼번에 초기화
        int x2=700,y2=800,z2=900;
        System.out.println(x1+","+ y1 + "," + z1);
		
        //문자형 같은 값으로 한꺼번에 초기화
        String str1, str2, str3;
        str1 = str2 = str3 = "korea";
        System.out.println(str1 + "," + str2 + "," + str3);
		
        //정수형 같은 값으로 한꺼번에 초기화
        int i, j, k;
        i = j = k = 100;
        System.out.println(i + "," + j + "," + k);
    }
}

(5) 결론

- 선언했으면 초기화하기(최초 값 할당)

- 자료형에 맞춰 값 설정

- 문자 하나는 작은따옴표로 감싸기

 

 

4. 기본형, 타입, 초기화

 

1) 기본형 타입의 값을 초기화한 아래의 코드에서 틀린 곳을 찾아 수정하시오.

 

//문제
public class Java100_variable_DataType2{
    public static void main(String[] args){

        byte b = 100;
        short s = 30000;
        int i = 2100000000;
        long l = 7000000000;
        float f = 9.8;
        double d = 3.14;
        char c = 'A';
        boolean bl = false;	
    }
}

 

//풀이
public class Java100_variable_DataType2{
    public static void main(String[] args){

        byte b = 100;
        short s = 30000;
        int i = 2100000000;
        long l = 7000000000L;
        float f = 9.8F;
        double d = 3.14;
        char c = 'A';
        boolean bl = false;
        
        System.out.println( b + " byte 최댓값 --> " + Byte.MAX_VALUE );
        System.out.println( s + " short 최댓값 --> " + Short.MAX_VALUE );
        System.out.println( i + " int 최댓값 --> " + Integer.MAX_VALUE );
        System.out.println( l );
        System.out.println( f );
        System.out.println( d );
        System.out.println( c );
        System.out.println( bl );
    }
}

 

2) 정수형 변수를 문자형으로 형 변환시켜서 출력하면 어떤 결과가 나오는지 말해보시오.

 

public class Java100_variable_DataType3 {
    public static void main(String[] args) {
		
        // [1]
        short a = 'A';
        System.out.println( a );  //--- A(65) + (26-1) = Z(90)
		
        // [2]
        short b = 90;
        System.out.println( (char)b );  //--- Z
		
        // [3]
        char c = 'z';
        System.out.println( (short)c );  //--- a(97) + (26-1) = z(122)		
    }
}

 

 

5. System.out.print, println, printf

 

1) System.out.print(), println(), printf() 등에 대해 예제를 통해 설명. 이 때 10진수 10에 대해 8진수, 16진수로 각각 출력

 

public class Java100_variable_DataType4 {
    public static void main(String[] args) {
    
    System.out.print("안녕하세요~");
    System.out.println("안녕하세요~");
    //안녕하세요~안녕하세요~
    
    //%d(정수), %f(소숫점 형식), %c(문자), %s(문자열), %b(부울), %n(줄바꿈), %e(지수), %o(8진수), %x(16진수)
    System.out.printf("나는 %d살의 대학생입니다. %d, %d, %d, 소숫점 형식-->%.1f, %.2f, 문자-->%c, %b", b, s, i, l, f, d, c, bl);
    //나는 21살의 대학생입니다. 32767, 2100000000, 7000000000, 소숫점 형식-->9.8, 3.14, 문자-->A, false
    System.out.println();
    int z = 10;
    System.out.printf("10진수 10은 8진수로는 %o이고, 16진수로는 %x이다.", z, z);
    }
}

 

 

6. 정수형, 문자열, int, String, 자릿수

 

1) 정수형(int)을 문자열(String)로 변환하여 정수의 자릿수를 구하는 코드를 구현

 

public class Java100_type_IntString {
    public static void main(String[] args) {
    
    //[1]: 정수 선언
    int a = 12345;
    String str = "12345";
    System.out.println(a.length());	//Err
    System.out.println(str.length()); //5
    
    //[2]: 정수-->문자열로 변환-->자릿수 구하기
    String stra = String.valueOf(a);
    System.out.println(stra);	//12345
    System.out.println(stra.length());	//5
    
    //[3]: 문자열 + 정수형 = ?
    System.out.println(12345+1); //12346
    System.out.println(str + 1); //123451
    
    //[4]: 문자열-->정수로 변환
    int b = Integer.valueOf(str); 
    System.out.println("[4]-->" + (b + 1)); //12346
    //String 섞였을 때 괄호 해주어야 원하는 결과 나옴.
    
    }
}

 

 

7. 수치, 연산자, 축약

 

1) 수치 연산자에 대해 설명해보시오.

 

public class Java100_operator_ArithmeticOperators {
    public static void main(String[] args) {
    
    //[1]: 수치 연산자--> +, -, *, /(몫), %(나머지 연산자)
    int a, b, c, d;
    a=60; b=8; c=300; d=400;
    
    System.out.println(a+b);	//68
    System.out.println("a+b="+a+b);	//a+b=608
    System.out.println("a+b="+(a+b));	//a+b=68
    System.out.println("a-b="+(a-b));	//a-b=52
    System.out.println("a*b="+(a*b));	//a*b=480
    System.out.println("a/b="+(a/b));	//a/b=7 --> 몫
    System.out.println("a%b="+(a%b));	//a%b=4 --> 나머지
    
    }
}

 

2) 축약된 형태의 연산자를 사용하여 변수 a의 값을 증가시켜보시오.

 

public class Java100_operator_ArithmeticOperators3 {
    public static void main(String[] args) {
    
    //[1]: 축약된 형태
    int a=0,b=100;
    
    a = a + 1;
    System.out.println(a); //1
    
    a += 1;
    System.out.println(a); //2
    
    a -= 1;
    System.out.println(a); //1
    
    b++;
    System.out.println(b); //101
    
    b++;
    System.out.println(b); //102
    
    b--;
    System.out.println(b); //101
    
    }
 }

 

 

8. 수치, 소수점, 연산자

 

1) 수치 연산자를 사용한 연산에서 소숫점 결과가 예상과 다르게 나오는 것에 대해서 설명해보시오.

 

public class Java100_operator_ArithmeticOperators2 {
    public static void main(String[] args) {
    
    //[1]: 연산의 결과-->정수끼리라도 나누기의 경우 소숫점 형태가 나올 수 있음.
    int a=60,b=8;
    int rst1; double rst2, rst3, rst4;
    
    rst1 = a / b;
    System.out.println(rst1); //7.5가 아니라 7이 출력 --> 타입이 정수형이므로 --> 실수형으로 변환.
    System.out.println((double)rst1); //이러면 7.5가 아니라 7.0 --> 리턴 받는 변수를 실수형으로 하더라도 원하는 결과를 얻지는 못한다.
    
    rst2 = a / (double)b; //어느 한쪽의 값을 double 타입으로 변환.
    System.out.println(rst2); //7.5
    
    rst3 = 100/3;
    System.out.println(rst3); //33.0
    
    rst3 = 100 / (double)3;
    System.out.println(rst3); //33.3333333333..
    
    rst4 = 100 / 3.0;
    System.out.println(rst4); //33.3333333333..
    
    }
}

 

 

9.관계, 논리, 연산자

 

1) 관계 연산자에 대해서 설명해보시오.

 

public class Java100_operator_RelationalOperators {
    public static void main(String[] args) {
    
    //[1]: 관계 연산자--> ==, !=, >, >=, <, <=
    //관계 연산자를 사용해서 연산을 수행하면 그 결과는 참(true), 거짓(false)이 된다. 
    //--> 따라서 그 결과를 받는 타입은 boolean.
    int kor=70, eng=40, math=70;
    boolean rst1, rst2, rst3, rst4, rst5, rst6;
    
    rst1 = kor == eng; 
    rst2 = kor != eng; 
    rst3 = kor > eng; 
    rst4 = kor >= math; 
    rst5 = kor < eng; 
    rst6 = kor <= math; 
    
    System.out.println(rst1); //false
    System.out.println(rst1); //true
    System.out.println(rst1); //true
    System.out.println(rst1); //true
    System.out.println(rst1); //false
    System.out.println(rst1); //true
    
    }
}

 

2) 논리 연산자에 대해서 설명해보시오.

 

public class Java100_operator_LogicalOperators {
    public static void main(String[] args) {
    
    //[1]: 논리 연산자 --> &&, ||(이항 연산자)    !(단항 연산자)
    //&&(and)    ||(or)    !(not)
    //관계 연산자와 마찬가지로 결과로써 나오는 값을 참(true), 거짓(false)으로 나오므로 결과를 받는 타입은 boolean.
    //A && B --> A 그리고 B가 모두 참이어야만 참.
    //A || B --> A 또는 B가 하나라도 참이면 참.
    //!A     --> 반대로..A가 참이면 거짓으로, 거짓이면 참으로.
    
    int a=10,b=20,c=30;
    boolean rst1 = a<b && c>b;
    System.out.println(rst1); //true
    
    boolean rst2 = a<b || c<b;
    System.out.println(rst2); //true
    
    boolean rst3 = a>c || b!=c;
    System.out.println(rst3); //true
    
    boolean rst4 = !rst3;
    System.out.println(rst4); //false
    System.out.println(!rst4); //true
    
    }
}