javaboiii의 JAVA/JAVA 예제

JAVA - 조건문 예제

javaboiii 2024. 6. 26. 21:39

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()을 윗줄에 한번 더 써서 버퍼 공간을 지워줘야됨

 

 

앞으론 요약해서 올리자 화이팅