본문 바로가기
IT/자바

조건문 switch 반복문 while for

by 독서실총무J 2017. 4. 29.
반응형

오늘도 야심한 이 시간에 독서실 총무짓 하면서 글을 쓰고 있다

공기 좋고 날씨 좋은 4월에 목감기가 걸려서 허우적 대고 있는 통이라

중간고사 기간인 고딩들이 초췌한 내모습을 보며 안타까운 눈초리를 보내고 있다

누군가의 걱정스런 눈빛을 받는다는게 왠지 모르게 야릇한 기분이 들어 좋기도 하지만

뭐 난 그런 취향은 없으니 괜한 의심은 접어두도록 하자


어제 쓴 포스팅이 잘 올라갔는지 확인해 보았다가 

엄청난 사실을 뒤늦게 발견하고야 말았다


그동안 쓴 3개의 포스팅이 비공개로 되어있었다는 것인데

정말 당신이 보기에 내가 쫌 모자른놈이라 생각할 수도 있겠지만

나 나름 변명을 해보자면 여태까지 나는 네이버만 다뤄본터라 

이정도 실수는 할수도 있는게 아닐까 싶다 

그런게 아니더라도 병신 보듯 보진 말아줬으면 좋겠다

앞서 말했듯이 나는 지금 환자다 

그 어느때보다 누군가의 따뜻한 눈초리와 보살핌이 필요하다

이런일로 병신 취급 당하긴 싫다.


그리고, 내게 100% 병신력이 있는것은 아니라고 생각하는 또 다른 이유가

보통 디폴트로 공개 처리 되어있는게 당연한거 아닌가?

도대체 왜 티스토리 측에서 이걸 비공개로 해둔건진 모르겠지만

잡소리는 여기까지만 하고 오늘도 복습해보자


class SwitchEx {
	public static void main(String[] args) {
		int num = 4;

		switch(num) {
			default:
				System.out.println("other");
				break;
			case 1:
				System.out.println("1");
			case 0:
				System.out.println("0");			
			case 2:
				System.out.println("2");			
		}
	}
}


첫번째로 복습할 내용은 어제 배웠던 조건문 if와 

마찬가지로 판단하는데 주로 쓰는 switch 이다


switch 와 따라다니는 짝지는 case 인데 ,

switch 옆에 괄호 안에 조건이 참일 때 해당 case의 문장을 실행한다.

default는 참인 case가 없을때에 처리된다.


위에서는 해당되는게 없으니 other이라고 나올것이다.

조건문 switch와 if는 활용해야할 상황에 따라서 쓰이곤 하는데

아무래도 if가 상대적으로 더 많이 쓰는것 같다


어제도 말했듯이 컴공생들의 희망이자 빛, 메시아 같은 존재가 바로 if 이다 


import java.util.*;

public class DaysInMonth {
	public static void main(String[] args) {
		int month;
		int year = 2009;
		int days = 0;

		System.out.print("일수를 알고 싶은 달을 입력하시오:");
		Scanner scan = new Scanner(System.in);
		month = scan.nextInt();

		boolean flag = true;

		switch (month) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				days = 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				days = 30;
				break;
			case 2:
				if (((year % 4 == 0) && (year % 100 != 0)) 
					|| 
					(year % 400 == 0))  {
					days = 29;
				} else {
					// 평년
					days = 28;
				}
				break;
			default:
				flag = false;
				System.out.println("월이 잘못 입력되었습니다.");
				break;
		}
		if(flag) {
			System.out.println("월의날수는 " + days);
		}		
	}
}


이번에도 switch 에 관한 예제인데 ,

숫자를 입력하면 해당 월의 일수를 출력하는 프로그래밍이다


여기서는 switch말고도 주목해야 할 부분이

기초적인 연산에 대한 것인데 , 다들 알고있는 사칙연산과 더불어

자바 에서는 %라는 연산을 할수가 있다 

이는 나머지라는 뜻으로 나누기 했을때 나오는 나머지 값을 얻을수 있다


코드에 대한 분석은 스스로 해보자 

귀찮아서 그런게 아니라 오늘은 아파서 그런거니 너그럽게 

따지지말고 혼자 하도록 하자 나 진짜 아프다 


더불어 switch로 구성된 이 코드를 if로 바꿔보는것도 추천한다

당신이 초보자 단계라면 충분히 도움이 될것이다


import java.util.*;     class Sum1To10 { public static void main(String[] args) { int sum = 0; // 합 int num = 1; // 1 ~ 10 while(num <= 10) { sum = sum + num; num++; } System.out.println(sum); } }


이번 예제부터는 반복문 에 대하여 알아보자

어떠한 실행을 연속적으로 하고자 할때 여러번 코드를 친다면

얼마나 불편할지 당신도 알고 있을 것이다 


이를 해결하기 위해 자바 에서는 반복문을 제공해준다

첫번째로 알아볼 것은 while 인데, 괄호안의 조건이 참이면

scope 안에 내용을 반복하다가 , 거짓이 되면 탈출한다


거짓조건을 원하는 모양대로 잘넣는것이 아무래도 중요하겠지만

그렇게 어려운 것은 아니니 쫄지말고 혼자 해보자

결과는 다들 알다시피 55가 나온다


// while 문을 이용한 구구단 출력 프로그램
import java.util.*;

public class LoopExample2 {
	public static void main(String[] args) {
		int n;
		int i = 9;
		System.out.print("구구단 중에서 출력하고 싶은 단을 입력하시오: ");
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		while (i >= 1) {
			System.out.printf("%d*%d= %d \n", n, i, n * i);
			i--;
		}
	}
}


이번에는 구구단 프로그램을 짜보자

출력하고 싶은 단을 입력하면 해당하는 결과가 나와야 한다

우리가 의도하고 싶은 출력 폼은 ' 정수 * 정수 = 정수 ' 형태인데

여기서 while문 안에  있는 print문을 유심히 보자


첫번째 포스팅에서 얘기했던걸로 기억하는데 , 

printf를 자바에서도 사용이 가능하더라

해당 사용법에 대해서 모른다면, 구글에 검색해보자

친절하게 검색 키워드를 알려주자면 printf 라고 치면 된다

너무 친절했는가? 고마워할 필욘 없다 


import java.util.*;

public class LetterGame {
	public static void main(String[] args) {
		int answer = 59;
		int guess;
		int tries = 0;
		Scanner scan = new Scanner(System.in);	
		do {
			System.out.print("정답을추측하여보시오:");
			guess = scan.nextInt();
			tries++;
			if (guess > answer) {
				System.out.println("제시한정수가높습니다.");
			}
			if (guess < answer) {
				System.out.println("제시한정수가낮습니다.");
			}
		} while (guess != answer);

		System.out.printf("축하합니다.시도횟수=%d\n", tries);
	}
}


while 의 사촌뻘 쯤 되는 do - while이 등장하였다

크게 다른건 없지만, do부분에 while문에 조건이 맞지 않더라도

최초로 한번은 실행되었으면 좋겠다 싶은 문장을 넣어주면 된다


while문과 형태가 다르다는건 시력에 이상이 없는한 알수 있을것이다

별다르게 어려운것이 없는 예제이니 이것도 손수 쳐보고 출력해보자


그리고 ++ , -- 에 대한 설명을 해주자면 

++ 는 +1 , -- 는 -1 을 더해준다고 생각하면 된다

변수 앞에 오는지 뒤에 오는지에 따라 실행되는 순서가 다르니

이부분도 잘알아야겠다 

물론, 순서에 대한 설명은 하지 않겠다 

구글님에게 잠시 다녀오도록 하자


import java.util.*;

public class Factorial {
	public static void main(String[] args) {
		long fact = 1;
		int n;

		System.out.printf("정수를 입력하시요:");
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();

		for (int i = 1; i <= n; i++) {
			fact = fact * i;
		}

		System.out.printf("%d!은 %d입니다.\n", n, fact);

	}
}


반복문에서 두번째로 배울 for이다

이것 역시 코딩하면서 많이 쓰게 될것이다 


해당 설명을 하기전에 조금은 안타깝고 슬픈 이야기를 해보도록 하자

검색 사이트에 자바 프로그래머의 현실이라고 쳐보면 정말 

암울한 이야기들을 많이 볼수 있다


그중 아침 인력시장 봉고차가 등장해서 '자바 두명이요' 외치는 

그림은 방송에도 나올정도로 유명한 그런 그림인데,

이거 못지 않게 내게 충격을 주었던 일화를 하나 말해보고자 한다


어떤 글쓴이가 자바 학원을 반년 수료하고 SI업체에 면접을 갔다가

for문 쓸줄 아는지 물어보길래 쓸줄 안다고 대답했더니 바로 합격을 했다는 일화인데,

더 언급하면 이글을 보고 있는 고수들이 펑펑 울지도 모르니 여기까지만 하고


일화를 이야기 하다가 글이 길어질수도 있으니

설명도 알아서 찾아보도록 하자


import java.util.*; public class Factorial { public static void main(String[] args) { long fact = 1; int n; System.out.printf("정수를 입력하시요:"); Scanner scan = new Scanner(System.in); n = scan.nextInt(); for (int i = 1; i <= n; i++) { fact = fact * i; } System.out.printf("%d!은 %d입니다.\n", n, fact); } }


오늘 복습 내용에 마지막은 간지나게 팩토리얼 이다.

팩토리얼에 대해 잘 모르겠다면 이번에도 구글에게 도움을 요청하자


대학교 재학시절인지 학원 시절인지 잘 기억은 안나는데 

한분이 내게 그런 말씀을 하신적이 있다


전문가가 되고 싶다면 코딩은 기본이고 ,

수학을 잘해야 한다는 내용이었는데 

그말을 왜 그냥 흘려들었는지 지금도 후회가 된다


그때 때려치웠어야 했는데..

그가 나에게 조금더 강력하게 말했더라면 어땠을까 싶다


지금 이글을 보고 있는 대학교 1학년들 중 

코딩이 너무 별로다 싶은 사람은 졸라게 노력해보고 

안되면 빠르게 전과를 하는 걸 추천한다


프로그래머 생태계가 힘들다 어쩐다 그건 두번째 문제이고

이건 적성에 맞지 않으면 너무도 괴롭기 때문에 

전과를 한번 곰곰히 생각해보는것도 좋은 선택지이다


오늘은 너무 암울한 이야기들만 써놓은것 같은데 ,

그래도 열심히 하다보면 분명 길은 있으니 괜히 기죽지 말고 

열심히 살아나가길 바란다 


오늘 포스팅 글이 길어졌으니 당신의 댓글도 길어 지길 바라며

오늘은 여기서 끝! 내일봅시다~

반응형

댓글