무작정 개발.Vlog

[JAVA+국비교육] 증감연산자/산술연산자 & for문/if문

by 무작정 개발
반응형
2021.12.23(3일 차)

 '혼자 공부하는 자바'라는 교재를 받았다. 하지만 강사님은 챕터대로 하지 않고, 최대한 연관성 있게, 배운 내용을 최대한 섞은 예제를 통해 강의를 진행하신다 하셨다. 한 달 동안 java를 배우신다 했다. 학부생 시절 공부를 열심히 하지 않아서

개발실력이 좋은 편은 아니나 java를 배웠어서 아직까지는 무난하다.

 

오늘의 수업 내용

 

연산자

증감 연산자
증감 연산자
산술 연산자
산술 연산자
연산자 종류
연산자 종류
논리 연산자
논리 연산자
삼항 연산자
조건 연산자
연산자
연산자

 

강사님은 연산자를 알려주면서 for문을 같이 쓰며 알려주셨다. 처음에 왜 이렇게 하지 했는데 수업을 다 들어보니 응용문제를 손쉽게 설명하시면서 한 문제로 2가지를 알려주셨다.

 

for문 (반복문)

[ for문 구조 ] 

 

for(초기식; 조건식; 증감식) {

     수행문 1;

     수행문 2;

}

package com.day2;

public class Test1 {

	public static void main(String[] args) {

		float f = 0;
		double d = 0;
		
		//for(시작값; 최대값; 증가값)
		for(int i=1;i<=100000;i++) { //i=i+1
			
			f+=100000;	//f = f + 100000; 
			d+=100000;	//d = d + 100000;
			
		}
		
		System.out.println("float: " + (f/100000));
		System.out.println("double: " + (d/100000));
		
	}

}
package com.day2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test2 {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(
				new InputStreamReader(System.in));
		// system.in은 1바이트 문자를 읽어낸다.
		// InputStreamReader은 1바이트 문자를 2바이트로 바꿔서 읽어낸다.
		int num1,num2;

		System.out.print("첫번째 수?");// 20
		num1 = Integer.parseInt(br.readLine());

		System.out.print("두번째 수?");// 5
		num2 = Integer.parseInt(br.readLine());

		System.out.printf("%d + %d = %d\t", num1, num2, (num1 + num2));
		System.out.printf("%d - %d = %d\n", num1, num2, (num1 - num2));
		System.out.printf("%d * %d = %d\t", num1, num2, (num1 * num2));
		System.out.printf("%d / %d = %d\n", num1, num2, (num1 / num2));
		System.out.printf("%d %% %d = %d\t", num1, num2, (num1 % num2));
		// printf" "안에는 %d,%g 등의 값과의 혼동을 줄이기 위해 나머지 %를 %%으로 표기
		
		System.out.println("num1>num2: " + (num1>num2));
		System.out.println("num1==num2: " + (num1==num2));
		
		
		String str;
		
		//삼항연산자(조건?true값; : false값)
		str = num1 % 2 == 0 ? "짝수" : "홀수";

		str = num1 > 0 ? "양수" : (num1 < 0 ? "음수" : "영");
		
		 //1. 조건이 true이면 "양수"를 실행, 2. false이면 (num1<0?부분을 실행하는데 여기도
		 //3. 거짓이면 "음수" : "영" 실행

		//  (그리고)  A and(&&) B : A, B 둘다 true이여만 결과가 true
		//  (또는)    A OR(||) B : A,B 둘중 하나만 true이면 결과가 true
	
		str = num1%4==0 && num1%100!=0 || num1%400==0?"윤년" : "평년";
		
		System.out.println(num1 + ":" + str);


		//https://blog.naver.com/lbr71004/222158448268
		//※ 주의사항

		//1. 삼항연산자를 사용하여 코드의 라인이 줄어들었다고 컴파일 속도가 빨라지는 것은 아닙니다.

		//2. 삼항연산자를 중복해서 처리할 경우. 가독성이 떨어질 수 있으므로 중복처리는 피하는것이 좋습니다.
	}
}

삼항 연산자

의미

조건을 만족하면 참값, 만족하지 못하면 거짓 값 반환

 

설명

조건? 참값 : 거짓 값

package com.day2;

import java.io.IOException;

public class Test3 {

	public static void main(String[] args) throws IOException {

		//@@자료형 char / String은 항상 "" 큰따옴표 써야함
		//String str = "hyuen woo";

		//char에서는 ''작은 따옴표를 써야하고 1바이트 or 2바이트 문자 1개만 저장 가능.(오로지 한 자만 저장 가능)
		char ch, result;

		System.out.print("한개의 문자?");// a(97)
		
		ch = (char)System.in.read();//알파벳 한 자를 읽어내는 명령어 // read()의 반환값은 int라서 (char)을 써서 형변환
		// 97이라는 숫자를 받아오는데  ch는 문자만 받을수 있어 형변환을 통해 char로 바꿔야한다.

		//System.out.println(ch); // a 출력

		//System.out.println(Integer.toString(ch));
		//문자a를 입력했을때 그 문자의 아스키코드값을 보고싶을 때 쓴다. 그래서 97이 출력된다.
		
		
		//97
		result = ch>=65 && ch<=90?  (char)(ch+32):  // 
				//       조건   //
			(ch>='a' && ch<='z'?(char)(ch-32):ch);
		
		System.out.println(ch + ":" + result);
	}
	// 삼항 연산자
	// (피연산자) ? (피연산자) : (값or연산식)
	//				true
//								false
	
	
}

if - else 문

if문 만으로는 복잡한 내용을. 처리하는 데는 한계가 있다. if문 만을 사용할 때는 true일 때만 실행된다. 하지만 if else문은 false일 때

도 실행이 가능하다.

 

[ if - else 문 구조 ]

 

if(조건식) {

    실행문;   // 조건식이 true일 경우 실행

} else {

    실행문;  // 조건식이 false일 경우 실행

}

 

조건식이 true이면 if절의 실행문을. 실행하고, false면 else 절의 실행문이 실행된다.

package com.day2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test4 {

	public static void main(String[] args) throws IOException {
		
		// 제어문 반복문
		//조건문(제어문) : for문, switch문
		//반복문 :while문, for문, do - while문

		
		BufferedReader br = new BufferedReader(
				new InputStreamReader(System.in));
		
		int num;
		String str = "";

		System.out.print("수 입력?");
		num = Integer.parseInt(br.readLine()); // 반환하는값은 문자라서 int로 변환
		
		/*//if문 조건(단일 if문)
		if(num%2 == 0) {
			str = "짝수";
		}
		if(num%2 != 0) {  // != 0 이라고 써도되고 == 1 이라 써도됨
			str = "홀수";
		} */
		
		if(num %2 == 0) {
			str = "짝수";
		} else {
			str = "홀수";
		}
		
		System.out.println(num + ":" + str); //Initialize variable 변수값 초기화 하라는 오류
		
	}

}

Q. 퀴즈풀이

1번

1. 정수를 입력받아서 짝수, 홀수를 구별해서 출력.


예) 3 입력 시 -> 3 => 홀수
예) 4 입력 시 -> 4 => 짝수

 

package com.day2;

import java.util.*;

public class Number1 {

	public static void main(String[] args) {
		
		Scanner number = new Scanner(System.in);
		
		int num = 0;
		
		System.out.print("정수를 입력하세용 : ");
		
		num = number.nextInt();

		if(num%2 == 0) {
			System.out.println(num +" => 짝수");
		}
		if(num%2 != 0) {  
			System.out.println(num +" => 홀수");
			
			number.close();
		}
	}
}

[ 설명 ]

Scanner number = new Scanner(System.in); -> 사용자로부터 입력받기 위해 scanner 사용

int num = 0; -> num에 입력된 값을 넣기 위해 선언하고 초기화를 한다.

num = number.nextInt(); -> num에 입력된 값을 int형의 자료형으로 받기에 사용

 

if(num%2 == 0) {
System.out.println(num +" => 짝수");  -> num을 2로 나누었을 때  0인 것은 짝수   
}
if(num%2!= 0) {  
System.out.println(num +" => 홀수");  -> num을 2로 나누었을 때 0이 아닌 것은 홀수


2번

2. 두 개의 정수를 입력받고, 큰 숫자와 작은 숫자를 구분해서 출력.(if문 이용)
예) 20, 30 입력 시 -> 큰 숫자 30, 작은 숫자 20

 

package com.day2;
import java.util.*;

public class Number2 {

	public static void main(String[] args) {
		
		Scanner result = new Scanner(System.in);
		
		int num1, num2 = 0;
		
		System.out.println("숫자 2개를 입력하세요!"); //30 20
		
		num1 = result.nextInt();//30
		num2 = result.nextInt();//20
		
		//2개 중 누가 큰지 비교
		if(num1>num2) {
			System.out.println("큰숫자 : " + num1);
			System.out.println("작은숫자 : " + num2);
		}
		
		if(num1<num2) {
			System.out.println("큰숫자 : " + num2);
			System.out.println("작은숫자 : " + num1);
		}
	}
}

[설명]

 

Scanner number = new Scanner(System.in); -> 사용자로부터 입력받기 위해 scanner 사용

int num1, num2 = 0; -> num1, num2에 입력된 값을 넣기 위해 선언하고 초기화를 한다.

num1 = result.nextInt(); -> num1에 입력된 값을 넣기 위해 선언하고 초기화를 한다.
num2 = result.nextInt(); -> num2에 입력된 값을 넣기 위해 선언하고 초기화를 한다.

 

if(num1> num2)
System.out.println("큰 숫자 : " + num1);             -> if(만약) num> num2(num1이 num2보다 클 때)
System.out.println("작은 숫자 : " + num2);              큰 숫자(num1) / 작은 숫자(num2) 출력
}
if(num1 <num2) {
System.out.println("큰 숫자 : " + num2);              -> 위와 동일(반대로)
System.out.println("작은 숫자 : " + num1);


3번

3. 네 개의 정수를 입력받고, 제일 큰 숫자와 제일 작은 숫자를 구분해서 출력.(if문 이용)
예) 20, 30, 40, 50 입력 시 -> 제일 큰 숫자 50, 제일 작은 숫자 20

 

package com.day2;

import java.util.Scanner;
public class Number3 {

	public static void main(String[] args) {
		
		Scanner result = new Scanner(System.in);
		int num1, num2, num3, num4, temp;
		
		System.out.println("4개의 수를 입력하세요!");
		
		num1 = result.nextInt();//50
		num2 = result.nextInt();//40
		num3 = result.nextInt();//30
		num4 = result.nextInt();//20
		
		
		//4개의 수를 비교
		if(num1<num2) {
			temp = num1;
			num1 = num2;
			num2 = temp;
		}
			
		if(num3<num4) {
			temp = num3;
			num3 = num4;
			num4 = temp;
		}
		
		if(num1<num3) {
			temp = num1;
			num1 = num3;
			num3 = temp;
		}
		
		if(num2<num4) {
			temp = num2;
			num2 = num4;
			num4 = temp;
		}
		
		System.out.println("제일 큰 숫자 : " + num1 + ", 제일 작은 숫자 : " + num4);
	}
}

[설명]

 

if문 위쪽은 이전의 문제들과 같아 설명 생략. 

num 1, 2, 3, 4 총 4개가 있다. 여기서 첫 번째 if문을 보면  만약 num1 <num2 이면, temp에 num1값을 넣어주고 num2에 num1값을 temp값을 num2에 넣어준다. 예를 들어 num1에 3 num2가 5라고 생각해 보자

그러면  위의 계산을 거쳐가면 num1이 num1에 5가 들어가고 num1에 num2에 2가 들어가는 것이다.

이렇게 비교를 하며 숫자를 작은 수부터 큰 수까지 정렬하는 방법이다. 이렇게 하면 가장 작은 수는 num1에 가장 큰 수는

num4에 들어간다.


4번

4. 년도를 입력받고, 윤년인지 아닌지를 출력하세요.
예) 2010 입력 시 -> 2010 => 평년
     2012 입력 시 -> 2012 => 윤년

package com.day2;

import java.util.*;

public class Number4 {

	public static void main(String[] args) {
		
		Scanner result = new Scanner(System.in);
		
		int num1;
		
		System.out.println("년도를 입력 : ");
		num1 = result.nextInt();
		
		String str;
		
		//str = num1%2==0?"짝수":"홀수";
		
		//str = num1>0?"양수":(num1<0?"음수":"영");
		
		str = num1%4==0 && num1%100!=0 || num1%400==0?"윤년":"평년";
		
		System.out.println(num1 + "=> " + str);
	}
}

[설명]

윤년 추가 규칙은 다음과 같다.

  • 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.

그레고리력에는 다음과 같은 추가 규칙이 있다.
  • 100으로 나누어 떨어지지만 400으로 나누어 떨어지지 않는 해는 평년으로 한다.(예: 1900년, 2100년)
  • 400으로 나누어 떨어지는 해는 윤년으로 한다.(예: 2000년, 2400년)

str = num1%4==0 && num1%100!=0 || num1%400==0?"윤년":"평년";

 

위의 코드를 보자 num1은 사용자가 입력한 년도 값이다.

위의 코드를 설명하자면 입력한 연도가 4로 나눠지거나 연도가 100으로 나눠 떨어지지 않거나 400으로 나누어 떨어지면 평년이다. 그렇지 않으면 윤년이다.

== : 두 피연산자의 값이 같은지 검사

!= : 두 피연산자의 값이 다른지 검사

&& : 두 피연산자 모두 true여만 true (그리고)

|| : 두 피연산자 중 하나만 ture이면 trjue(또는)

 

삼항 연산자

조건? 참값 : 거짓 값

 

조건  : num1%4==0 && num1%100!=0 || num1%400==0

참값 : 윤년"

거짓 값 : "평년"


5번

5. 단가 15,800원짜리 상품을 일정 수량 이상 구입 시 할인을 해줍니다.
할인율은 다음과 같습니다.
10개 이상 -> 10%
20개 이상 -> 15%
30개 이상 -> 20%
판매금액을 계산해 봅니다.


예) 구입수량 15개인 경우 -> 구입수량: 15개, 판매 총금액: 213300원

 

package com.day2;
import java.util.*;
public class Number5 {

	public static void main(String[] args) {
		
		Scanner result = new Scanner(System.in);
		
		float won = 15800;
		int num;
		
		System.out.println("몇개 구입했나요?");
		num = result.nextInt();
		
		if(num>=10) {
			won = won * 0.9f;
		}
		if(num>=20) {
			won = won * 0.85f;
		}
		if(num>=30) {
			won = won * 0.8f;
		}
		System.out.println("구입 수량 : " + num + "개" + ", 판매 총 금액 : " + ((int)won*num)+"원");
	}
}

[설명]

 

할인율 때문에 float won = 15800;으로 float형으로 선언한다.

if(num>=10) {
won = won * 0.9f;     -> 10% 할인이라 won * 0.9f를 곱해서 won에 넣어줌
}
if(num>=20) {
won = won * 0.85f;
}
if(num>=30) {
won = won * 0.8f;
}

 

+ ((int) won*num)+"원");  -> won *num 한 값은 float형이기에 int로 형 변환을 해준다.


6번

6. 이름과 3과목의 점수를 입력받아 다음 조건에 따라 출력
-모든 과목의 점수가 40점 이상이고 평균이 60점 이상이면 합격
-한 과목이라도 40점 미만이고 평균이 60점 이상이면 과락(불합격)
-평균이 60점 미만이면 불합격

 

예)
이름? 홍길동
세 과목 점수? 60 70 80
이름 : 홍길동
총점 : 210, 평균 : 70, 판정 :합격

 

package com.day2;
import java.util.*;

public class Number6 {

	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);

		String name;
		int kor,eng,mat,tot,avg;
		String pan;

		System.out.print("이름 ? ");
		name=sc.next();
		System.out.print("세과목 점수 ?");
		kor=sc.nextInt();
		eng=sc.nextInt();
		mat=sc.nextInt();

		tot=kor+eng+mat;
		avg=tot/3;

		if(kor>=40&&eng>=40&&mat>=40&&avg>=60)
			pan="합격";
			else if(avg>=60)
				pan="과락";
					else
					pan="불합격";

		System.out.println("이름 : " + name);
		System.out.println("총점 : " + tot + " 평균 : " + avg + " 판정 : " + pan);
		}
	}

 

 

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기