반응형

**Data type

1.overflow & Underflow

1)Overflow 수사 자료형에서 자신이 저장할 수 있는 크기보다 큰 데이터를 강제 형 변환해서 데이터를 저장하는 경우 자신이 저장할 수  범위까지의 데이터만 저장하고 앞쪽의 데이터는 제거하고 저장하는 경우

 

short :2bytes정수로 -32768~ +32767범위 내의 숫자만 저장 가능

short s = 32768//이 구문이 에러

32768->0 10000000 00000000

표현범위가 큰 데이터를 작은 범위의 변수에 저장하기 위해서는 강제 형 변환이 필요

short s = (short)32768;

저장이 되는데 앞쪽을 버린다. 메모리 상에서는 아래 동작이 변한다.

short s = 10000000 00000000(2진수 );

 

System.out.println("s:"+s) //음수가 나온다. -32768

음수 양수는 첫 번째 비트로 확인한다.

0100

1011

+  1

1100

<----------

0100

1100

'

 

+32767 끝까지 왔다가 없으면 -32768로 간다. =>overflow

-32768 하나 빼면 뒤로 갈 수 없어서 32767로 간다.

 

자신이 저장할 수 있는 데이터보다 더 큰 숫자를 저장하면 가장 작은 숫자부터 다시 시작

 

2) Underflow

자신이 저장할 수 있는 숫자보다 더 작은 숫자를 저장하면 가장 큰 숫자부터 다시 시작

 

3)숫자 데이터의 연산에서 결과 자료형보다 더 크거나 작은 데이터가 나오게 되면 잘못된 결과를 만들 수 있습니다.

 

 

#src -> A.java

add -> A.class

 

src=>source의 약자이다.

java파일을 만드는데 class를 어디에 하는가 ?

java start up

python __main__

4)실습

           //자바 애플리케이션의 시작 메소드

           public static void main(String[] args) {

                       // short 32767 보다 큰 숫자는 그냥은 저장 안됨

                       // 강제 형 변환을 통해서만 저장됨

                       // 16비트 앞쪽의 비트는 잘리게 됨 -Overflow

                       // 가장 작은 숫자부터 다시 시작 - 음수가 저장됨

                       // 반대되는 현상을 Underflow라고 합니다.

                       short s = (short)32768;

                      

                       //저장된 데이터를 출력

                       System.out.println("s:"+s);//s:-32768

                      

           }

 

 

 

2.문자열

=>string이라는 클래스를 이용해서 문자열을 저장

=>문자열을 대입할 때는 클래스에서는 예외적으로 직접 값 대입이 가능

sTRING 변수명 = '문자열';의 형태로 생성 가능

 

=>문자열 과 숫자 데이터 또는 BOOLEAN +연산하게 되면 숫자 데이터와 BOOLEAN을 문자열로 변환해서 결합을 합니다.

 

3.Literal저장

=>Literal 사용자가 직접 작성한 데이터

boolean리터럴 :TRUE,FALSE

정수 리터럴 :10(INT) ,10L(long)

실수 리터럴 :3.2f(float),3.2(double),0.314E_001(3.14->0.314 * 10 1)

문자 리터럴 :'A'

문자열 리터럴 :"ABC","A"

참조 리터럴 :null(가리키는 참조가 없다. 결측치)

자료구조 하는 분은 nil이라고 하고 파이썬은 None이라고 한다.

 

문자열은 자기 자신을 더하거나 빼는 것 못한다.

"park" +"moon"

 

park

park+moon

 

이렇게 영규적 영역에 들어간다.

크롤링할 때 항상 파일에 집어연다.

 

stack은 일시적이고  =>지역변수

heap은 없을 수도 있고 영구적일 수도 있다.  =>instance변수 static변수

 

 

 

 

stack 자료구조이름 자료구조를 만드는 메모리 영역

stack 영역 : 함수 또는 메모리가 필요한 데이터 저장

           일시적 함수나 메소드의 수행이 종료되면 소멸된다. return (없어진다.)

heap 영역 : 반영구적  (소멸 가능) * 이 공간을 활용 잘 해야 한다.

static 영역 : (소멸이 안된다.) Method영역 정적

               자동으로 정리하며

            필요해서 하는 것이 아니라 알아서 한다. <->garbage collection(java,python) ->return count

               c는 개발자가 직접해야 한다.

              static영역을 많이 사용하지면 pc가 늦어진다.

              pc꼈다 키면 영구적 영역이 정리해서 속도가 조금 빨라진다.

 

21 -> 0

            -> 1

1).모바일은 upgrade안된다.(최적화)

2).인터넷이 언제 끊어질지 모른다.

 

 

32bit -> 232까지 구분 <- c에서는 주소 ,java 에서는 hash code ,python id

        231 기가

2기가 제한인 것이 많다. 외냐하면 처음 자리는 음수로 해야 한다.

 

int a = 10;

int b = 10;

String name = "park";

static

a,bid가 달라야 하는데 위의 경우 처럼 하면 같다.

 

literal 사용하면 static에 저장

 

10이 있는지 static 에 가서 확인 번지로 찾는다.

10 lteral 한번 받아서 만들어진다.

"park" + "moon" ->최악의 연산이다.

 

 

=>Literal 은 영구적인 영역에 저장

한번 만들어지면 프로그램이 종료될 때 까지 소멸되지 않습니다.

Literal을 변수에 저장하면 먼저 메모리 영역에서 있는지 찾아보고 찾으면 그 참조를 저장하고 찾지 못하면 Literal을 메모리에 저장하고 그 참조를 저장합니다.

 

=>자바에서는 변수가 참조하고 있는 영역을 확인하고자 할 때  System.identityHashCode메소드에 변수를 대입해서 출력해보면 됩니다.

 

실습 :3개의 정수를 저장할 수 있는 변수를 만들고 2개에는 동일한 값을 저장하고 다른 1개에는 다른 값을 저장한 후 해시코드를 출력

                       int a = 10;

                       int b = 10;

                       int c = 11;

                      

                       //a c는 동일한 데이터를 저장했기 떄문에 해시코드가 동일

                       //c는 다른 데이터를 저장했기 떄문에 다른 해시코드를 출력

                       System.out.println("a:"+System.identityHashCode(a));

                       System.out.println("b:"+System.identityHashCode(b));

                       System.out.println("c:"+System.identityHashCode(c));

 

4.System.out.printf()

=>서식에 맞춰서 콘솔에 출력해주는 메소드

=>프린터 같은 장비는 gui(윈도우) 운영체제를 탑재하지 않고 CLI(cOMMAND Line Interface)기반의 운영체제를 탑재하고 있는데 이런 운영체제에 데이터를 출력할 때는 서식을 이용해서 출력을 해야 데이터에 맞춤을 적용해서 출력할 수 있습니다.

=>java에서는 이 경우 printf메소드를 이용합니다.

1)사용방법

system.out.printf("서식 나열",서식에 매핑되는 데이터를 나열 );

=>서식은 반드시 %로 시작

 

 

2)서식을 보면

정수는 :%d, %i

실수는 %

문자 : %c

문자열 %c

boolean %b

 

3)%다음에 숫자를 입력하면 숫자만큼의 자리를 확보해서 출력

 

4)%0숫자 형태로 입력하면 빈자리는 0으로 채워집니다.

 

5)실수의 경우 %전체자릿수, 소수자릿수 f형태로 출력할 소수 자릿수를 설정할 수 있는데 소수자릿수 아래에서 반올림

 

6)string.format과 사용방법이동일

string.format은 출력하지 않고 문자열로 리턴합니다.

 

int age= 20;

double height = 176.53;

System.out.printf("나이는 %d 키는 %.1f입니다.",age,height);

 

 

**연산자(Operator)

=>연산을 수행하기 위한 부호나 명령어

=>산술 연산은 숫자 데이터의 연산이고 논리연산은 결과가 true false형태로 리턴되는 연산

1. 최우선 연산자

1)() : 괄호 연산의 우선순위 변경을 위한 연산자

2)[]: 배열에서 배열의 크기나 인덱스를 설정할 때 사용하는 연산자

 

2.단항 연산자:하나의 데이터 만을 가지고 연산하는 연산자-Unary(하나만 주기)

 

binary 두개 주기

 

1)증감 연산자 : ++,--

=>변수에만 사용할 수 있는 연산자

=>변수의 앞 뒤 모두에 위치 할 수 있는 연산자

=>변수의 앞에 놓이게 되면 변수의 값을 1증감시키고 명령에 사용

=>변수의 뒤에 놓이게 되면 변수의 값을 명령에 사용하고 1증감시킵니다.

=>연속해서 사용되는 경우 언어마다 다르게 적용

 

int a= 10;

a++;

System.out.println("a:"+a)//11출력

 

 

System.out.println("a:"+(a++));//11 a 12로 바꾼다.

System.out.println("a:"+( ++a));//13 증가시키고 명령

 

a = 0;

int result = ++a + ++a;

System.out.println("result:" +result);// 3

java ->3

c->4

c언어의 특징 : ++a ->1 => ++a-> 2 => 4

java는 하나씩 한다. ++a -> 1

                      ++a ->2

 

                       int a = 10;

                       //a의 값을 1증가

                       a++;

                       System.out.println("a"+a);//11출력

                      

                       //a 11인 상태에서 명령에 먼저 사용하고 1증가

                       //11이 출력되고 a 12가 됩니다.

                       System.out.println("a:" +(a++)); //11

                      

                       //a를 먼저 증가시켜서 13을 만들고 명령에 사용

                       System.out.println("a:" +(++a));//13

 

2)부호 관련 연산자

+ : 양수라는 것을 명시적으로 표현하기 위한 연산자

-  : 2의 보수 연산자 음수 표현

~ : 1의 보수(0->1, 1->0) 연산자 양수와 음수 사이의 절대값 1차이 ,색상 반전에 이용

~ 일 경우 : 01101100 -> 10010011

 

3) 강제 형 변환 연산자

(자료형)데이터 : 데이터의 자료형을 강제로 변경하는 연산자

 

3.산술 연산자

%,*,/,+,1

=>자바는 동일한 자료형끼리 산술 연산을 하면 동일한 자료형으로 결과가 리턴

정수/정수 = 정수

 

=>서로 다른 자료형끼리 산술 연산을 하면 표현 범위가 더 큰 자료형으로 변환해서 연산하고 표현 범위가 더 큰 자료형으로 결과를 리턴

정수 +실수 =>실수 + 실수 =>실수

 

=>int보다 작은 자료형은 int로 변환해서 수행하고 결과도 최소 int

short + short => int +int = int

 

=>문자열은 문자열 또는 숫자,그리고 boolean데이터와 +연산이 가능한데 + 연산을 하게 되면 다른 데이터를 문자열로 변환해서 결합

 

"10+20="+ 10+20 =>"10+20 = 1020"

"10+20="+(10+20) =>"10+20 = 30"

 

=>%:나머지 연산자

숫자의 범위를 제한하거나 패턴을 갖는 문장을 실행할 때 사용

 

실습)패턴을 갖는 명령문을 실행

//빨강, 파랑, 노랑 을 순서대로 1초마다 출력

 

 

순서대로 색갈이나 달력등을 할 수 있다.

2가지 모양이나 4가지 모양으로 하는 게 좋다.

스위치는 2가지 모양으로 하는게 중요하다. on off

                       int i = 0;

                       for(; ; ) {//무한 루프

                                  try {

                                              i = i % 4 ;

                                              if (i == 0) {

                                                         System.out.println("라투");

                                              }else if(i == 1) {

                                                         System.out.println("오미크론");

                                              }else if(i == 2) {

                                                         System.out.println("다크스팩터");

                                              }else {

                                                         System.out.println("오미크론");

                                              }

                                              Thread.sleep(1000);//1초마다 쉰다.

                                              i++;

                                  } catch (InterruptedException e) {

                                              e.printStackTrace();

                                  }

                       }

오미크론이 2개 더 나온다.

 

=>cd Key,나 숫자 코드의 유형성 검사에도 %가 사용됩니다.

다 더해서 /해서 0이면 cd key이다.

주민등록번호는 11의 배수 자리수로 해서 하는 것

 

% , xor =>이미지 연산

 

4.shift연산자

=>정수 데이터를 가지고 왼쪽이나 오른쪽을 비트 단위로 밀어내는 연산자

=>2진수로 연산하고 결과는 10진수로 리턴

=> >>,<<,>>>

 

정수1 >> 정수2  : 정수 1을 정수 2 비트만큼 오른쪽으로 shift

정수1 << 정수2  : 정수 1을 정수 2 비트만큼 왼쪽으로 shift

=>부호비트는 shift하지 않습니다.

첫번째 비트는 shift하지 않습니다.

 

정수 1 >>> 정수 2: 보호비트도 shift포함, 무조건 민다. 그래서 양수 일 때는 >> 와 차이가 없고 음수인 경우 결과가 달라짐

 

=>32번이상 shift하라고 작성하면 32로 나눈 나머지 만큼만 shift합니다.(java) 파이썬과 다르다. 파이썬 계속 밀명 0이다.

 

=>오른쪽으로 한번 shift하면 2로 나눈 효과

=>왼쪽으로 한번 shift하면 2를 곱한 효과

 

4: 0000 0100

 

4 >> 1 : 0000 0010 =>2

4 >> 2 : 0000 0001 =>1

 

5/ 2  => 0000 0101 /2하면 오른쪽으로 하나 민다.  0000 0010 => 2

 

실습)

                      int n = 10;

                       //2번을 오른쪽으로 나누기 4하 효과 - 자가 출력

                       System.out.println("n >> 2" +(n >>2));

                      

                       //32번 이상 밀면 모든 비트가 소멸되기 때문에

                       //32번 이상 shift하면 32로 나눈 나머지 만큼만 shift- 2번만 함

                       System.out.println("n >> 2" +(n >>34));

 

5.옵션 설정

=>프로그래밍 언어에서는 사용할 수 있는 옵션을 정수로 만들어 놓는 경우가 종종 있는데 이 때 숫자의 배열을 확인

=>숫자의 배열이 1,2,3,4,5 처럼 일련번호 형태로 되어 있으면 이 옵션은 하나 만 선택

=>숫자의 배열이 1,2,4,8,16,32처럼 2의 지수 승 형태로 되어 있으면 이 옵션은 중복 선택이 가능한 옵션입니다.

애플은 1,2,4,8이런 식으로 쓰지 않고 1<<0, 1<<1, 1<<2,1<<3형태로 만듭니다.

 

=>키보드 눌렀을 때

A:65, B:66 C:67...

 

마우스 왼쪽 :1 마우스 오른쪽 :2,shift :4, Control : 8  Middle Button:17, Alt ;32..=>중복해서 누를 수 있다.

 

같이 부럴 수 있는 것은

0이면안눌러지고 1이면 눌러진것이고 ->하나의 비트가 하나이 명령을 한다.

control alt 오 왼

0          0  1  1

뭐 눌러짔는 것으로 비교한다.

 

옵션값을 찍어서 확인하기

 

shift는 프로그램언어마다 조금씩 다르다.

 python 32이상시 0으로 채워진다.

 

6.관계 연산자

=>2개의 데이터를 비교해서 결과를  boolean리턴하는 연산자

=>숫자형에만 사용 가능한 연산자 : >,>=,<,<=

=>모든 자료형에서 사용 가능한 연산자 (내용을 비교하는 것이 아니고 가리키고 있는 데이터가 같은지 비교):!= ,

==

=>문자열의 경우는 동일한 데이터이라도 == 로 비교하면 false가 리턴될 수 있기 떄문에 문자열은 == 로 비교하지 않습니다.

 

7.비트 논리 연산자

=>정수 데이터에 사용 가능한 연산자로 비트 단위로 연산한 후 결과를 10진 정수로 리턴하는 연산자

=>&(and): 2개의 비트 모두 1일때 만 1

=>|(or):2개의 비트 모두 0일 때 0

=>^(xor):2개의 비트가 같으면 0 다르면 1

=> 이 연산자들은 시스템 프로그래밍이나 그래픽 프로그래밍을 할 때 자주 등장

 

int a = 20;

int b = 13;

 

a & b

a | b

a ^ b

 

int a = 20;

int b = 13;

 

 

 

 

a: 00000000 00000000 00000000 00010100

b: 00000000 00000000 00000000 00001101

 

 

a&b : 둘다 1일때만 1

00000000 00000000 00000000 0000100  =>4

 

a|b :둘다 0일 때만 0

00000000 00000000 00000000 00011101  => 29   16+8+4+!

 

a^b: 같으면 0 다르면 1 =>exclusive OR

00000000 00000000 00000000 00011002  =>25

 

xor비교 프로그램 만드는 것 하지안으면 값없다.

A ^ 'A' 같으면 0

 

색상 or기법이다.  1 | 1 =>1

 

 

 

and :삭제 and 0 & 0

 

 

or 복사 빈곳

 

잘라내기가 복사하는 것 보다 늦다 그것은 0으로 만들고 해야 한다.

 

 

 

 

왼쪽으로 그림판에서 그리면 오른쪽 처럼 된다.

not xor pen으로 드로쉼

검정색

검정색 xor

검정색              ->0

NOT XOR       -> 1횐색

횐색은 지워지는 것 처름 보인다.

NOT XOR PEN

 

 

 

 

 

이 부분을 white로 바꿔져서 지운것 처럼 보인다.

 

 

control shift        

 

shift를 눌렀는지 확인해서 1인지 확인

0100 5

0101 5

0111 7

1101 13

1111

shift인지 확인

4인지 확인하는 것은 다른것 클릭하면 shift를 눌렀는데 모른다.

 

0000    0000

0100    0100

& 0000  | 0100 =>4

and는 하나라도 0이 있으면 0이다.

&4 window키로

그 자리만 1인 숫자와 andd하면 쉽게 할 수 있다.

: 김상영이 쓴 책

 

 

 

0       0      0      0

        1

if (modifiers == 4) {} ->이런식으로 하면 alt만 누를때만 가능하다. 다른 것은 안된다.

else{}

 

control Alt        

 

0       0      0      0

0       1      0      1 -> ALT+왼쪽

alt + 일 경우 그래서 and 4

특정한 위치의 bit1인지 확인

=>위치의 bit1인 정소와 &를 해서 0이면 0이고 0이 아니면 1

=>윈도우 프로그램안에서 단축키 사용시 중요하다.

방향키 찾아서 하는것 중요한 알고리즘

 

 

                       int a = 20;// 00000000 00000000 00000000 00010100

                       int b = 13;// 00000000 00000000 00000000 00001101

                      

                       // 2개 모두 1인 경우에만 1

                       System.out.println("a & b:"+(a & b)); //결과는 100 ->4

                       // 2개 모두 0인 경우에만 0 나머지 경우는 1

                       System.out.println("a | b:"+(a | b)); //결과는 11101 ->29

                       // 2개 같은 경우는 0 다른 경우는 1

                       System.out.println("a ^ b:"+(a ^ b)); //결과는 11001 ->25

 

8.조건 논리 연산자

=>boolean데이터를 가지고 연산을 수행

=> !(not) :하나의 데이터를 가지고 연산하는데 결과를 반대로 리턴하는 연산자

=> &&(AND):둘다 TURE인 경우만 TRUE를 리턴하고 그 이외의 경우는 FALSE리턴

=> ||(OR) :둘다 FALSE인 경우만 FALSE를 리턴하고 그 이외의 경우는 TRUE리턴

 

=>AND OR는 데이터의 순서를 바꿔도 실행 결과는 같지만 과정은 다를 수 있습니다

 

AND는 앞 쪽의 데이터가 FALE이면 결과가 무조건 FALSE이므로 뒤의 데이터를 확인하지 않습니다.

 

OR는 앞 쪽의 데이터가 TRUE이면 결과가 무조건 TRUE이므로 뒤의 데이터를 확인하지 않습니다.

 

순서에 따라 뒤의 데이터를 확인해야 하기도 하고 확인하지 않아도 되기 때문에 과정이 달라질 수 있습니다.

반복문 안에서 사용할 때는 조금 생각해보고 사용하는 것이 좋습니다.

 

조건 && 예외발생상황

조건 false일 경우 예외발생상황 하지 않는다. 프로그램 정상 상황처럼 보인다.

조건 true일 경우 예외발생상황 한다.

그래서 프로그램이 됬다 안됬다 할 경우 가 생긴다.

&& || 일 경우 확인해야 한다.

null point Exception

 

실습)

                       int x = 10;

                       //x 4 의 배수인지 판별

                       boolean result = ( x % 4 == 0) ;

                       System.out.println("result:"+result);

                      

                      int year = 2020;

                       //윤년인지 판별

                       //윤년은 4의 배수이고 100의 배수가 아닌경우 또는 400의 배수인 경우

                       result = year % 4 == 0 &&  year % 100 != 0  ||  ( year % 400 == 0);

                       System.out.println("result:"+result);

 

9.삼항 연산자

변수 = boolean이 나오는 표현식 ? true일 때 수행할 내용 :false일 때 수행할 내용;

 

=>2개의 정수가 있다가 할 때 2개 중에 큰 정수 찾기

int a = 10;

int b = 20;

int max = a > b ? a:b;

System.out.println("max:"+max);

 

=>간단한 분기문을 만들 때는 if대신에 삼항 연산자를 사용합니다.

삼항 연산자로 작성하는 모든 식은 if로 대신할 수 있습니다.

 

10.대입연산자

=: 오른쪽의 데이터를 왼쪽의 변수에 대입하기 위한 연산자

연산자 = : 왼쪽의 변수가 가리키는 데이터에 오른쪽의 데이터를 연산자를 이용해서 연산하고 다시 왼쪽의 변수에 결과를 대입하는 연산

 

int a = 10;

 a+= 20; //a의 값은 10+ 20 을 하고 그 결과를 다시 a에 저장

//a의 값은 30

//+대신에 다른 연산자들도 사용이 가능

 

11.변수의 값을 1증가

a = a+1;

a += 1;

a++;

 

예전에는 a++이 가장 빠르다고 했는데 실제로 비교를 해보면 몇 억번 정도 수행해도 별 차이가 없음

 

a= a+1재일 느리지만 이 방식은 모든 프로그래밍언어에서 사용이 가능 알고리즘에서도 이렇게 사용한다.

+=, ++는 되는 언어가 있고 안되는 언어도 있습니다. 알고리즘에서 사용이 안된다.

 

12.연습문제

int second = 309209;

//second에 추가 저장

//하루는 86400, 1시간은3600, 1분은 60

//second가 몇일 몇 시간 몇분 몇초인지 출력

 

                       int second = 309209;

                      

                       int day = second / 86400;

                       int hour = (second - (day* 86400))/ 3600;

                       int minute =(second - (day* 86400)- (hour*3600))/60;

                       //초는 분 까지 가져 간 것을 모두 뺴면 되는데 일,시간, 분은 전부 60의 배수이기 때문에

                       //60으로 나눈 나머지가 몯  뺀 값이 됩니다.

                       int sec = second% 60;

                      

                       System.out.println(day+"" +hour+"시간"+minute+"" +sec+"");

 

13.자바에서 콘솔에서 입력받기

Scanner sc= new Scanner()

//Scannerjava.util.Scanner 라서 그냥 Scanner라고 쓰면 에러가 나는데

//Scanner글자에 마우스 커서를 갖다 대면 import 를 대신 해준다고 메시지가 출력됩니다.

//크릭하면 import를 해줍니다.

 

//문자열을 입력받고자 하면

문자열 변수 = sc.nextLine();

 

//정수 입력받고자 하면

정수변수 = sc.nextInt();

 

실습 )

이름과 나이를 입력받아서 출력

이름은 문자열 나이는 정수

 

                       //이름과 나이를 입력받아서 출력하기

                       //키보드 인식 하는 것 System.in

                       Scanner sc = new Scanner(System.in);

                      

                       //이름을 입력하기

                       System.out.print("이름 입력:");

                       String name = sc.nextLine();

                      

                       //나이를 입력받기

                       System.out.print("나이 입력:");

                       int age = sc.nextInt();

                       //확률이 높은 것을 위에 올려준다.

                      

                       //출력

                       System.out.println("이름은 "+name+" 나이는 "+age);

                      

                       sc.close();//없으면 경고가 생긴다.Resource leak

                       //leak 있을 경우 close해주면 된다.

 

14.제어문자

=>역슬래시 다음에 하나의 영문 문자를 기재해서 특별한 기능을 수행하도록 한 문자

\n:   줄 바꿈

\t: 

\\ : 역슬래시

\' '

\"": "

 

\a : 비프음 -C언어 같은 언어에서는 메인보드 내의 스피커를 이용해서 beep음 출력

java에서는 안된다.

컴퓨터 킬때 나는 소리

없으면 메인보드 스피커 빠진것이다.

원도우 프로그래밍을 하다가 버튼의 제목 같은 곳에서 줄바꿈을 할려고 했는데 \n으로 안되면 \r\n을 이용

\n는 줄 만 바꾸고 커서를 움직이는 것이 아니다.

\r은 커서를 맨 앞으로 보내는 것이다.

 

**제어문(Control Statement)

=>프로그램의 흐름을 변경하는 명령어

=>프로그램은 왼쪽에서 오른쪽으로 위에서 아래로 순서대로 처리되는데 이러함 흐름을 변경하는 명령어

1.종류

1)분기문

=>조건이나 값을 가지고 분기(갈림길)

ifswitch

 

2)반복문(Loop)

=>동일한 패턴의 문장을 반복 수행

while, do ~ while ,for

 

3)기타 제어문

break ,continue, return

 

2.if

1)단순 if

if(boolean데이터 또는 boolean이 리턴되는 표현식 또는 메소드 호출){

           ()안의 내용이 true일 때 수행할 내용

}

 

2)if ~ else

if(boolean데이터 또는 boolean이 리턴되는 표현식 또는 메소드 호출){

           ()안의 내용이 true일 때 수행할 내용

}else{

           ()안의 내용이 false일때 수행할 내용

}

 

3)if ~else if ~ else

if(boolean데이터 또는 boolean이 리턴되는 표현식 또는 메소드 호출){

           ()안의 내용이 true일 때 수행할 내용

}else if(새로운 비교내용){

           앞의 조건이 false이고 ()안의 조건이  true일 때 수행할 내용

}else{

           ()안의 내용이 false일때 수행할 내용

}

=>else if는 무제한 사용이 가능

=>else는 생략이 가능

 

 

실습 1)

=>점수를 입력받아서 60점이 넘으면 합격이라고 출력

                       //키보드로부터 입력받기 위한 객체를 생성

                       Scanner sc = new Scanner(System.in);

                      

                       //점수 입력받기

                       System.out.print("점수 입력:");

                       int score = sc.nextInt();

                      

                       //점수가 60점 이상이면 합격이라고 출력

                       if(score >= 60) {//조건

                                  System.out.println("합격"); //수행할 내용

                       }

                      

                       sc.close();

         

 

실습 2)

=> 점수가 60점 이상이면 합격이라고 출력

                                  //키보드로부터 입력받기 위한 객체를 생성

                       Scanner sc = new Scanner(System.in);

                      

                       //점수 입력받기

                       System.out.print("점수 입력:");

                       int score = sc.nextInt();

                      

                       //점수가 60점 이상이면 합격이라고 출력

                       if(score >= 60) {//조건

                                  // 조건이 true 일때 수행할 내용

                                  System.out.println("합격"); //수행할 내용

                       }else {

                                  //조건이 false일때 수행할 내용

                                  System.out.println("불합격"); //수행할 내용

                       }

                      

                       sc.close();

 

 

실습3)

90-100이면 A

80-90미만이면 B

70-80 미만이면 C

60-70미만이면 D

0~60미만이면 F

=>자바는 위의 조건이 아래 조건을 포함하면 에러가 발생

=>결코 도달할 수 없는 코드를 만들면 에러가 발생

문법적인 오류 없지만 로직 오류는 에러 가 발생한다.

if(score >= 0 and score <= 100){

}else if (score >= 10 and score <= 100){

}

=>이런 경우 else의 용도도 고민해봐야 한다.?

else는 예외적인 상황 발생에 대한 처리를 해주는 것이 좋습니다.

//키보드로부터 입력받기 위한 객체를 생성

                       Scanner sc = new Scanner(System.in);

                      

                       //점수 입력받기

                       System.out.print("점수 입력:");

                       int score = sc.nextInt();

                      

                       /**

                        * 점수가 90-100    이면 A

                        * 점수가 80-90 미만이면 B

                        * 점수가 70-80 미만이면 C

                        * 점수가 60-70 미만이면 D

                        * 점수가   0~60 미만이면 F 라고 출력

                        */

                       if(score >= 90 && score <= 100) {

                                  System.out.println("A");

                       }else if(score >= 80 && score < 90) {

                                  System.out.println("B");

                       }else if(score >= 70 && score < 80) {

                                  System.out.println("C");

                       }else if(score >= 60 && score < 70) {

                                  System.out.println("D");

                       }else if(score >= 0 && score < 60) {

                                  System.out.println("F");

                       }else {

                                  System.out.println("잘못된 점수 입력");

                       }

                       //else는 예외적인 상황 발생에 대한 처리를 해주는 것이 좋습니다.

                      

                       sc.close();

 

 

3.switch

=>값에 의한 분기

switch(정수나 문자열 변수 또는 연산식 그리고 메소드 호출){

           case 1:

                       ()안의 내용이 값1일때 수행할 내용;

                       (break;)

           case 2:

                       ()안의 내용이 값2일때 수행할 내용:

                       (break;)

           ................

           default:

                       일치하는 값이 없을 때 수행할 내용;

                       (break;)

}

 

=>문자열은 자바 1.7버전부터 지원

=>case옆에 작성하는 값은 리터럴이거나 final변수 이어야 합니다.

변수를 만들 때 자료형 앞에 final,을 기재하면 자바에서는 literal이거나 읽기 전용 변수(상수)가 됩니다.

=>case구문안에서 break를 생략하면 break를 만날때 까지 모든 문장을 전부  수행

 

실습)

정수를 1개 입력받아서 1이면 한식 2이면 중식 3이면 분식 나머지 경우는 일식이라고 출력

값을 가지고 분기하는 경우인데 if로 작성이 가능하지만 값에 따라 다른 문장을 실행할 때는 switch를 사용하는 것을 권장

특정한 값일 때 무엇이다

ifswitch보다 빠르다.

                       Scanner sc = new Scanner(System.in);

                      

                       // 매뉴 입력받기           

                       System.out.print("메뉴 입력(1-한식 2-중식 3-분식 기타-일식)");

                       int menu = sc.nextInt();

                      

                       switch(menu){

                       case 1:

                                  System.out.println("한식");

                                  break;

                       case 2:

                                  System.out.println("중식");

                                  break;

                       case 3:

                                  System.out.println("분식");

                                  break;

                       default:

                                  System.out.println("기타 - 일식");

                                  break;

                       }

                      

                       sc.close();

 

//마우스 왼쪽 누르면

case 1:

final int LBUTTONGDOWN =1;

case LBUTTONGDOWN:

                       Scanner sc = new Scanner(System.in);

                      

                       // 매뉴 입력받기           

                       System.out.print("메뉴 입력(1-한식 2-중식 3-분식 기타-일식)");

                       int menu = sc.nextInt();

                      

                       //읽기 전용의 변수를 생성

                       final int KOREA = 1;

                       final int CHINA = 2;

                       final int SNACKBAR = 3;

                      

                      

                       switch(menu){

                       case KOREA:

                                  System.out.println("한식");

                                  break;

                       case CHINA:

                                  System.out.println("중식");

                                  break;

                       case SNACKBAR:

                                  System.out.println("분식");

                                  break;

                       default:

                                  System.out.println("기타 - 일식");

                                  break;

                       }

                      

                       sc.close();

읽거나 할경우 case안에 final로 한 읽기전용으로 하는게 훨신 보기 좋다

실행은 소스 코드 크기로 하는 것이 아니다.

if보다 switch가 빠를 가능성이 높다.

 

li = [1,2,3]

dic = {"":1 ,"":2, "":3}

key: 해싱해서 저장

value [1,2,3]

특정값기능이 안된다. 실수 ,판단

li[0]  li[1]  li[2]          =>전체 조회시 데이터 적을 때 빠르다.

원래 자리 돌아갔다가 다시 다음것 진행

    pointer

첫번째 찾고 돌아갔다가 다시 다음 것 진행한다.

for in 갔다가 대기한다음 다음 위치로 이동

 

dic[""] dic[""] dic[""] =>속도가 더 빠르다.

           변수는 여러개의 데이터 가르킬 수 없다.

li 출발점은 출발전 가르킨다.

    pointer

li[1] ->li찾아서 한칸 건너뛴다. =>2

li[2] ->li찾아서 두칸 건너뛴다. =>3

데이터가 많으면 많을수록 속도가 점점 늦어지낟.

숫자는 건너뒤는 것이다.

dic->이름 쓰면

key :해싱해서 저장

hash 함수

                                                        

                                                        

                                                          

dic[""]

dic[""]

 

if

 

 

 

 

 

 

밑에 조건은 위에서 걸쳐야 한다.

switch -case 는 바로간다.

smart phone은 바로간다. dict 이런 방식

해싱한다.

if < switch

1.     코드의 가독성이 높다.

2.     여러번 수행하면 수행속도가 빠르다.

for in 다음위치

읽고 기다ㄹ기고 진행

random접근이 안된다. 전진 밖에 안된다.

 

 

4.반복문

=>패턴을 갖는 문장을 연속적으로 사용해야 하는 경우 반복문을 사용할 수 있습니다.

1)while

while(boolean 데이터 또는 boolean이 리턴되는 연산식 또는 메소드 호출){

           ()의 값이 false가 아닐 때 수행할 내용;

}

 

//Hello Java3번 출력->속도는 이것이 빠르다.

System.out.println("Hello Java");

System.out.println("Hello Java");

System.out.println("Hello Java");

 

int i = 0;

while (i < 3){

           System.out.println("Hello Java");

           i = i+1;

}

 

일반적인 프로그램은 0부터이고

프로그램이 아닌 분들 시작하는 것은 rdb1부터 만들어진것이다.

int i = 0;

하면 몇 번 까지 했는가 할때 편하다. 마지막에 .i를 출력하면 3이다.

알고리즘을 할때는 보통 1이다.

 

3

2

1

 

(3- (i++))

--빼기 잘 안쓴다.

 

2)do ~while

do {

           반복 수행할 내용;

}while(조건);

=>무조건 반복 수행할 내용을 하고 조건을 확인해서 false{}아ㄴ의 내용을 반복

=>do ~while while로 변경할 수 있지만 반드시 1번은 수행해야 한다. 라는 의미를 전달하기 위해서 사용

i = 0;

do {

           System.out.println("Hello Java");

           i = i+1;

}while(i < 3);

 

3)for

for(처음 한번만 수행할 내용; 조건; 두번째 부터 수행할 내용){

           조건이 false가 아니라면 수행할 내용;

}

=>각 영역은 생략이 가능

for(;;){} //무한 반복false가 아니라면 수행해야 하기 때문에

=>각 영역은 생략이 가능

for (int i = 0; i <3 ; i= i+1){

           System.out.println("Hello Java")

}

 

int i = 0;

for (; i <3 ; i= i+1){ //처음에 안하겠다.

           System.out.println("Hello Java")

}

 

//첫번 째 것은 한번만 하는 것이다.

for (int i = 0, int j = 0; i <3 ; i= i+1){ //처음에 안하겠다.

           System.out.println("Hello Java")

}

 

4.제어문을 사용할 때 주의할점

if switch,while,for를 쓸 때 주의할 점은 ()뒤에 ; 을 하는 것이다.

()뒤에 ; 을 하게 되면 조건은 무시하고 {}안의 내용을 무조건 한 번만 수행합니다.

 

실습 -반복문 while, do~while, for로 만들기

                       //while

                       //한번만 수행할 내용 -> while(조건) -> { }내에 반복수행할 내용

                       int i = 0;

                       while(i<3){

                                  System.out.println("Hello Java");

                                  i = i + 1;

                       }

                       System.out.println("======================");

                       //do~while

                       //한번만 수행할 내용 -> do{반복 수행할 내용} -> while(조건);

                       i = 0;

                       do {

                                  System.out.println("Hello Java");

                                  i = i + 1;

                       }while(i<3);

                       System.out.println("======================");

                       //for

                       //for(한번만 수행할 내용; 조건; 두번째부터 수행할 내용){반복 수행할 내용}

                       for(i=0; i<3; i=i+1) {

                                  System.out.println("Hello Java");

                       }

**java applicationgit hub 에 올리고 내려받기 그리고 업데이트

 

1.    올리기

1)git hub 사이트에서 repository1개 생성하고 url을 복사

 

 

2)Eclipse에서 git perspective->open perspective->other->[git]

3)clone a git repository -를 클릭하고 복사한 URLURL란ㄴ에 입력하고 NECT를 눌러서 마침

=>화면에 REPOSITORY가 생성

복사하면 자동으로 복사가 된다.                 

 

 

4)하면을 다시 자바화면으로 변경

5)업로드 하고 싶은 프로젝트를 선택하고 마우스 오른쪽은 클릭한 후 [TEAM]-[ SHARE PROJECT]를 선택

 

6)대화상자에서 업로드 하고 싶은 REPOSITORY를 선택한다.

현재 프로젝트를 LOCAL에 있는 GIT과 연결한 것임

 

7)프로젝트 GIT HUB사이트에 업로드

COMMIT AND PUSH ->LOCAL 하고 서버

COMMIT->LOCAL에만  

PUSH ..서버에

프로젝트를 선택하고 마우스 오른쪽 을  클릭하면 [TEAM] -[COMMIT]

대화상자에서 변경된 파일들을 아래로 드래그

MESSAGE를 작성하고 COMMIT AND PUSH클릭하면 GIT HUB에 업로드

COOMIT을 누르면 로컬에만 반영

 

 

 

 

 

반응형

'Study > Java' 카테고리의 다른 글

java-6  (0) 2020.09.26
java-5  (0) 2020.09.24
java-4  (0) 2020.09.22
java-3  (0) 2020.09.20
java-1  (0) 2020.09.19

+ Recent posts