JAVA - 조건문 예제
JAVA
조건문 예제
1. 정수를 3개를 입력 받고 오름차순으로 정렬하세요
ex) a = 3, b = 8, c = 6 >> a = 3, b = 6, c = 8
javaboiii 가 쓴 코드
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
// 1. 정수를 3개 입력받아주세요
// a = 3 b =8 c=5
// a,b,c가 오름차순이 되도록 데이터를 변경해주세요.
// >>> 정수를 2개 입력
// 1. 정수 3개 입력받기
Scanner sc = new Scanner(System.in);
System.out.println("정수 3개를 입력받아 오름차순으로 정렬하는 프로그램입니다");
System.out.print("정수 1 >>");
int num1 = sc.nextInt();
System.out.print("정수 2 >>");
int num2 = sc.nextInt();
System.out.print("정수 3 >>");
int num3 = sc.nextInt();
int maxinum = 0;
int midnum = 0;
int minnum = 0;
// 2.입력받은 정수 오름차순으로 정렬하기
if(num1 > num2 && num1 > num3) {
maxinum = num1;
}
else if(num1 < num2 && num2 > num3) {
maxinum = num2;
}
else if(num1 < num3 && num2 < num3) {
maxinum = num3;
}
if (num1 < num2 && num1 < num3) {
minnum = num1;
}
else if(num2< num1 && num2 < num3) {
minnum = num2;
}
else if(num3 < num1 && num3 < num2) {
minnum = num3;
}
if(maxinum > num1 && minnum < num1) {
midnum = num1;
}
else if(maxinum > num2 && minnum < num2) {
midnum = num2;
}
else if(maxinum > num3 && minnum < num3) {
midnum = num3;
}
System.out.println(minnum);
System.out.println(midnum);
System.out.println(maxinum);
}
}
강사님 코드
import java.util.Scanner;
//1. 정수를 3개 입력받아주세요
//a = 3 b =8 c=5
//a,b,c가 오름차순이 되도록 데이터를 변경해주세요.
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("정수 3개를 입력받아 오름차순으로 정렬하는 프로그램입니다");
System.out.print("정수 1 >>");
int a = sc.nextInt();
System.out.print("정수 2 >>");
int b = sc.nextInt();
System.out.print("정수 3 >>");
int c = sc.nextInt();
//a가 가장 작아야하니까
//a가 b보다 작아? 아니라면 a<->b
if(a>b) {
int tmp = a;
a=b;
b=tmp;
}
//a가 c보다 작아? 아니라면 a<->c
if(a>c) {
int tmp = a;
a=c;
c=tmp;
}
//b가 c보다 작아야하니까
//b가 c보다 작아? 아니라면 b<->c
if(b>c) {
int tmp = b;
b=c;
c=tmp;
}
System.out.println("a = " +a);
System.out.println("b = " +b);
System.out.println("c = " +c);
}
}
결과는 같은거 같은데 허허
이상허다
2. 정수 3개를 입력받고 총합과 평균을 출력하세요(평균은 소수점까지)
ex) 10 11 11 => 총합 : 32 , 평균 : 10.666667
자바보이 코드
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
// 2.정수를 3개 입력받아주세요.
// 총합과 평균 출력 (평균은 소수점까지)
Scanner sc = new Scanner(System.in);
System.out.println("정수 3개를 입력받아 총합고 평균을 출력합니다");
System.out.println("정수 1 >>");
int num1 = sc.nextInt();
System.out.println("정수 2 >>");
int num2 = sc.nextInt();
System.out.println("정수 3 >>");
int num3 = sc.nextInt();
int total = 0;
total = num1 + num2 + num3;
float avg = total/3;
System.out.println("총합 : " + total);
System.out.printf("평균 : %f" , avg);
}
}
아니 왜? 왜 안됨?
강사님 코드
import java.util.Scanner;
//2.정수를 3개 입력받아주세요.
//총합과 평균 출력 (평균은 소수점까지)
public class Test03 {
public static void main(String[] args) {
//정수를 3개 입력받아서
// -> int 변수 X 3
//총합과 평균을 출력
// -> int 변수, double 변수
// 결론 -> int 변수 4개 , double 변수 1개
int num1,num2,num3; //사용자에게 입력받을 값 저장공간
int sum; //총합
double avg; //평균
// 사용자에게 정수 3개를 입력받는 코드
Scanner sc = new Scanner(System.in);
System.out.println("정수 3개를 입력받아 총합고 평균을 출력합니다");
System.out.println("정수 1 >>");
num1 = sc.nextInt();
System.out.println("정수 2 >>");
num2 = sc.nextInt();
System.out.println("정수 3 >>");
num3 = sc.nextInt();
// 입력받은 정수들을 총합 데이터에 저장하는 코드
sum = num1+num2+num3;
// 총합데이터 / 3 = 평균을 도출하는 코드
avg = sum/3.0;
//대입연산자보다 산술연산자가 먼저 실행되기 때문에
//int와 int가 계산됨 -> 형변환 후 연산 or 강제 형변환
System.out.println("총합 = "+sum);
System.out.println("평균 = "+avg);
}
}
강사님 코드 주석을 보면 알 수 있듯이
대입연산보다 산술연산이 우선순위가 높기 때문에
산술 연산자에서 int 와 int 를 계산해 버린다
따라서 형변환이 필요하다 3.0 or (double) (sum/3)
3. 정수 2개, 연산자 1개(연산자는 +, - 만 사용가능 )를 입력받고 전체 계산 결과를 출력하세요
자바보이
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
// 3. 정수 2개를 입력받아주세요
// 연산자 1개를 입력받아주세요(연산자는 +, -만 사용가능)
// 전체 계산 결과를 출력해주세요
Scanner sc = new Scanner(System.in);
System.out.println("정수 2와 연산자를 입력받아 결과값을 출력합니다");
System.out.println("정수 1 >>");
int num1 = sc.nextInt();
System.out.println("정수 2 >>");
int num2 = sc.nextInt();
System.out.println("연산자 입력 (단, +, - 만 입력가능) >> ");
String yeonsanja = sc.next(); //공백을 제외한 모든 String을 입력받는 함수
// if(yeonsanja !="+" || yeonsanja != "-") {
// System.out.println("잘못된 연산자 입력");
// return;
//
// }
if(yeonsanja.equals("+")) {
int res =num1 + num2;
System.out.println(num1 +yeonsanja + num2 + "=" + res);
}else {
int res = num1 - num2;
System.out.println(num1 +yeonsanja + num2 + "=" + res);
}
}
}
sc.nexLine() 으로는 값이 받아지지 않았고 아무것도 하지 않아도 넘어감
sc.next 이용
Scanner의 next는 공백을 허용하지 않음
강사님 코드
import java.util.Scanner;
public class Test04 {
// 3. 정수 2개를 입력받아주세요
// 연산자 1개를 입력받아주세요(연산자는 +, -만 사용가능)
// 전체 계산 결과를 출력해주세요
public static void main(String[] args) {
// 정수 2개를 입력받고
// 연산자 1개를 입력받음
Scanner sc = new Scanner(System.in);
int num1,num2; // 사용자에게 입력 받을 정수
String op; // 연산자
// 문자열은 일반변수(원시타입변수)가 아니며,
// 연산자는 일반변수만 계산할 수 있음
// 연산자로는 객체를 계산할 수 없음
int res = 0; // 결과
System.out.println("정수 2와 연산자를 입력받아 결과값을 출력합니다");
System.out.print("정수 1 입력 >>");
num1 =sc.nextInt();
System.out.print("정수 2 입력 >>");
num2 =sc.nextInt();
op = sc.nextLine(); // 버퍼 공간 지우기
System.out.println("연산자 입력 (단, +, - 만 입력가능) >> ");
op = sc.nextLine(); // 버퍼에 이미 전달할 값이 남아있어서 사용자가 입력했구나 라고 생각함
System.out.println("op = ["+op+"]"); //데이터 확인 로그
// 1. 코드에러 XX
// 2. op는 데이터가 들어가있음
// 3. "공백" 데이터
// 정수 + 연산자 + 정수
// 연산자가 + 이면
// 정수 + 정수
// if(op가 +,-가 아닌 연산자를 입력했다면) {
//
// }
if(!(op.equals("+") || op.equals("-"))) {
// >> +이거나 -이어야하는데, 둘다 아니라면
//>> +도 아니고, -도 아니면 op!="+" && op!="-"
//유효성검사
res=0;
}
else if(op.equals("+")) {
res=num1+num2;
}
else{
res=num1-num2;
}
// else {
// //유효성검사
// res=0;
// }
// 결과값 출력
System.out.println(num1+" "+op+" "+num2+" = " + res);
// 연산자가 - 이면
// 정수 - 정수
// 전체 계산 결과를 출력
}
}
오류가 나지 않지만 원하는 결과값이 나오지 않을 땐
로그를 찍어 코드흐름을 파악하고, 변수 값을 확인한다
로그를 통해 op변수에 공백이 들어갔다는 사실을 알 수 있었고
버퍼를 지워주면 해결된다는 것을 알게 되었지
새롭게 알게된 사실
사용자가 값을 입력하면 곧바로 메모리에 저장되는것이 아니라
버퍼 공간을 거쳐서 메모리로 이동함
따라서 nextLine()을 윗줄에 한번 더 써서 버퍼 공간을 지워줘야됨
앞으론 요약해서 올리자 화이팅