1번. 삼각형의 밑변과 높이를 입력받아서 넓이를 출력하세요. (소수점까지 표현)
//삼각형의 넓이 = 밑변 * 높이 / 2 ;
=> 입력받기 작성 하기 전에 먼저 값이 나오게끔 작성해보자!
int down = 3;
double high = 4;
double result = down * high / 2;
System.out.println(result);
=> 그러면 이제 입력받기해서 값이 나오도록 해보자!
Scanner scan = new Scanner(System.in);
System.out.print("삼각형의 밑변 : ");
int down = scan.nextInt();
System.out.println("삼각형의 높이 : ");
double high = scan.nextDouble();
System.out.printf("삼각형의 넓이 = %d * %.1f / 2 = %.1f", down, high, down * high / 2 );
=> 출력!
삼각형의 밑변 : 1
삼각형의 높이 : 1
삼각형의 넓이 = 1 * 1.0 / 2 = 0.5
=> String s1 = scan.nextLine(); // String형태
int i1 = scan.nextInt(); // int 형태
double d1 = scan.nextDouble(); // double 형태
2번. 사다리꼴의 윗변과 밑변과 높이를 입력받아서 넓이를 출력하세요. (소수점까지 표현)
// 사다리꼴의 넓이 = (윗변 길이 + 밑변 길이) * 높이 / 2;
=> 이것도 위에 문제랑 마찬가지로 입력받기 작성하기 전에 먼저 값이 나오게끔 작성해보자!
int top = 3;
int down = 4;
double high = 2;
double result = (top + down) * high / 2;
System.out.println(result);
=> 원하는 값이 잘 나오면 입력받기해서 값이 나오도록 해보자!!!
Scanner scan = new Scanner(System.in);
System.out.print("사다리꼴의 윗변 : ");
int top = scan.nextInt();
System.out.print("사다리꼴의 밑변 : ");
int down = scan.nextInt();
System.out.print("사다리꼴의 높이 : ");
double high = scan.nextDouble();
System.out.printf("사다리꼴의 넓이 = (%d + %d) * %.1f /2 = %.1f", top, down, high, (top+down)*high /2);
=> 출력!
사다리꼴의 윗변 : 6
사다리꼴의 밑변 : 5
사다리꼴의 높이 : 5
사다리꼴의 넓이 = (6 + 5) * 5.0 /2 = 27.5
3번. 우리반은 24명입니다. 과자가 100개 있습니다.
// 모두에게 공정하게 동일한 숫자의 과자를 나누어주면
// 한 명당 몇 개의 과자를 받게되는지와 나누어주고 나서 몇개의 과자가 남는지 출력하세요.
// 남은 과자는 ㅇ개입니다
int student = 24;
int snack = 100;
int result1 = snack / student;
int result2 = snack % student;
System.out.println("한명당 과자 갯수 : " + result1);
System.out.println("남는 과자 갯수 : " + result2);
System.out.printf("남는 과자는 %d개 입니다.", result2);
=> 출력!
한명당 과자 갯수 : 4
남은 과자 갯수 : 4
남는 과자는 4개 입니다.
4번. 세자리의 정수를 입력 받아서 백의자리, 십의자리, 일의자리를 각각 출력하세요.
// 158
// 백의자리 : 1
// 십의자리 : 5
// 일의자리 : 8
=>
Scanner scan = new Scanner(System.in);
System.out.print("세자리의 정수 : ");
int num = scan.nextInt();
System.out.printf("백의자리 : %d\n", num/num);
System.out.printf("십의자리 : %d\n", (num % 100) / 10);
System.out.printf("일의자리 : %d\n", (num % 100) % 10)
=> / 와 % 를 활용해서 만들어보는거야
=> 158을 일단 정수형태로 입력받기 해준다음
=> 백의 자리 1은 158을 158로 나누면 1이 몫으로 나오고
=> 천의 자리 5는 158을 100으로 나눠서 나머지가 58이 나오면 58을 또 10으로 나누면 몫이 5가 되고
=> 나머지는 8이 나오니까 이건 일의 자리에 넣어주면 되겠죠~
5번. 1~24 중 하나의 정수를 입력받습니다. 범위를 넘어선 값을 입력할 수도 있음.
입력받은 숫자를 보고 아래 기준에 맞게 출력하세요.
1) 범위를 벗어나면, "잘못입력했습니다." 라고 출력
2) 시간<=12 오전입니다. 시간>12 오후입니다.
3) 1~6시 이른 오전입니다. 7~12 늦은 오전입니다.
4) 13~18시 이른 오후입니다. 19~24 늦은 오후입니다.
=> 1번째 방법
Scanner scan = new Scanner(System.in);
int hour;
System.out.print("시간 입력 (1~24) 입력하세요 : ");
hour = scan.nextInt();
if (hour >= 1 && hour <= 6) {
System.out.println("오전입니다.");
System.out.println("이른 오전입니다.");
} else if (hour >= 7 && hour <= 12) {
System.out.println("오전입니다.");
System.out.println("늦은 오전입니다.");
} else if (hour >= 13 && hour <= 18) {
System.out.println("오후입니다.");
System.out.println("이른 오후입니다.");
} else if (hour >= 19 && hour <= 24) {
System.out.println("오후입니다.");
System.out.println("늦은 오후입니다.");
} else { //그게 아니면 (위에가 모두 아니면)
System.out.println("잘못입력했습니다.");
}
=> else if로 묶는 방법!
=> (1미만 <) 1~6 7~12 13~18 19~24 (< 24)초과 이렇게 나눠서 &&연산으로 묶어서 처리하는 방법!
=> 그리고 시간<=12 오전입니다. 시간>12 오후입니다. 껴주려면 각각 식에 System.out.println(오전,오후입니다.); 넣어준다!
=> 그리고 맨 마지막에 위에가 모두 아닌 경우 잘못입력했습니다 가 나와야 하니까 else로 써준다
// 1) 범위를 벗어나면, "잘못입력했습니다." 라고 출력
// 2) 시간<=12 오전입니다. 시간>12 오후입니다.
// 3) 1~6시 이른 오전입니다. 7~12 늦은 오전입니다.
// 4) 13~18시 이른 오후입니다. 19~24 늦은 오후입니다.
=> 2번째 방법
Scanner scan = new Scanner(System.in);
int hour;
System.out.print("시간 입력 (1~24) 입력하세요 : ");
hour = scan.nextInt();
if( hour >= 1 && hour <= 24) { //정상
if (hour <= 12) { // 오전
System.out.println("오전입니다.");
if (hour <= 6) { //1~6
System.out.println("이른 오전입니다.");
} else { //7~12
System.out.println("늦은 오전입니다.");
}
} else {//오후
System.out.println("오후입니다.");
if (hour <= 18) { // 13~18
System.out.println("이른 오후입니다.");
} else { // 19~24
System.out.println("늦은 오후입니다.");
}
}
} else { //비정상 범위
System.out.println("잘못입력했습니다.");
}
=> ① 먼저 크게 정상범위와 비정상범위를 나눠준다
정상범위 : if (hour >= 1 && hour <= 24)
비정상범위 : else
=> ② 그 다음 오전, 오후 구분!
if (hour >= 1 && hour <= 24) {
//오전 내용 들어가
System.out.println("오전입니다.");
if (hour <= 6) { //1~6
System.out.println("이른 오전입니다.");
} else { //7~12
System.out.println("늦은 오전입니다.");
}
}
=> ③ 정상 if 줄 안에 오전 if 오후 else 줄 다 포함!
오전 if 줄 끝내고 오후 else 줄 작성!
else {
//오후 내용 들어가
System.out.println("오후입니다.");
if (hour <= 18) { // 13~18
System.out.println("이른 오후입니다.");
} else { // 19~24
System.out.println("늦은 오후입니다.");
}
}
6번. x와 y 변수 안에 들어있는 서로의 값을 바꾸기
int x = 10;
int y = 20;
System.out.println("x="+x+ " y="+y);
=>
int x = 10;
int y = 20;
int z = x;
int y = z;
int x = y;
System.out.println("x=" + x + " y=" + y);
=> 아예 다른공간을 하나 만들고 서로 바꿔주면서 저장한다!
=> A->B C->A B->C
출생년도와 주민등록번호 뒷자리 첫번째 숫자를 입력받아서, 나이와 성별을 출력하세요.
//기준은 2023년으로 함.
//나이는 단순하게 2023년과의 차이로 함 (만 나이, 월 따지지 않음)
//2000년생 = 24살
//1996년생 = 28살
//*잘못입력된 경우 필터링은 생략합니다~
//주민번호 뒷자리 첫번째 수 구분.
//남자 : 1 이거나 3
//여자 : 2 이거나 4
//예시 1)
//출생년도를 입력하세요 : 2000
//주민번호 뒷자리 첫번째 숫자를 입력하세요 : 4
//결과 : 24살 여자입니다.
//예시 2)
//출생년도를 입력하세요 : 1998
//주민번호 뒷자리 첫번째 숫자를 입력하세요 : 1
//결과 : 26살 남자입니다.
=>
Scanner scan = new Scanner(System.in);
System.out.print("출생년도를 입력하세요 : ");
int year = scan.nextInt();
System.out.print("주민번호 뒷자리 첫번째 숫자를 입력하세요 : ");
int firstNum = scan.nextInt();
if (firstNum == 1) {
System.out.println("결과 : " + (2023 - year + 1) + "살 남자입니다.");
} else if (firstNum == 2) {
System.out.println("결과 : " + (2023 - year + 1) + "살 여자입니다.");
} else if (firstNum == 3) {
System.out.println("결과 : " + (2023 - year + 1) + "살 남자입니다.");
} else {
System.out.println("결과 : " + (2023 - year + 1) + "살 여자입니다.");
}
=> year //출생년도 firstNum //주민번호 뒷자리 첫번째
=> 123까지 지정하고 else로 하면 저절로 4가 나오겠지!
=> 나이는 (2023 - year + 1) 이 식!
★ 근데 더 클린하게 코드 짤 수 있다! 리팩토링
if (firstNum == 1 || firstNum == 3 ) {
System.out.println("결과 : " + (2023 - year + 1) + "살 남자입니다.");
} else {
System.out.println("결과 : " + (2023 - year + 1) + "살 여자입니다.");
}
=> 1과 3을 합쳐줘서 System.out.println("결과 : " + (2023 - year + 1) + "살 남자입니다."); 한번 덜 쓰게 하고
=> 바로 else로 만들어서 여자 출력되게 하는 코드 작성!
★ 더 클린하게 코드작성 가능! 리팩토링
int age = (2023 - year + 1);
if (firstNum == 1 || firstNum == 3 ) {
System.out.println("결과 : " + age + "살 남자입니다.");
} else {
System.out.println("결과 : " + age + "살 여자입니다.");
}
=> 아예 age 변수를 지정해줘서 (2023 - year + 1) 이것도 덜 쓰이게 해줬다!
★ 여기서 더! 리팩토링
int age = (2023 - year + 1); //나이 저장
String gender; //성별 저장
if (firstNum == 1 || firstNum == 3 ) {
gender = "남자";
} else {
gender = "여자";
}
System.out.printf("결과 : %d살 %s입니다.\n", age, gender);
=> gender 변수를 지정해서 gender = "남자"; gender = "여자"; 이런식으로 지정해주고
=> System.out.printf("결과 : %d살 %s입니다.\n", age, gender); 이렇게 한번에 결과가 나오게끔 해준다!
※ 주의할 점!
int age = (2023 - year + 1); //나이 저장
String gender; //성별 저장
if (firstNum == 1 || firstNum == 3 ) {
gender = "남자";
} **else if** (firstNum == 2 || firstNum == 4{
gender = "여자";
}
System.out.printf("결과 : %d살 %s입니다.\n", age, gender);
=> else if 라고 쓰면 gender에 오류 떠..!
그래서 String gender = ""; 이런식으로라도 임시값지정해줘라.. 그럼 급한불은 끔
=> if else 구문이랑 if elseif 구문이랑 달라
if else 는 if 이외에 나머지 다른값들은 else로 가는데
if elseif 는 if 가고 elseif가고 이외에 나머지 다른값들은 인식되는 gender의 값이 없기때문에 오류가 뜨는것!
그래서 위에 gender = ""; 이렇게 임시값 지정해주면 뭐라도 gender의 값이 생기기때문에 해결되긴함
int diceNum = 3; // 주사위 수 1~6
switch(diceNum) {
case 1: // diceNum == 1
System.out.println("1");
break; // 참일때 아예 빠져나가
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
case 4:
System.out.println("4");
case 5:
System.out.println("5");
break;
default:
System.out.println("6");
//case 6:
//default는 없어도 된다
//default는 이중에 없는 숫자!
}
① case 찾아가는 시스템이라고 생각하고!
② 맞는 조건 찾아서 가서 쭉 밑으로 실행하는건데
③ 가다가 break; 만나면 아예 스위치문 밖으로 빠져나가는거야!
④ 위 예시는 diceNum이 3이니까
⑤ case:3으로 가고 break없으니까 345 쭉 실행되다가 5에서 break가 있으니까 345에서 끝나는거야
=> 따라서 답은 345