728x90

 

스위칭 하듯이 바뀌면 좋겠지만 일련의 절차를 거쳐 a,b 값이 바껴야한다

a,b값을 서로 교환할려면 일단 한쪽 값이 한쪽에 들어가야하는데 그럼 한쪽 값이 지워지니

지워지기 전에 임시 변수에 넣어두기로 하자

 

x,y,z 변수를 각각 생성하고 x값에 y값을 넣어서 x값이 지워지기 전에

z변수에다가 x값을 넣어서 저장하고 넣으면 된다

 

위의 결과처럼 x=1,y=2 였지만

x=2, y=1로 잘 교환이 됨

 

근데 문자열+정수는 a5가 나와야하는데 102가 나왔네...? 뭐지

변수값이나 변수명 등 바꿔봤는데 100넘는 값이 어디서 오는 것인가...

자바는 일단 한번 선언된 변수는 계속 유효하다고 들었는데 이것 때문인지 뭔지

피곤하니 일단 자고 내일 다시 해보는걸루

728x90
반응형
728x90

[매일코딩] [Java] ch02.06-09 간단복습 : 변수,상수,리터럴 등

 

728x90
반응형
728x90

 

 

1.형식화된 출력 - printf()

println() 메소드의 단점 : 출력형식 지정불가

1)실수의 자리수 조절불가 - 소수점 n자리만 출력하려면?

       Systme.out.println(10.0/3);    // 3.33333333…

 

정수 나누기 정수는 값이 소수점이 나와야하지만 정수로 출력함

하나를 실수로 바꿔야 소수점까지 제대로 출력됨

3.33333333...값을 제대로 얻으려면 10/3 아닌 10.0/3 해야한다는 것만 일단 기억해두자

 

2)10진수로만 출력된다 - 8진수, 16진수로 출력할려면?

        System.out.println(0x1A); // 26(10진수)

 

printf() 출력형식 지정가능

       System.out.printf("%.2f", 10.0/3);    // 3.33

       System.out.printf("%d", 0x1A);    // 26   // %d : 10진수

       System.out.printf("%x", 0x1A);    // 1A   // %X : 16진수

 

 

 

2.printf() 메소드의 지시자(1/3)

<자주쓰는 지시자>

*이외에 다른 지시자들을 알고싶다면, JavaAPI문서 - Formatter 검색

 

 

2.printf() 메소드의 지시자(2/3)

1)정수를 10진수, 8진수, 16진수로 출력

System.out.printf("%d", 15);  // 15 10진수(decimal number)

System.out.printf("%o", 15);  // 17 8진수(octal number) - 일칠이라고 읽는다.

       8진수에서는 10 1 아니라 8이기 때문

System.out.printf("%x", 15);  //  f  16진수(hexadecimal)

System.out.printf("%x", 15);  //  f  16진수(hexadecimal)

System.out.printf("%s", Integer.toBinaryString(15));  // 1111 2진수 - 10진수15 2진수 1111

       숫자15 위의 메소드에 넣으면 '문자열1111' 얻는다

       그래서 %s 사용하는

       2진수로 출력하는 지시자없음

       정수를 2진수로 변환해주는 toBinaryString() 메소드를 사용해야함

 

2) 8진수와 16진수에 접두사 붙이기

8진수 접두사 : 0

16진수 접두사 : 0x

 

값이 출력될 때는 접두사가 안붙음. 접두사까지 출력하고 싶다면 지시자 앞에 #추가

       System.out.printf("%#o", 15); // 017

       System.out.printf("%#x", 15); // 0xf

       System.out.printf("%#x", 15); // 0XF // 지시자를 대문자로 쓰면, 접두사X F 같이 대문자로 출력됨

 

3)실수 출력을 위한 지시자 %f - 지수형식(%e), 실수 출력의 간략한 형식(%g)

float f = 123.4567890f;

System.out.printf("%f", f); // 123.456787 소수점아래6자리

              마지막숫자9 아니고 7인이유는 float 정밀도가 7자리까지만 정확하기 때문

System.out.printf("%e", f); // 1.234568e+02 지수형식

             같은 수인데 f출력은 456'7'이고 e 456'8'

             실제 저장된 값은 같으나 마지막값을 반올림하여 보여주기때문

System.out.printf("%g", 123.456789); // 123.457 // 소수점포함 7자리로 간략히 보여줌

             마지막수가 6이어야하나 g 반올림해서 7 출력한 . 지시자f처럼 출력

System.out.printf("%g", 0.00000001); // 1.00000e-8

 

실수형태는 %f 많이쓰면 되고, 숫자에 0 많이 들어가면 %e 사용하면 된다

 

실습

 

 

 

2.printf() 메소드의 지시자(3/3)

 

System.out.printf("[%5d]%n", 10);  // [공백공백공백10] 다섯자리

System.out.printf("[%-5d]%n", 10); // [10공백공백공백] - 왼쪽정렬

System.outprintf("[%05d]%n", 10); // [00010] 공백자리를 대체하는 문자 0
 

 

소수점 포함 14자리. 소수점도 하나의 데이로써 메모리 공간을 차지하기 때문

지정된 자릿수보다 출력할 값으 자릿수가 적다면, 소수점 아래는 빈자리를 0으로 채우고 소수점 위는 공백으로 채움

 

 

 

 

 

 

 

728x90
반응형
728x90

2.(data) 타입

 

1)문자 : char

 

2)숫자

         정수 : byte, short, int, long

         실수 : float, double

3)논리 : boolean - true or false

 

위의 8가지가 기본형

 

 

3.기본형 참조형

1)기본형(Primitive type)

 - 8 : boolean, char, byte, short, int, long , float, double

 - 실제 값을 저장

 

2)참조형(Reference type)

 - 기본형을 제외한 나머지 모두(String, System )

 - 메모리 주소를 저장(4byte 또는 8byte)

 - 4바이트 40(4GB)까지 다를 있고, JVM이나 프로그램에서 사용하는 메모리 제외하면 실제 사용 메모리는 2gb 안됨

 - 32bit JVM = 4byte // 64bit JVM = 8byte : 최대40x40=160경바이트(1600TB) 실제는 테라바이트정도 사용가능

 

*기본형 변수는 타입마다 크기가 다름

  - byte : 1byte // short : 2byte // int : 4byte // long : 8byte

  - 참조형은 크기가 항상 4byte

 

Date today;             // 참조형 변수 today 선언

today = new Date();  // today 객체의 주소를 저장

           (객체 생성)

 

728x90
반응형
728x90

 

 

5. 변수의 교환하기

int x = 10, y = 20;  // x,y 각각 초기화 상태

 

x y값을 서로 바꾸고 싶다면?

a=b

b=c

c=a 논리와 같은것

 

 

 

 

 

<practice>

728x90
반응형
728x90

8.문자와 문자열

 

하나의 문자는 홑따옴표로 감싸줘야함. 캐릭터 타입의 변수에 저장할 있음

  • 홑따옴표 안에 두개 이상의 문자를 넣을 경우 에러

 

char ch = 'A';

char ch = 'AB';  // error

 

 

String s = "ABC";

  • 문자가 연속적으로 이어져 있는 것을, 문자열 or 문자열 리터럴이라고 부름
  • 문자열을 저장하려면 변수타입이 String이어야함
  • String 원래 자바에서 제공하는 class. 문자열을 다룰 사용
  • 문자열 class 워낙 자주 쓰이기에,  얘만 기본형 변수에 값을 저장하는 것과 같은 표현을 허용함

 

 

 

※ 문자열 출력별 차이

String s1 = "AB";

String s2 = new String("AB");

  • 위의 문장의 거의 같고 보통 위에 문장 사용
  • 차이는 9장에서

String s = "A";  // 문자 하나. ok

String s = "";   // 문자열. ok

char ch = '';    // 문자열. error

 

String s1 = "A" + "B"  // 결과값 "AB" : 문자열 하나로 결합하라는

  • "" + 7 "" + "7"   "7" : (숫자를 문자열로 캐스팅한 )
  • 문자열은 문자열하고만 결합이 가능해서 숫자7 문자열로 바꾸고 결합한
  • 숫자에 문자열을 결합하면 문자열 숫자가 되는
  • 연산 진행 순서는

ex) ""+7+7 "7"+7 "7"+"7" "77"

ex) 7+7+"" 14+"" "14"+"" "14"

 

문자열 + any type 문자열

any type + 문자열 문자열

 

728x90
반응형
728x90

 

6.리터럴의 타입과 접두사,접미사

접두사,접미사는 대소문자 구분x

파란줄의 접미사 정수형 long 실수형 float 신경쓰면 된다

 

 

정수형에서 byte,short int 같이 묶여져 따로 접미사를 쓰지 않고 long 접미사L 붙여주면 되고,

실수형에서 보통 double d 생략되고 float f 접미사 쓰는게 관례

 

 

 

boolean 타입 : true 또는 false 저장가능

        boolean power = true;

char 타입 : 하나의 문자만 저장가능

        char ch = 'A';         // 하나의 문자는 홑따옴표 ' '

String 타입 : 여러 문자 저장가능

        String str = "ABC";  // 여러 문자는 큰따옴표 " "

 

 

'\n' : 바꿈 문자. 하나의 문자. ' ' 되어있는걸 봐도 있음

 

byte 타입 : 접미사가 없기에 int타입을 사용. , 접미사 x

        대신 byte타입 범위 안에 저장할 있는 값이여야함

        범위 : -128~127 ( 범위 벗어나면 에러)

        byte b = 127;   // literal 127(127 자체) 타입은 int

 

int 타입 : 앞에 접두사를 붙여서 진수를 나타낼 있음

        0b 접두사로 붙으면 2진수 0b0101        

        한계값이 20억까지만 사용가능. 이후의 값은  long처리해야함

        int i = 100;        // 10진수

        int oct = 0100;   // 8진수

        int hex = 0x100; // 16진수

 

long 타입 : int 한계값이 넘어서는 20 이후부터 써야하는 정수타입

        long타입 접미사L 안붙여도 괜찮지만, int 한계값을 넘는 20억부터는 접미사L 필수

        long 1 = 10_000_000_000L;   // 0 10개라 100

        long 1 = 1 100;  // ok

 

float 타입 : 실수. 접미사 필수

        float f = 3.14f;

 

double 타입 : 실수. 접미사 d 생략가능

        double d = 3.14d;   // ok

        double d = 3.14;     // ok

 

          10.  10.0 : 10.0에서 소수점 뒷자리0 생략된 의미. 접미사 없으니 double타입

          .10  0.10 : 0.10에서 0 생략된 의미. 접미사 없으니 double타입

          10f  10.0f : 10f 10.0f 같은 의미

          le3  1000.0 : 실수형. 접미사 없으니 double 타입

                        기호 e 10 n제곱을 의미. 값이 1000이지만 기호e 실수형에서 쓰임

 

 

 

 

 

7.변수와 리터럴의 타입 불일치

1)범위가 '변수 > 리터럴' 경우, ok

           (그릇)    (물건)

 

      int i = 'A';           // int > char

      long 1 = 1 123;   // long > int

      double d = 3.14f; // double > float

 

2)범위가 '변수 < 리터럴' 경우, 에러

      int i = 30_0000_0000;    // int 범위(20) 벗어남. error

      long 1 = 1 3.14f ;         // long < float : 실수형이 정수보다 넓다. error

                 (롱타입 8byte, 플로트타입 4byte)

      float f = 3.14;              // float < double 더블이 플로트보다 크다. error

 

3)byte, short 변수에 int리터럴 저장가능

      byte b = 100;     // ok (, byte 범위-127~127 사이에 속해야함

      byte b = 128;    // error

 

 

 

해보기

 

 

 

728x90
반응형
728x90

[에러 메세지] 

Type mismatch: cannot convert from int to byte

 

[에러 내용]

int를 byte로 형변환(casting)을 할 수 없다는 에러메세지

 

변수와 리터럴 타입이 불일치하면 에러가 발생하는데

byte의 범위인 -128 ~ 127 사이의 정수만 변환이 가능하다

이외에는 오류발생

728x90
반응형
728x90

5.변수, 상수, 리터럴

 

변수(variable) : 하나의 값을 저장하기 위한 공간

상수(constant) : 번만 값을 저장 가능한 변수

  • 생성법 : 변수의 선언법과 같고 타입 앞에 final 추가해주면
  • 한번 값을 저장하면 수정 불가
  • 수정 시도시 에러 발생

리터럴(literal) : 자체로 값을 의미하는

  • 상수와 같은 개념. 상수와 구분하기 위한 용어

 

색깔별로 변수,상수,리터럴 구분한 예시

 

 

 

728x90
반응형
728x90

 

1.변수의 타입

변수는 하나의 값을 저장하기 위한 메모리공간

 

1)변수의 타입은 저장할 값의 타입에 의해 결정됨

 

변수에는 하나의 값만 저장가능하기에 변수타입이 다른 값을 넣으면 에러

ex) int age = 25 (o)

ex) int age = 25.1 (x) 정수에 실수타입 값을 저장할려해서 에러

 

 

2)저장할 값의 타입과 일치하는 타입으로 변수를 선언

char ch = '' ;  // char 문자 타입과 대입값도 문자열타입이므로 일치. 정상출력

double pi = 3.14 ; // double 실수 타입과 대입값도 실수이므로 일치. 정상출력

 

 

2.값의 타입

A.문자 : char

B.숫자

   - 정수 : byte, short, int, long

   - 실수 : float, double

C.논리 : boolean ( True or False 값만 출력)

728x90
반응형

+ Recent posts