Java/4. 조건문과 반복문
Day 12 : 문제 풀이 (if문 / switch문)
pancakemaker
2021. 11. 3. 09:52
문제 1
package chap04;
import java.util.Scanner;
/* 문제풀이 제어문 조건문*/
public class FlowEx03 {
public static void main(String[] args) {
int input;
System.out.print("숫자를 하나 입력하세요.> ");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
input = Integer.parseInt(tmp); //String 타입의 tmp 변수값을 int 타입으로 변환
//문제: 조건문(if)을 사용하여 입력값이 0이면 "입력하신 숫자는 0입니다."을 출력하고, 입력값이 0이 아니면 "입력하신 숫자는 0이 아닙니다." 출력하시오.
if(input == 0) {
System.out.println("입력하신 숫자는 0입니다.");
} else if(input != 0) { //그냥 } else { 해도 됨
System.out.println("입력하신 숫자는 0이 아닙니다.");
}
//책 page.111 참고
}
}
숫자를 하나 입력하세요.> 1
입력하신 숫자는 0이 아닙니다.
문제 2
package chap04;
import java.util.Scanner;
public class FlowEx04 {
public static void main(String[] args) {
//점수를 저장하기 위한 변수
int score = 0;
//학점을 저장하기 위한 변수 - 공백으로 초기화
char grade = ' ';
System.out.print("점수를 입력하세요.> ");
Scanner scanner = new Scanner(System.in);
//화면(콘솔)을 통해 입력받은 내용을 tmp에 저장
String tmp = scanner.nextLine();
score = Integer.parseInt(tmp); //String 타입의 tmp 변수값을 int 타입으로 변환
//문제: score 변수가 90점보다 크거나 같으면 A 학점, 80점보다 크거나 같으면 B 학점, 70점보다 크거나 같으면 C 학점, 나머지는 D 학점
if(score >= 90) {
grade = 'A';
} else if(score >= 80) {
grade = 'B';
} else if(score >= 70) {
grade = 'C';
} else {
grade = 'D';
}
/*
*switch문의 조건에는 정수타입(byte, char, short, int, long), String, enum
*Wrapper class Byte, Character, Short, Integer 정수값을 산출하는 타입만 올 수 있다.
*int score1 = score/10; //97 = 97/10 = 9.7 = 9
*int score2 = score%10; //97 -> 97%10 = 7
switch(score/10) { //점수/10은 10(100점), 9(90점이상), 8(80점이상), 7(70점이상) 등이 나올것이다.
case 10:
case 9:
grade = 'A'; break;
case 8:
grade = 'B'; break;
case 7:
grade = 'C'; break;
default:
grade = 'D'; break;
}
*/
System.out.println("당신의 학점은 "+ grade + "입니다.");
}
}
점수를 입력하세요.> 83
당신의 학점은 B입니다.
문제 3
package chap04;
import java.util.Scanner;
//중첩된 if조건문
public class FlowEx05 {
public static void main(String[] args) {
int score = 0;
char grade = ' ';
char opt = '0';
System.out.print("점수를 입력하세요.> ");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
score = Integer.parseInt(tmp); //String 타입의 tmp 변수값을 int 타입으로 변환
//문제: score가 90점보다 크거나 같으면 A0 학점(grade), 90점 이상 중에서 98점 이상이면 A+ 학점(opt), 94점 미만은 A- 학점
//score가 80점보다 크거나 같으면 B0 학점(grade), 80점 이상 중에서 88점 이상이면 B+ 학점(opt), 84점 미만은 B- 학점
//나머지는 C0 학점
if(score >= 90) {
grade = 'A';
if(score >= 98) { //90점 이상 조건문 내 하위조건 1
opt = '+';
} else if(score < 94) { //90점 이상 조건문 내 하위조건 2 : 98점 이상 조건문 하위에 작성하면 안되고 별도로 작성해야한다. -> 98점 이상인 조건문에 하위 조건으로 94미만을 줄 수 없으니까..
opt = '-';
}
} else if(score >= 80) {
grade = 'B';
if(score >= 88) { //80점 이상 조건문 내 하위조건 1
opt = '+';
} else if(score < 84) { //80점 이상 조건문 내 하위조건 2 : 88점 이상 조건문 하위에 작성하면 안되고 별도로 작성해야한다. -> 88점 이상인 조건문에 하위 조건으로 84미만을 줄 수 없으니까..
opt = '-';
}
} else {
grade = 'C';
}
System.out.printf("당신의 학점은 %c%c입니다", grade, opt); //printf : 서식이 있는 출력문
}
}
점수를 입력하세요.> 83
당신의 학점은 B-입니다
문제 4
package chap04;
import java.util.Scanner;
public class FlowEx06 {
public static void main(String[] args) {
int month = 0;
System.out.print("현재 월을 입력하세요.> ");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
month = Integer.parseInt(tmp);
//문제: Switch(month) { case 11: } 문을 사용해서 "현재의 계절은 봄(3,4,5월), 여름(6,7,8월), 가을(9,10,11월), 겨울(12,1,2월) 입니다. " 출력하세요.
switch(month) {
case 3 : case 4 : case 5 :
System.out.println("현재의 계절은 봄입니다.");
break;
case 6 : case 7 : case 8 :
System.out.println("현재의 계절은 여름입니다.");
break;
case 9 : case 10 : case 11 :
System.out.println("현재의 계절은 가을입니다.");
break;
case 12 : case 1 : case 2 : //default: 도 가능
System.out.println("현재의 계절은 겨울입니다.");
break;
}
/* if문 사용한 경우
*
if(month == 3 || month == 4 || month == 5) {
System.out.println("현재의 계절은 봄입니다.");
} else if(month == 6 || month == 7 || month == 8) {
System.out.println("현재의 계절은 여름입니다.");
} else if(month == 10 || month == 11 || month == 12) {
System.out.println("현재의 계절은 가을입니다.");
} else {
System.out.println("현재의 계절은 겨울입니다.");
}
*/
}
}
현재 월을 입력하세요.> 11
현재의 계절은 가을입니다.
문제 5
package chap04;
import java.util.Scanner;
public class FlowEx07 {
public static void main(String[] args) {
int user;
System.out.print("가위(1), 바위(2), 보(3) 숫자를 입력하세요.> ");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
user = Integer.parseInt(tmp);
//user = (int)(Math.random() * 3) + 1; //범위 : 1이상 4미만 = 1, 2, 3
//문제: switch(user) { case: 문을 사용해서 "당신은 가위 / 바위 / 보를 내셨습니다." 를 출력하세요.
switch(user) {
case 1 :
System.out.println("당신은 가위를 내셨습니다.");
break;
case 2 :
System.out.println("당신은 바위를 내셨습니다.");
break;
default :
System.out.println("당신은 보를 내셨습니다.");
}
}
}
가위(1), 바위(2), 보(3) 숫자를 입력하세요.> 2
당신은 바위를 내셨습니다.
문제 6
package chap04;
import java.util.Scanner;
public class FlowEx08 {
public static void main(String[] args) {
char gender;
String regNo = "";
System.out.print("당신의 주민번호를 입력하세요(011231-1111222).> ");
Scanner scanner = new Scanner(System.in);
regNo = scanner.nextLine();
gender = regNo.charAt(7); //regNo.charAt(7) -> String 타입의 regNo 변수에서 index:7 (즉, 8번째) 자리의 값을 가져오는 메소드
//문제: switch(gender) { case: 이용하여 gender 1 또는 3일 경우 - 당신은 남자입니다., 2 또는 4일 경우 - 당신은 여자입니다., 그 외 - 유효하지 않은 번호입니다.
switch(gender) {
case '1': case '3': //gender가 char 타입이므로 ' ' 붙여줘야 한다.
System.out.println("당신은 남자입니다.");
break;
case '2': case '4':
System.out.println("당신은 여자입니다.");
break;
default:
System.out.println("유효하지 않은 번호입니다.");
}
}
}
당신의 주민번호를 입력하세요(011231-1111222).> 012345-1234567
당신은 남자입니다.