0.연산을 사용한 예제 풀이
package edu.kh.op.pratice;
import java.util.Scanner;
public class OperatorPractice3 {
public void practice1() {
Scanner sc = new Scanner(System.in);
System.out.println("가격을 입력 하세요 : ");
int int1 = sc.nextInt();
System.out.println("멤버십 있으세요?");
boolean str1 = sc.nextBoolean();
double str2 = str1 == true ? int1*0.9 : int1*0.95;
System.out.println("할인을 포함한 최종금액 : " + str2);
}
public void practice2() {
Scanner sc = new Scanner(System.in);
System.out.println("출급할 급액 입력 : ");
int int1 = sc.nextInt();
System.out.println("50000원 : " + int1/50000 );
System.out.println("10000원 : " + int1%50000/10000 );
System.out.println("5000원 : " + int1%10000/5000 );
System.out.println("1000원 : " + int1%5000/1000 );
}
public void practice3() {
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 수 : ");
int int1 = sc.nextInt();
System.out.println("두번째 수 : ");
int int2 = sc.nextInt();
String int3 = int1%int2 == 0 ? "배수입니다" : "배수가 아닙니다";
System.out.println(int3);
}
}
다음은 practice2에 대해 강사님이 풀어준 풀이 방식이다. 문제를 풀이하는 부분에서 변수를 재대입한다는 것을 생각도 못해봐서 비교하기 위해 계시한다
/ * int fiftyTh = int1 / 50000;
* int1 = int1 % 50000; 이는 int1을 50000원으로 나누고 남은 나머지를
* int1에 재대입하여 코드를 간략화 하기 위한 것이다
* int1 %= 50000; 이 코드는 위의 int1 = int1 & 50000; 과 동일하다
*
* int tenTh = int1 / 10000;
* int1 %= 10000;
*
* int fiveTh = int1 / 5000;
* int1 %= 5000;
*
* int oneTh = int1 / 1000;
*
* System.out.println("50000원 : " + fiftyTh);
* System.out.println("10000원 : " + tenTh);
* System.out.println("5000원 : " + fiveTh);
* System.out.println("1000원 : " + oneTh);
* */
1.제어문
조건문 : 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 조건에 따라 다른 문장을 수행하도록 한다
조건문의 종류 : if문, switch문
if문 : 조건식의 결과가 true라면 if의 코드가 false면 else의 코드가 실행된다
switch문 : 조건식 하나로 많은 경우의 수를 처리할 때 사용하며 조건식의 결과는 일치하는 case문으로 이동한다. break;를 만날 경우 진행을 종료한다
이번 강의는 예제풀이 위주로 진행되었으며 따라서 제시된 예제의 본인 풀이와 강사님의 풀이를 비교한 것을 계시한다
다음은 if else문의 예제이다
public void ex6() {
//점수를 입력받아
//90점 이상 : A
//80점 이상 90점 미만 : B
//70점 이상 80점 미만 : C
//60점 이상 70점 미만 : D
//60점 미만 : F
//0점 미만, 100점 초과 : "잘못 입력하셨습니다" 출력
System.out.println("점수를 입력하시오 : ");
int score = sc.nextInt();
String result;
if(score>=90 && score<100 ) result= "A";
else if(score>=80 && score<100) result ="B";
else if(score>=70 && score<90) result ="C";
else if(score>=60 && score<80) result ="D";
else if(score<60 && score>=0) result ="F";
else result = "잘못 입력하셨습니다";
System.out.println(result);
/* 위의 코드에서 A 점수파트를 먼저 작성하다보니
* if조건문에 계속 범위 설정을 해주어야 한다
*
* 하지만 오류 조건을 먼저 입력하게 되면 코드 작성이 한결 편해진다
*
* if(score<0 || score>100) result="잘못 입력하셨습니다";
* else if(score><60 && score>=0) result ="F";
* else if(score>=60) result ="D";
* else if(score>=70) result ="C";
* else if(score>=80) result ="B";
* else result ="A";
* 라고 코드를 짜는 것이 더욱 깔끔하다
*/
}
다음 예제 역시 위의 예제에서 한 실수를 반복하였다
public void ex8() {
System.out.println("나이를 입력하세요 : ");
int age = sc.nextInt();
String result;
if(age>100 || age<0) {
//System.out.println("나이를 잘못 입력하셨습니다");
result="나이를 잘못 입력하셨습니다";
}else {
System.out.println("키를 입력하세요 : ");
double height = sc.nextDouble();
if(height>250.0 || height<0) {
result="키를 잘못 입력하셨습니다";
//System.out.println("키를 잘못 입력하셨습니다.");
}else {
if(age<12 && height<140.0) {
result="나이와 키 모두 적절치 않음";
//System.out.println("나이와 키 모두 적절치 않음");
}else if(age<12 && height>140.0) {
result="키는 적절하나, 나이가 적절치 않음";
//System.out.println("키는 적절하나, 나이가 적절치 않음");
}else if(age>=12 && height<140.0) {
result="나이는 적절하나, 키가 적절치 않음";
//System.out.println("나이는 적절하나, 키가 적절치 않음");
}else result = "탑승가능";
//System.out.println("탑승 가능!!");
} //다시 result선언을 통한 코드의 단축을 사용하지 않고 일일히 print문을 작성하였다. 유의하자.
}
System.out.println(result);
}
다음은 switch문의 예제이다
public void practice3() {
System.out.println("1~12 사이의 정수 입력 :");
int month = sc.nextInt();
switch(month) {
case 1 : System.out.println("1월은 31까지 있습니다");break;
case 2 : System.out.println("2월은 28까지 있습니다");break;
case 3 : System.out.println("3월은 31까지 있습니다");break;
case 4 : System.out.println("4월은 30까지 있습니다");break;
case 5 : System.out.println("5월은 31까지 있습니다");break;
case 6 : System.out.println("6월은 30까지 있습니다");break;
case 7 : System.out.println("7월은 31까지 있습니다");break;
case 8 : System.out.println("8월은 31까지 있습니다");break;
case 9 : System.out.println("9월은 30까지 있습니다");break;
case 10 : System.out.println("10월은 31까지 있습니다");break;
case 11 : System.out.println("11월은 30까지 있습니다");break;
case 12 : System.out.println("12월은 31까지 있습니다");break;
default : System.out.println(month+"월은 잘못 입력된 달입니다");
switch문의 경우 case가 동일한 구문을 출력하길 바란다면 case 1,2,3 와 같이 붙여 사용해도 괜찮으며 다음은 그 예시이다
public void practice3() {
System.out.println("1~12 사이의 정수 입력 :");
int month = sc.nextInt();
switch(month) {
case 1,3,5,7,8,10,12 : System.out.println(month+"월은 31까지 있습니다");break;
case 4,6,9,11 : System.out.println(month+"월은 30일까지 있습니다");break;
case 2 : System.out.println(month+"월은 28일까지 있습니다");break;
default : System.out.println(month+"월은 잘못 입력된 달입니다");
마지막 예제는 if else 문이다
public void practice5() {
System.out.println("중간 고사 점수 :");
int score1 = sc.nextInt();
System.out.println("기말 고사 점수 :");
int score2 = sc.nextInt();
System.out.println("과제 점수 :");
int score3 = sc.nextInt();
System.out.println("출석 횟수 :");
int score4 = sc.nextInt();
double score11=score1*2/10;
double score22=score2*3/10;
double score33=score3*3/10;
double score44=score4;
double average = score11+score22+score33+score44;
String result;
if(score44<=14) {
result= "";
System.out.print("Fail [출석 횟수 부족 ("+(int)score44+"/20)]");
}
else {
if(average<70) {
result="Fail [점수 미달]";
}
else {
result="PASS";
}
//System.out.printf("중간고사 점수(20) :%.1f", score11); 이라고 적어도 괜찮다
System.out.println("중간 고사 점수(20) :"+score11);
System.out.println("기말 고사 점수(30) :"+score22);
System.out.println("과제 점수(30) :"+score33);
System.out.println("출석 점수(20) :"+score44);
System.out.println("총점 :"+average);
System.out.println(result);
}
}
이 구문에서 기억해야 할 것은 첫 else 이후 if와 else를 사용하여 첫 else에 포함되는 경우의 수에 마지막 print를 적용시키는 것이다. 저거 생각 못해서 elseif else하고 print구문 다 쳤다.