1. while문

while문

조건식이 true일 동안 {} 안의 문장을 반복

while(조건식) {

         조건식의 연산결과가 참true일 동안 반복할 문장

}

 

 

while문 예제

while문과 switch문을 이용해서 퀴즈를 푸는 예제이다. while문의 조건은 2가 아닌 것을 고르는 것이다. 정답 외에 다른 번호(1, 3, 4)나 틀린 번호를 입력하면 while문의 조건식이 성립돼 계속 반복되고, 정답인 2번을 입력하면 while문이 종료된다.

 

 

do~while문

선실행 후판단

while문과 동일하지만 일단 한 번은 실행한다.(사용자에게 입력받을 때 주로 사용됨)

do {

          조건식의 연산결과가 참true일 동안 반복할 문장

} while(조건식);

즉, 조건식이 false여도 일단 한 번은 do {} 안의 문장이 실행된다.

 

do~while문 예제

현재 choice는 0으로 초기화되어 있음. 따라서 while문 안의 조건식 choice != 0 은 false인 상태이다. 만약 그냥 while문이었다면 조건이 성립되지 않아 블록 안의 문장이 실행되지 않는다. 하지만 do~while문에서는 일단 최소 한 번은 블록 안의 문장을 실행하기 때문에 false여도 실행된다.

 

 

무한루프

while(true) {

          무한 반복할 문장

}

while문의 뒤 조건식에는 boolean 타입의 값이 온다. 따라서 조건식 자리에 true라는 값을 넣을 수 있고, 이 경우 조건식이 계속 참이기 때문에 무한 반복된다.

무한루프를 탈출하기 위해선, while문 안에 if문으로 특정 조건일 때 break를 만나도록 하여 while문을 탈출할 수 있도록 만들어 줘야한다.

 

 

무한루프 예제

만약 while(true)인 상태에서 if문이 없다면, 어떤 값을 입력하든 계속 반복된다. 하지만 if문을 넣어 i가 0일 경우에 break를 만나게 하면, 사용자가 0을 입력했을 때 while문이 종료되게 된다.

 

 

for문과 while문의 차이

for문은 몇 번 반복할 지 알고 있을 때 사용

while문은 몇 번 반복할 지 알 수 없을 때 사용(ex. 무한반복)

 


 

728x90
이 글은 현재 듣고 있는 강의를 따라가며 기록하는 글입니다. 얕은 지식을 기반으로 한 주관적인 견해가 종종 들어가 있으니 유의부탁드립니다. 틀린 부분이 있거나 의견을 주실 때는 둥글게 둥글게 부탁드립니다. 달거북씨는 쿠크다스 입니다.

 


 

1. 누적 대입 연산자와 증감 연산자

누적 대입 연산자 : +=, -=, *=, /=, ...

ex1. int data = 10;   // data=10

       data = data + 5;   // data=15

       data += 5;   // data=15

       data -= 5;   // data=5

       data *= 10 + x; > data = data * (10 + x); > 대입 연산자는 오른쪽부터 실행됨.

ex2. String result = "A";   // result=A

       result = result + "B";   // result=AB

       result += "B"   // result=AB

 

 

증감 연산자 : ++, --

ex. int data += 1;   // data +1

      data++;   // data +1

 

1) 전위형

    ++data : 증감이 해당 줄부터 적용됨

    ex. int data = 10;

          System.out.println(++data);   // 11

 

2) 후위형

    data++ : 증감이 다음 줄부터 적용됨

    ex. int data = 10;

          System.out.println(data++);   // 10

          System.out.println(data);   // 11

 

3) 단독 사용시에는 전위형, 후위형에 상관없이 증감된다.

    ex. int data = 10;

          ++data

          System.out.println(data);   // 11

          data++

          System.out.println(data);   // 12

 


 

2. 반복문

특정 코드나 행위를 반복해야 할 때 사용하는 문장

- 조건에 의한 반복문 : while, do-while

- 횟수에 의한 반복문 : for

 

for문

반복 횟수가 특정된 경우에 사용

값이 일정하게 변하는 반복일 경우 높은 확률로 for문 사용 ex. 2, 4, 6, 8, ...

 

for(초기식; 조건식; 증감식){

          반복할 문장

}

① 초기식에서 변수를 초기화시켜서 시작값을 지정한다.

   - for문 내부에서만 해당 변수를 사용 가능하다. 변수를 계속 사용하고 싶다면 for문 외부에서 변수를 초기화할 것.

   - 컴퓨터는 0부터 숫자를 세기 때문에 되도록 초기화값은 0을 사용한다.

   - 초기식 > 증감식 > 조건식 순으로 for문을 만들 것을 추천

② 조건식에서 true/false를 판단하여 문장의 반복 여부를 결정한다. 

③ 조건식이 true이면 블럭 안의 문장을 실행한다. false일 경우 for문을 시작조차 안한다.

④ 문장을 실행한 후 다시 증감식으로 올라와서 해당 수만큼 증감시킨다.

⑤ 다시 조건식으로 가서 2~4번을 반복한다.

 

ex. for(int i=0; i<10; i++){

              System.out.println("안녕")

      }   // "안녕"이 10번 출력됨

초기식에서 i는 0으로 시작되어 10보다 작으므로 안녕이 출력된다. 다시 for문으로 올라가 증감식에 따라 i는 1이 된다. 1은 10보다 작으므로 다시 안녕이 출력되고, 이렇게 계속 반복되다가 i가 10이 되면 조건식을 충족시키지 못하기 때문에 for문이 끝난다.

 

 

for문 예제

i는 0부터 시작해서 20 미만이면 for문을 진행한다. i+=2 증감식에 따라 i는 2씩 증가된다.

만약 출력문이 for문 블럭 밖에 있으면 에러가 난다. 변수 i가 for문 안에서 선언되었기 때문에 밖에서는 사용이 불가능하기 때문.

 

 

for문 실습

 


 

3. break와 continue

break

자신이 속한 반복문을 탈출한다. 만약 반복문이 중첩되어 있을 경우, 자신이 속한 하나의 반복문만 탈출한다.

ex.

for1 {

         for2 {

                  break;

         }

}

즉 중첩 for문(아직 안 배움)을 돌다가 for2에서 break를 만나면, 자신이 속한 for2를 탈출해 for1로 돌아간다.

 

 

continue

특정 조건시 반복을 건너뛸 때 사용한다.

continue문을 만나면 반복문 끝으로 이동하기 때문에, continue 아래에 문장들이 있어도 실행하지 않고 다음 반복으로 넘어간다.

 

 

예시

- 조건은 0부터 9까지 반복되어야 하지만, i가 4가 되어 break를 만나면 속한 반복문을 탈출하기 때문에 0123만 출력

- continue에서는, i가 4가 되어 continue를 만났을 때 아래 출력문을 실행하지 않고 반복문 끝으로 간다. 아직 반복문을 탈출한 것이 아니기 때문에 다시 위로 올라가 i가 9가 될 때까지 반복한다.

 


 

728x90

1. 제어문

 - 위에서 아래 방향으로 진행되던 코드의 흐름을 제어하기 위해 사용하는 문장

 - 조건문(선택제어문) : if문(if~else / if~else if~else), switch문(switch~case~default)

 - 반복문(반복제어문) : while문, for문

 

조건문

조건을 만족할 때만 {} 안의 문장들을 수행한다.

조건에 따라 경우의 수를 나누어 선택지를 준다.

1) if문

if(조건문1){

          조건문1의 연산 결과가 true일 때 실행됨

} else if(조건문2){

          조건문2의 연산 결과가 true일 때 실행됨

}  else if(조건문3){

          조건문3의 연산 결과가 true일 때 실행됨

}

.

.

. // else if는 경우의 수에 따라 여러 개 만들 수 있다.

else{

          위의 조건문이 모두 false일 때 실행

}

조건문 중 하나가 참true인 경우 블럭{] 안의 내용을 모두 실행한 후, 아래의 내용들은 실행하지 않고 if문 한 세트를 탈출한다.

else if와 else는 생략 가능. 하지만 if 없이 단독으로는 사용될 수 없다.

 

2) switch문

switch(변수){

case 값1:

          변수의 값이 값1일 때 실행

          break;★(중요)

case 값2:

          변수의 값이 값2일 때 실행

          break;

.

.

.

default:

          변수의 값이 위의 값들이 아닐 때 실행

}

변수에 담긴 값에 따라 알맞은 case로 이동해 문장을 실행한다. break문이나 switch문의 끝(닫는 괄호{})을 만나면 switch문 전체를 빠져나간다. 만약 break;를 써주지 않으면 다음 case문으로 내려가 그 안에 있는 문장들도 실행한다. 따라서 각 케이스들을 나누어 주려면 알맞게 break;를 사용해야 한다.★(중요)

switch문은 항상 if문으로 바꿀 수 있다. 반대는 제약조건을 고려.

switch문의 제약조건

 - switch문의 조건식 결과는 정수 또는 문자열이어야 한다.

 - switch문의 값은 중복될 수 없다.

 

 

if문 예제

Scanner로 정수를 입력 받아 세 가지 경우의 수로 짠 if문. 입력된 정수가 0일 경우, if(num>0) > false, else if(num<0) > false로 마지막 else에 가서 출력이 된다. else는 따로 조건을 붙이지 않는다.

 

 

if문 예제(일괄처리)1

 

코드의 중복을 최소화하기 위해, 위의 코드를 변수 result를 사용해서 바꿔주었다. 그 결과 출력 메소드를 중복 없이 아래에 한 번만 사용해서 일괄처리되었다.

 

 

 

 

 

 

 

 

 

if문 예제2

A가 4번 정답인 경우와 A가 그 외 선택지일 경우, A가 선택지 외 번호일 경우 총 세 가지의 경우의 수가 나온다. A가 1, 2, 3번일 경우를 else if(A==1), else if(A==2), else if(A==3) 이런 식으로 일일이 적어주는 것도 가능하지만 번거롭기 때문에, 저번 포스팅에 설명했던 논리 연산자 ||를 사용하면 간편하다. ||는 두 조건식의 연산결과 중 하나라도 ture이면 true이다. else if(A==1 || A==2 || A==3) > A가 1 or 2 or 3 이면 true이기 때문에 result는 "오답입니다."가 출력된다.

 

 

switch문 예제1

모든 if문은 switch문으로 변환이 가능하다.

case1, 2, 3은 모두 동일한 "오답입니다."를 출력하기 때문에 case 별로 출력 메소드를 써주지 않아도 된다.

위 if문 예제와 마찬가지로 일괄처리도 가능하다.

case 별로 break; 필수!

 

 

조건문 실습

 

1) switch문 실습

case 변수에는 switch문 예제1 처럼 정수를 쓸 수도 있지만 실습문제처럼 문자열도 가능하다. 

소문자 대문자 무시하고 입력받고 싶을 때 사용 가능한 메소드가 있다.

.equalsIgnoreCase() : 비교대상과 값이 같을 경우 true 또는 false를 반환한다.

ex. System.out.println(type.equalsIgnoreCase("ENFJ"));

변수에 정수나 문자열만 사용가능한 것은 switch문의 제약으로, true와 false를 사용할 수 없기 때문에 if문에서 사용하는 것을 추천한다.

 

2) if문 실습

문자열끼리 비교할 때는 "문자열1".equals("문자열2") 형식의 메소드를 사용한다. 

위에서 언급한 .eqalsIgnoreCase()를 적용시켜보면, if(type1.equalsIgnoreCase("ISJF")) 이렇게 사용할 수 있다. 문자열을 입력 받을 때 "isjf" 소문자로 입력받아도 "ISFJ"의 출력 메소드가 출력된다.

 


 

728x90

1. 연산자

연산자란?

연산을 수행하는 기호. (+, -, /, * 등)

ex. 3 * x + 5 > 여기서 3, x, 5 등 연산자 외의 것은 피연산자. 연산자의 연산 수행 대상이다.

모든 연산자는 연산 결과를 반환한다.

 

 

연산자의 우선 순위

하나의 식에 둘 이상의 연산자가 있을 때, 먼저 연산하는 순위를 자동결정 하는 것

원하는 우선 순위가 있을 경우 괄호()를 사용할 수 있지만, 매번 수동으로 하기는 번거롭다.

★ 연산자의 우선 순위를 꼭 외워둘 것 ★

최우선 연산자 > 단항 연산자 > 산술 연산자 > 관계 연산자(비교 연산자) > 논리 연산자 > 삼항 연산자 > 대입 연산자

 

1) 최우선 연산자 : ()

 

2) 단항 연산자 : 피연산자가 하나만 있는 것

    - 형변환 연산자

       ex. int num = -10; > - : 피연산자의 부호를 반대로 변경

             num = -num; // -(-10)

             System.out.println(num) // 10

 

3) 산술 연산자

    - +, -, /, * (사칙연산)

    - % (모듈러스) : a%b > a를 b로 나눈 나머지

       ex. 10%3 = 1

 

4) 관계 연산자(비교 연산자) : 두 피연산자를 비교해서 true 또는 false를 반환

    - >, < : 초과, 미만

       ex. x*2 < y*4 : x*2가 y*4보다 작으면 true

    - >=, <= : 이상, 이하

       ex. a<=b : a가 b보다 작거나 같으면 true

    - == : 같다 (= 한 번만 쓰면 대입 연산자로 인식하기 때문에 두 번 사용)

       ex. a==b : a가 b와 같으면 true

    - != : 다르다

       ex. a!=b : a가 b와 다르면 true

 

5) 논리 연산자 : 조건식을 연결할 때 사용하는 연산자

    - 조건식 : 조건을 제시하는 식

                   결과가 참 또는 거짓(true, false) 둘 중 하나로 나오는 식

                   관계 연산자를 이용해서 만들어지는 식

                   자바에서는 0과 1 대신 false, true 라는 값을 사용

                   조건식은 논리형이라고도 함 > boolean

    - A&&B : and

                   두 조건식의 연산 결과가 둘 다 true라면 true. 둘 중에 하나라도 false라면 false로 출력

    - A||B : or

                두 조건식의 연산 결과 중 하나라도 true라면 true

    - ex. y>5 && y<10 : 비교 연산자를 먼저 수행 후 논리 연산자 수행

    - ex. 5 < y < 10 : error

 

6) 삼항 연산자

    - 조건식? 값1:값2

    - 조건식의 연산결과가 true면 값1 선택 후 반환

    - 조건식의 연산결과가 false면 값2 선택 후 반환

    - 삼항 연산자는 사용부분 통째로가 하나의 값

    - 경우의 수가 딱 두 가지의 값으로 나오는 경우에 사용하는 것이 좋다.

 

7) 대입 연산자 : =

   - 연산이 모두 끝나야 연산 결과를 저장할 수 있기 때문에 우선 순위가 가장 낮다.

 

 

결합성

한 문장 안에 우선 순위가 같은 연산자가 여러 개 있을 때 맞는 방향으로 결합하여 연산하는 성질

 

 

방향

보통 오른쪽에서 왼쪽으로 진행됨

ex. (1+2)+3+4 > 3+3+4 > 6+4 > 10

예외적으로 대입연산자와 단항연산자는 오른쪽에서 왼쪽으로 진행됨

ex. x=y=5 > x=5 > 5

 

 

삼항연산자 예제

위에 적었듯이 삼항 연산자의 형식은 조건식? 값1 : 값2. 조건식이 true이면 값1을 출력, false이면 값2를 출력한다.

예제에서는 두 가지 방법으로 사용됨

① String result = num==0? "123" : "456";

② System.out.println(num==0? 123 : "456";

첫번째 방법은 변수에 값을 담는 방법, 두번째 방법은 바로 출력하는 방법이다. 변수에 값을 담을 경우엔 값1과 값2와 변수의 자료형이 모두 같아야 하지만, 출력 메소드로 바로 출력할 때는 상관없다.

삼항 연산자는 중첩(?)이 가능하다. > String rst = num1>0? "양수입니다." : (num1<0? "음수입니다." : "0 입니다.")

 

 

삼항연산자 실습

 


728x90

둘째날 공부 시작.

달거북씨는 국비 수업을 듣기 전 자바 기초를 배우기 위해 자바 수업을 듣고 있다. 방학특강이라 2주동안 5시간씩 듣는 수업. 국비수업은 하루종일 들어야 할텐데 5시간 수업만으로도 힘들어서 큰 일이다. 웹개발자 관련해서 이것저것 찾아보다가 이건 누가 더 책상 앞에 오래 앉아있는지 싸움이라고 그런 비슷한 말을 보았는데 맞는 말 같다. 

 


1. 형변환

강제 형변환

(자료형)값 > 형변환 연산자. 값의 자료형을 바꿔주는 역할

ex. (double)10 // 10.0 > 정수 10 앞에 (double)을 붙여주어 실수로 변경

 

 

자동 형변환

  정수     +     실수      =      실수

(4byte)       (8byte)          (8byte) > 크기가 더 큰 타입으로 출력된다.

작은 대야의 물을 큰 대야로 옮기는 것보다, 큰 대야의 물을 작은 대야로 옮길 때 물의 손실이 일어날 가능성이 크다. 따라서 손실이 일어날 가능성이 적도록 작은 byte에서 큰 byte로만 자동 형변환이 일어난다.

문자 + 정수 = 정수 > ex. 'A' + 5 = 70

정수, 실수, 문자 + 문자열 = 문자열 > ex. 10 + "" = "10" / '3' + "" = "3"

자료형 참조★

boolean | 참과 거짓 | 1byte

char | 문자 | 2byte

byte | 정수 | 1byte

short | 정수 | 2byte

int | 정수 | 4byte

long | 정수 | 8byte

float | 실수 | 4byte

double | 실수 | 8byte

String | 문자열 | ???

 

 

예제 1

실수double(8byte)를 정수int(4byte)로 형변환하기 위해선 강제형변환 필요.

정수int(4byte)를 문자char(2byte)로 형변환하기 위해선 강제형변환 필요.

문자char(2byte)는 정수int(4byte)로 자동형변환됨.

참고로, 자바에서 정수 연산은 int로 형변환해서 진행된다. 때문에 문자 'A'는 정수 65로 변환되어 계산되고, 문자 '5'는 53으로 변환되어 계산된다.

아스키 코드 소환★

A ~ Z : 65 ~ 90

a ~ z : 97 ~ 122

0 ~ 9 : 48 ~ 57

 

 

실습 1

 

 

예제 2

자료형에서 혼자 대문자로 시작하는 아이가 있었다. "String". 앞선 포스팅에서 언급했지만, 나머지 자료형이 기본형이라면 대문자로 시작하는 이 String은 클래스다. 형변환 시 기본형은 기본형끼리만, 클래스는 클래스끼리만 형변환이 가능하다. 따라서 문자열을 정수, 실수로 출력하기 위해 사용하는 메소드가 있다.

Integer.parseInt() : 문자열을 정수로 바꿔준다. // Integer(클래스).parseInt()(메소드)

Double.parseDouble() : 문자열을 실수로 바꿔준다. // Double(클래스).parseDouble()(메소드)

문자열을 문자로 바꿔주는 메소드는 조금 특별하다. 문자열 전체를 문자로 바꿔주는 것이 아닌, 문자열의 해당 인덱스만 문자로 출력한다. 문자는 한 글자이기 때문인듯하다.

charAt(index) : 문자열의 해당 인덱스를 문자로 출력하는 메소드

예제와 같이 char ch = sc.next().charAt(0); 라고 썼을 때, "헬로자바"라는 문자열의 0번 인덱스로 '헬'이 출력된다. 만약 char ch = sc.next().charAt(3); 이었다면 '바'가 출력됐을 것이다.

 


728x90

+ Recent posts