조건문

DONGDONG_JU·2023년 5월 30일
0

자바

목록 보기
4/16

if조건문에 대해 배웠다.

		Scanner sc = new Scanner(System.in);
		
		System.out.print("점수를 입력하세요: ");
		int score = sc.nextInt();
		sc.close();
		
		if(score >= 70) {
			System.out.println("합격입니다~!");
			System.out.println("축하합니다~!");
		}
			System.out.println("프로그램종료~!");

기본적인 입력받아서 조건에 맞는 print 나오게 하는거!

쫌더 자세히 조건 넣고 싶으면 if elseif else 쓰기

		Scanner sc = new Scanner(System.in);
		
		System.out.print("점수를 입력하세요: ");
		int score = sc.nextInt();
		sc.close();
		
		if(score >= 90) {
			System.out.println("참잘했습니다~!");
		}else if(score >=80) {
			System.out.println("잘했습니다~!");
		}else if(score >=70) {
			System.out.println("보통입니다~!");
		}else if(score >=60) {
			System.out.println("좀 더 노력하세요");
		}else {
			System.out.println("재수강 대상입니다.");
		}
		
		System.out.println("프로그램종료");

랜덤 함수 배웠음

System.out.println((int)(Math.random()* 3));

하면

0~3까지 숫자중 랜덤으로 나옴


과제1-버림,반올림,올림 출력

사용자에게 하나의 실수를 입력 받아 다음의 결과를 출력하는 코드를 작성하세요.

실행결과1-
하나의 실수를 입력하세요> 3.64
버림: 3
반올림: 4
올림: 4

실행결과2-
하나의 실수를 입력하세요: 6.2364
버림: 6
반올림:6
올림:7

실행결과3-
하나의 실수를 입력하세요: 4.0
버림: 4
반올림:4
올림: 4

		Scanner sc = new Scanner(System.in);
		double num;
		
		System.out.print("실수를 입력하세요: ");
		num=sc.nextDouble();
		sc.close();
		
		System.out.println("버림: "+(int)num);
		System.out.println("반올림: "+(int)(num+0.5));
		
		//9.0/1
		
		if(num == (int)num) {
			System.out.println("올림: "+(int)(num));
		}else{
			System.out.println("올림: "+(int)(num+1));
		}

반올림,올림에서 조금 힘들뻔 했는데 0.5이랑 1 더하면 됐음.. 허무해


과제2-윤년여부 판단

윤년 구하기
[윤년 계산 프로그램]
사용자에게 년도를 입력 받아 윤년여부를 판단하여 출력하는 코드를 작성하세요.

[실행 결과1]
년도를 입력하세요: 2023
입력하신 ---년도는 평년입니다.

[실행 결과2]
년도를 입력하세요: 2020
입력하신 ---년도는 윤년입니다.

[윤년 판단 알고리즘]
1.4의 배수인 해는 윤년입니다.
2.100의 배수인 해는 평년입니다.
3.400의 배수인 해는 윤년입니다.

=> 2023년 : 평년, 2020년: 윤년 , 1900년: 평년, 2000년: 윤년
100으로 나누어 떨어지되 400으로 나누어 떨어지지 않는 해는 평년으로 한다.
가령 400으로 나누어 떨어지는 2000년은 그레고리력으로 윤년이지만, 100으로는 나누어 떨어지되 400으로는 나누어 떨어지지 않는 1900년은 평년이다.
물론 율리우스력으로는 1900년이든 2000년이든 모두 윤년이다.

[코드 작성 조건]
1. if ... else if ... else 구문 이용하여 문제를 해결 하세요.
2. if.. else 구문을 이용하여 문제를 해결하세요.

  1. if...else if...else 로 구하기
		Scanner sc = new Scanner(System.in);
		
		int num=0;
		
		System.out.print("년도를 입력하세요: ");
		num=sc.nextInt();
		
		
		if(num%400 == 0) {
			System.out.printf("입력하신 %d년은 윤년입니다.",num);
		}else if(num%100 == 0 && num%400 != 0) {
			System.out.printf("입력하신 %d년은 평년입니다.",num);
		}else if(num%4 == 0) {
			System.out.printf("입력하신 %d년은 윤년입니다.",num);
		}else{
			System.out.printf("입력하신 %d년은 평년입니다.",num);
		}
		
		sc.close();

예시에 1900년이 평년이라 나와서 검색해서 풀었다.. 100으로는 나눠지지만 400으로 나눠지지 않아서 평년이였다.

  1. if..else로만 하기
		Scanner sc = new Scanner(System.in);
		
		int year;
		String result = "";
		
		System.out.print("년도를 입력하세요: ");
		year = sc.nextInt();
		
		sc.close();
		
		if( (year %4 ==0 && year%100 !=0) || year%400==0 ) {
			result ="윤년";
		}else {
			result ="평년";
		}
		
		System.out.printf("입력하신 %d년은 %s입니다",year,result);

그냥 if안에 조건 다 때려박으면 됐음!


과제3-입력받은 년월로 마지막 일수 찾기

<switch문 써보기>
월의 마지막 일자 계산 프로그램 작성하기

[실행 예1]
년도와 월을 입력하세요: 2023 1
2023년 1월의 마지막 일자는 31일입니다.

[실행 예1]
년도와 월을 입력하세요: 2020 2
2020년 2월의 마지막 일자는 29일입니다.

[각 월의 마지막 일자]
1. 큰달: 1,3,5,7,8,10,12 === 31일
2. 작은달: 4,6,9,11 === 30일
3. 2월: 윤년-29일 평년-28일

		Scanner sc = new Scanner(System.in);
		
		int num1,num2;
		
		System.out.printf("년도와 월을 입력하세요: ");
		num1 = sc.nextInt();
		num2= sc.nextInt();
		
		switch(num2) {
			case 1:
			case 3:
			case 5:
		    case 7:
		    case 8:
		    case 10:
		    case 12:
		    	System.out.printf("%d년 %d월의 마지막 일자는 31일 입니다",num1,num2);
		    	break;
		    case 4:
		    case 6:
		    case 9:
		    case 11:
		    	System.out.printf("%d년 %d월의 마지막 일자는 30일 입니다",num1,num2);
		    	break;
		    case 2:
		    	if(num1%400 == 0 || (num1%100==0 && num1%400 !=0) || num1%4 ==0 ) {
		    		System.out.printf("%d년 %d월의 마지막 일자는 29일 입니다",num1,num2);
		    	}else {
		    		System.out.printf("%d년 %d월의 마지막 일자는 28일 입니다",num1,num2);
		    	}
			}

case부분이 넘 공간차지를 많이 했는데 나중에 알고보니

case 4: case 6: case 9: case 11:

이런식으로 써도 됐음! 보기에는 내가 쓴게 편해보이지만 공간적으로는 붙이는게 좋을듯!
case 끝부분엔 꼭 break; 넣어주기


과제4 ...ing

1.가위
2.바위
3. 보
입력하세요: 3

사용자 보, 컴퓨터 가위
가위바위보 결과 -- 졌습니다.

[코드 작성 조건]
1.switch문 이용하여 문제를 해결하세요.
2.if문을 이용하여 문제를 해결하세요.

1번.

		int  user;
		int com;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.printf(" 1. 가위\n 2. 바위\n 3. 보\n >>>>");
		user = sc.nextInt();
		
		com = (int)(Math.random() * 3) + 1;  // 1.가위,2.바위,3.보
		
		
		switch(user-com) {
		 case -2:
		 case 1:
		  System.out.printf("사용자: %d, 컴퓨터 %d \n 가위바위보 결과 ==> 이겼습니다",user,com);
		  break;
		 case -1:
		 case  2:
			 System.out.printf("사용자: %d, 컴퓨터 %d \n 가위바위보 결과 ==> 졌습니다",user,com);
			 break;
		 case 0:
			 System.out.printf("사용자: %d, 컴퓨터 %d \n 가위바위보 결과 ==> 비겼습니다.",user,com);
			 break;
		}

결과 가 나오긴 하는데

문자열로 바껴서 나와야하는데 뭐가 자꾸 오류나서 일단 숫자로만 나오게 해봄!
수업 듣고 다시 해봐야지

2...ing


수업후

Scanner sc = new Scanner(System.in);
		
		int user, com;
		String userStr = "",comStr ="", result="";
		String intro ="\n\t[가위바위보 게임]\n"
				+ "\n"
				+ "\t1.가위\n"
				+ "\t2.바위\n"
				+ "\t3. 보\n"
				+ "\n\t입력하세요:";
		
		com = (int)(Math.random()*3);
		
		System.out.print(intro);
		user = sc.nextInt()-1;  //제로베이스위해서 사용자입력을 0부터시작하게함
		
		sc.close();
		
		switch(user) {
		case 0: userStr = "가위"; break;
		case 1: userStr = "바위"; break;
		case 2: userStr = "보"; break;
		}
		
		switch(com) {
		case 0: comStr = "가위"; break;
		case 1: comStr = "바위"; break;
		case 2: comStr = "보"; break;
		}
		
		switch(user-com) {
		case 0: result= "비겼습니다"; break;
		case 1: case -2: result= "이겼습니다"; break;
		case -1: case 2: result= "졌습니다"; break;
		}
		
		System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",userStr,comStr);
		System.out.println("\t게임의 결과는 "+result);

되게 복잡한듯 생각했지만 알고보면 쉬웠다! 문자열 넣는거도 SWITCH문에 넣어서 하면 됐다!


과제-가위바위보 이길때까지

내가해본거

Scanner sc = new Scanner(System.in);
		
		int user = 0, com=0;
		String userStr = "",comStr ="", result="";
		String intro ="\n\t[가위바위보 게임]\n"
					+ "\n"
					+ "\t1.가위\n"
					+ "\t2.바위\n"
					+ "\t3. 보\n"
					+ "\n\t입력하세요:";
		
		com = (int)(Math.random()*3);
		
		while(true) {
			
			System.out.print(intro);
			user = sc.nextInt()-1;  //제로베이스위해서 사용자입력을 0부터시작하게함
		
			switch(user) {
			case 0: userStr = "가위"; break;
			case 1: userStr = "바위"; break;
			case 2: userStr = "보"; break;
			}
			
			switch(com) {
			case 0: comStr = "가위"; break;
			case 1: comStr = "바위"; break;
			case 2: comStr = "보"; break;
			}
			
					
			if(user-com==0) {
				System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",userStr,comStr);
				result= "비겼습니다";
				System.out.println("\t게임의 결과는 "+result);
			}else if(user-com==1 || user-com==-1){
				System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",userStr,comStr);
				result= "이겼습니다";
				System.out.println("\t게임의 결과는 "+result);
				break;
			}else {
				System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",userStr,comStr);
				result= "졌습니다";
				System.out.println("\t게임의 결과는 "+result);
			}
			
		}	

인터넷 참고해서 했는데 do while을 쓰라고 하셨다.

-do while-

Scanner sc = new Scanner(System.in);
		
		int user, com;
		boolean isWin = false;  //플래그 변수?
		String userStr = "",comStr ="", result="";
		String intro ="\n\t[가위바위보 게임]\n"
				+ "\n"
				+ "\t1.가위\n"
				+ "\t2.바위\n"
				+ "\t3. 보\n"
				+ "\n\t입력하세요:";
		
		
		do {
			
			com = (int)(Math.random()*3);
			
			System.out.print(intro);
			user = sc.nextInt()-1;  //제로베이스위해서 사용자입력을 0부터시작하게함
			
			
			switch(user) {
			case 0: userStr = "가위"; break;
			case 1: userStr = "바위"; break;
			case 2: userStr = "보"; break;
			}
			
			switch(com) {
			case 0: comStr = "가위"; break;
			case 1: comStr = "바위"; break;
			case 2: comStr = "보"; break;
			}
			
			switch(user-com) {
			case 0: result= "비겼습니다"; break;
			case 1: case -2: result= "이겼습니다"; isWin=true; break;
			case -1: case 2: result= "졌습니다"; break;
			}
			
			
			
			System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",userStr,comStr);
			System.out.println("\t게임의 결과는 "+result);
			
		}while(!isWin);
		
		sc.close();
		System.out.println("\n이용해주셔서 감사합니다~~!\n");

next()는 엔터를 아무리쳐도 안끝남
nextLine()엔터를 치면 끝남


과제-사용자가 원할때까지 가위바위보

Scanner sc = new Scanner(System.in);
		
		int user, com;
		boolean isWin = false;
		String userStr = "",comStr ="", result="", run="";
		String intro ="\n\t[가위바위보 게임]\n"
				+ "\n"
				+ "\t1.가위\n"
				+ "\t2.바위\n"
				+ "\t3. 보\n"
				+ "\n\t입력하세요:";
		
		while(true) {
			com = (int)(Math.random()*3);
			
			System.out.print(intro);
			user = sc.nextInt()-1;  //제로베이스위해서 사용자입력을 0부터시작하게함
			
			
			
			switch(user) {
			case 0: userStr = "가위"; break;
			case 1: userStr = "바위"; break;
			case 2: userStr = "보"; break;
			}
			
			switch(com) {
			case 0: comStr = "가위"; break;
			case 1: comStr = "바위"; break;
			case 2: comStr = "보"; break;
			}
			
			switch(user-com) {
			case 0: result= "비겼습니다"; break;
			case 1: case -2: result= "이겼습니다"; break;
			case -1: case 2: result= "졌습니다"; break;
			}
			
			
			
			System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",userStr,comStr);
			System.out.println("\t게임의 결과는 "+result);
			
			sc.nextLine();
			System.out.print("\n\t계속하시겠습니까? 종료를 원하시면 Q,q: ");
			run = sc.nextLine();
			
			if(run.length()==1 && (run.charAt(0) =='q' || run.charAt(0) =='Q' || run.charAt(0) =='ㅂ')) {
				break;
				
			}
			
			
		}
		
			System.out.println("\t감사합니다");

next()랑 nextLine() 차이가 조금 헷갈린다.

if조건문에 length의 길이와 run.charAt(0)을 써서 0번째 문자열이 뭐인지 검사하는 조건을 넣었으면 됐다.
조건 다끝나면 '감사합니다'가 나오는거 까지 하기.

참고문헌- 자바의정석 (남궁성)

profile
웹개발자로 취업하고싶어 공부중인 HDJ 입니다

0개의 댓글