Post

[Java] 누적, 증감 연산자 반복문 제어문

*누적연산자

1
2
3
int money= 10000;
	money-500;
	System.out.println(money);

이렇게 코드를 한번 만들었는데요. 과연 변수 money 를 출력하면 10000이 나올까요 아니면 9500이 나올까요?

답은 10000입니다. 선언 밑에 money-500; 은 그냥 하나의 값이기 때문입니다. 따라서 이 결과값을 다시 money라는 변수에 넣어줘야 하는데요. 그럴땐

1
2
3
int money= 10000;
	money= money-500;
	System.out.println(money);

이렇게 해야 원래 있던 money에서 500이 뺀 값을 다시 그 변수에 대입이 됩니다. 이것을 복합 대입 연산자라고 하는데요. 이렇게 하면 좀 코드가 길어지겠지요? 그래서 누적연산자를 이용합니다.

*누적연산자

1
2
3
int data = 1;
	data = data +2;
	data += 2;

자, 복합 대입 연산자에서는 data= data +2; 로 다소 가독성이 없었는데요..

data +=2; 로 쓸 수 있습니다. 그러면 data값에 2를 더한 값이 다시 data로 들억게 되죠.

마찬가지로 data -=2, *=2, /=2; 다 가능합니다.

*증감연산자

증감 연산자는 값에 1씩 더하거나 1씩 빼는 연산자 인데요. 증감 연산자에는 전위형과 후위형이 있습니다.

1
2
3
4
++data;
System.out.println(data);
data++;
System.out.println(data);

첫번째로 쓴게 전위형입니다. 원래 data 값에 1을 증가시키는 것은 둘 다 같지만, 연산 순서에 따른 차이는 있습니다.

++data는 연산에 들어가기 전에 먼저 1값을 증가 시키는 것이구요. 따라서 출력을 하게 되면 1이 증가된 값이 출력이 됩니다. 반대로 후위형은 먼저 출력이 되고 연산을 합니다. 보통 후위형을 많이쓰고 전위형은 특별한 경우가 아니면 쓰지 않는다고 합니다.

*반복문

*for문

for문에 대해서 알아보겠습니다. C언어와 매우 유사합니다.

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

}

보통 이렇게 많이 씁니다. 초기식을 만들고 조건식에 부합을 하면 중괄호 안의 코드가 실행됩니다. 그리고 증감식이 이루어지고 또 조건식을 검사하고 .. 이렇게 반복을 합니다. 이제 한번 만들어보죠.

1
2
3
for(int i=0;i<10;i++){
System.out.println("신동희");
}

저는 제 이름을 10번 반복하여 출력을 하고 싶은데요, 정수 타입의 i는 0부터 시작합니다. i<10이라는 조건식에 참일때 에는 아래의 출력코드를 실행하죠. 그리고 나서 증감연산자를 이용해서 i++을 해주었는데요 그다음 i값은 1이겠죠? 그리고 또 조건식을 봅니다. 참이면 아래의 코드를 또 실행하구요

그렇게 i값이 증가하다가 10이되면 i<10이라는 조건식에 부합하지 않으므로 for문을 빠져나오게 되는거죠. 따라서 i는 0부터 9까지 총 10번이 실행되었네요. 여기서 응용을 크게 해볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
char aa='a';
char bb='B';
		
		for(int i=0;i<26;i++){
		if(i%2==0) {
			System.out.print(aa);
			aa+=2;
		}
		else {
			System.out.print(bb);
			bb+=2;
		}
		}

자 제가 한번 만들었습니다. 저는 aBcDeFgHiJkLmN ~ yZ 순으로 번갈아가며 소문자와 대문자를 출력하고 싶은데요.

먼저 문자 변수 aa와 bb를 선언한 뒤 a는 소문자, B는 대문자로 초기값을 주었습니다. 그리고 for 문에서 알파벳은 26개니까 i는 0부터 26까지 주었구요. 그다음엔 if문으로 만약 i가 짝수(0포함)이면 aa를 출력하고 2를 누적증가 시켰습니다. 이는 한칸씩 건너 띄어서 출력이 되므로 a다음은 c가 나와야 하기 때문입니다.

그리고 else를 주어서 i가 홀수일 때에는 대문자 B를 출력하고 마찬가지로 2를 누적증가 시켰습니다.

정리하자면 i가 0일 때는 a, 1일 때는 B, 2일 때는 c, 3일 때는 D… 이런식으로 출력이 됩니다.

Desktop View

정상적으로 출력이 되었습니다 ^^ 정말 재밌네요 ㅎㅎ

*while문

이번엔 다른 반복문인 while 문에 대해서 써보겠습니다.

while(조건식){

반복할 문장

}

for문보다는 조금 더 간단하게 생겼죠? while 문은 정해진 반복횟수를 모를 때 사용합니다. for문 같은 경우는 딱 몇번 반복하는지 정하는데 whlie 문에는 그런 식이 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
while(choice !=answer) {
		System.out.println(qMsg);
		choice=sc.nextInt();
		if(choice == answer) {
			result="정답";
		}
		else if(choice >= 1 && choice <=4) {
			result="오답";
		}
		else {
			result="다시 시도해주세요.";
		}
		System.out.println(result);
		}

제가 저번에 한번 퀴즈를 만든 적 있었죠? 그때는 아마 삼항연산자로 만들었던 것 같은데, 그때는 한번 입력하면 정답과 오답을 출력하고 끝났는데 여기에 while문을 넣어주면 정답이 나올 때까지 반복을 시킬 수 있습니다. choice가 answer가 아니면 반복하고 맞으면 한번 실행하고 멈춥니다.

*기타 제어문

*break : 컴파일러가 만나는 즉시 해당 중괄호 영역 탈출합니다. 가장 가까운 순환문을 탈출합니다.

따라서 if 문에서 break를 사용하면 if문을 탈출하지 않고

if문을 감싸고 있는 영역을 탈출합니다.

1
2
3
4
5
6
// 	1~10까지 중 4까지만 출력
		for (int i = 0; i < 10; i++) {
			
		System.out.println(i+1);	
		if(i==3) {break;}
		}

1~10까지 반복을 하지만 4까지만 출력을 한다고 하면, i가 4까지 출력되고 순환문을 종료해야겠죠? 그래서 if문으로 조건을 준 다음에 break를 써서 for문을 종료시키는 것입니다. 중요한건 순서인데요, if문을 출력문 전으로 주면 출력문에 가기전에 break를 만나서 4를 출력하지 못합니다. 따라서 출력문 후에 썼고요. 출력문 전에 쓰고 싶으면 조건을 i==4로 하면 되겠습니다.

*continue : 다음 반복으로 넘어갑니다. 따라서 아래의 코드를 실행하지 않고 다음 반복으로 넘어가게 되는데요.

1
2
3
4
5
//1~10까지 중 4를 제외하고 출력
		for (int i = 0; i < 10; i++) {
			if(i==3) {continue;}
		System.out.println(i+1);	
		}

이번에는 1~10까지 출력을 하는데 4를 제외하고 출력을 해보도록 하겠습니다. 평소처럼 i+1을 출력하다가 i가 3이되면 continue를 하는데요. 그러면 출력문으로 내려가지 않고 다시 반복문으로 돌아가서 i++가 됩니다.

Desktop View

두개 모두 정상적으로 출력됨을 알 수 있었습니다.

이번시간에는 여기까지 하겠습니다. 다음에는 배열로 돌아올게요~

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.