JAVA2

Leafy·2023년 12월 5일
0

중앙_자바

목록 보기
5/76
package dec05;

//2023-12-05
//어제했던 거, 연산자
public class HelloWorld {//클래스
	public static void main(String[] args) {//main메소드
		System.out.println();//System은 자바를 뜻함, out은 내보낸다.
	}
}

문제 : 과수원

package dec05;
/* 나는 과수원을 한다.
 * 키우는 과일은 사과, 배, 오렌지
 * 각각 하루 생산량 5, 7, 5개
 * 위 값을 기준으로 하루 총 생산되는 과일 수 출력
 * 출력시키고 하루 기준으로 시간당 몇 개의 과일이 열리는지 출력
 * 예) 총 생산 갯수 : 17
 * 	   시간당 생산 갯수 : 0.0101251...
 * 
 * 주의 : 최대한 변수를 많이 사용하고, 반드시 한 번의 리터럴 값을 적기
 * 		  캐스팅 많이 활용.
 * 		  평균 변수는 float 타입으로 선언해서 사용.
 * 
 */

public class Test01 {
	public static void main(String[] args) {
		int apple, pear, orange, total;
		float avg;
		
		apple = 5;
		pear = 7;
		orange = 5;
		total = apple + pear + orange;
		final int HOURS_IN_DAY = 24;
		avg = (float) total / HOURS_IN_DAY;
		System.out.printf("총 생산 갯수 : %d%n", total);
		System.out.printf("시간당 생산 갯수 : %f", avg); //왜 한 자리 안 나올까
		System.out.println();
		System.out.println("총 생산 갯수 : " + total);
		System.out.println("시간당 생산 갯수 : " + avg);
		
		
		// 캐스팅은 최소한만 하는 방향으로!
		int fruits = 5 + 7 + 5;
		float avgFruits = (float) fruits / 24; // 연산 시 큰 타입을 따라가서
//		float avgFruits = fruits / 24F; //이것도 된다!
		
		System.out.println(fruits);
		System.out.println(avgFruits);
	}
}

이클립스 줄삭제
ctrl+d

부동소수점 연산(RAM 한계)

https://velog.io/@syleemk/CS-%EB%B6%80%EB%8F%99-%EC%86%8C%EC%88%98%EC%A0%90-%EC%98%A4%EC%B0%A8

정처기 실기...

https://jaysecurity.tistory.com/124

^는 배타적 OR
제곱은 Math.pow()

연산자 우선순위
https://toma0912.tistory.com/66

operator

package dec05;
//연산자 = 계산할 때 사용하는 기호, 순서

/* 모든 프로그래밍에서는 데이터와 연산을 하기 위해 연산자를 사용함.
 * 지금 배울 연산자는 자바 외 모든 언어에서 비슷하게 활용.
 * 잘 알아두면 편함.
 * 
 * 주의해서 봐야할 것은 연산자의 기능과 순서.
 * 연산자의 종류가 많기 때문에 모두 외우려고 하기 보다는
 * 자주 사용하면서 익숙해지면 좋다.
 * 
 * 또한 아래 나열되는 연산자의 종류는 그 순서대로 정의한 것이라
 * 그대로 외우면 좋다.
 * 
 * 1. 최우선 연산자
 * 		.	닷, 점 = 클래스 또는 객체 소유의 변수, 메소드 호출 연산자	(System.out.println 의 .)
 * 		[]	배열
 * 		()	괄호
 * 
 * 2. 단항 연산자 - 한쪽 항에만 붙어 있는 거.
 * 		!(논리 부정, not), ~(비트 반전 0<->1), +/-(부호연산), ++/--(선행증감), 
 * 		캐스팅 (cast)
 * 
 * 3. 산술 연산자
 * 		+, -, /, *, %(모듈러: 나눈 후 나머지값을 가져감)
 * 
 * 4. 쉬프트 연산자 -> 진짜 안 씀. 책에도 없음.
 * 		<<, >>, >>>
 * 
 * 5. 관계 연산자
 * 		>, <, >=, <=, ==, !=
 * 
 * 6. 비트 연산자 -> 진짜 비트를 연산...
 * 		&, |, ^
 * 
 * 7. 논리 연산자
 * 		&&, ||
 * 
 * 8. 삼항 연산자
 * 		조건식 ? 참일때 : 거짓일때
 * 
 * 9. 배정대입 연산자
 * 		=, +=, -=, /=, *=, %=
 * 
 * 10. 후행증감 연산자
 * 		++/--
 * 
 */

public class Operator {
	public static void main(String[] args) {
		System.out.println();
		String name = "홍길동";
		char first = name.charAt(0);// 문자열 해당 번지수 글자 뽑기
		System.out.println(first);
		System.out.println(name.length());
		Math.random();

		// 선행증감
		int num = 1;
		int num2 = ++num;// ++ -> +1, num에 1을 더해서 num2에 넣어라.
		System.out.println(num);// 2
		System.out.println(num2);// 2

		int num3 = ++num + num2;
		System.out.println(num); // 3
		System.out.println(num2); // 2
		System.out.println(num3); // 5
		// 계산 순서 ===== 선행증감, 산술, 대입
		int num4 = --num + --num2 + --num3; // -- -> -1
		System.out.println(num); // 2
		System.out.println(num2); // 1
		System.out.println(num3); // 4
		System.out.println(num4); // 7

		num = 1;
		num2 = 1;
		num3 = 1;
		num2 = num--; //num을 num2에 먼저 넣고 num은 -1이 된 것.
		System.out.println(num); // 0
		System.out.println(num2); // 1
		
		num4 = ++num - --num2 + num3--; // num3 = num3--; 이런 거 하면 --가 그냥 사라진다. 
//		num3 = ++num - --num2 + num3--; // 1 - 0 + 1 = 2인데(여기까지) 여기서 --하면 1?(X)
		
		//num = num--; //이러면 --가 그냥 없어짐. num = num;
		//num--; //이래야 1 빠진다.
		
		System.out.println(num); // 1
		System.out.println(num2); // 0
		System.out.println(num3); // 0
		System.out.println(num4); // 2
		
		System.out.println(!true);//not
		System.out.println(1 != 2);// == !=
		System.out.println(1 != (num4 - 1));// == !=
		//					  5  1     3
		
		//10진법 1을 2진법으로 변환
		String result = Integer.toBinaryString(-7);
		System.out.println(result);
		//음수는 음수인 걸 표현하려고 앞에 1이 쭉 들어감.
		//00000000000000000000000000000111 = 7
		//11111111111111111111111111111001 = -7
		//0000 0000 0000 0000 0000 0000 0000 1000 32bit (우린 64bit 컴이지만 자바는 32bit)
		//11111111111111111111111111111000 = -8
		//1과 0, -1
		//00000000000000000000000000000001
		//00000000000000000000000000000000
		//11111111111111111111111111111111
		//11111111111111111111111111111110 = -2
		//11111111111111111111111111111101 = -3
		//11111111111111111111111111111100 = -4
		//11111111111111111111111111111011 = -5
		//11111111111111111111111111111010 = -6
		//11111111111111111111111111111001 = -7
		//음수로 가면서 점점 1을 뺀다는 개념을 알고 있자.
		//비트 반전은 쓸 일이 많지는 않을 것.
		
		//비트 반전 0 -> 1, 1 -> 0
		System.out.println(   Integer.toBinaryString(~1)   );
		//00000000000000000000000000000001
		//11111111111111111111111111111110
		
		num = 2;
		num2 = 2;
		num3 = 6 % 3;
		//나누는 값이 더 클 경우에는 작은 수를 리턴함.
		//0부터 나누는 값보다 1 작은 숫자까지가 나온다.
		//나누는 값으로 계속 뺀다고 생각하면... -> 주민번호 여자 남자 구분에 쓸 수 있다
		System.out.println(num3);
		
		num = 10;
		System.out.println(Integer.toBinaryString(num));
		//00000000000000000000000000001010 : num
		//										  ---> 2칸 밀어
		System.out.println(Integer.toBinaryString(num >> 2));
		//00000000000000000000000000000010 : num >> 2
		
		System.out.println(Integer.toBinaryString(num >> 3));
		//00000000000000000000000000000001 : num >> 3
		
		//										   <--- 2칸 밀어
		System.out.println(Integer.toBinaryString(num >> 2));
		//00000000000000000000000000101000 : num
		
		System.out.println(10 << 2);//40
		
		System.out.println(Integer.toBinaryString(-1));
		//11111111111111111111111111111111
		
		System.out.println(Integer.toBinaryString(-1 >> 2)); //음수니까 음수로 채워줌
		//11111111111111111111111111111111
		System.out.println(Integer.toBinaryString(-1 >>> 2)); //>>>는 음수여도 0으로 채워줌
		//00111111111111111111111111111111
		System.out.println(Integer.toBinaryString(-1 << 2));
		//11111111111111111111111111111100
		
		//비트 연산자 &(and 논리곱), |(파이프, or, 논리합), ^(XOR), !
		// & = 양쪽 모두 참일 때 참
		// | = 어느 한쪽이 참일 때 참
		// ^ = 한쪽이 참이고, 다른 한 쪽이 거짓일 때 참
		//		참^참 = 거짓
		//		거짓^거짓 = 거짓
		// 1011 = 11
		// 0111 = 7
		// 0011 = 3
		System.out.println(11 & 7);
		
		// 1011 = 11
		// 0111 = 7
		// 1111 = 15
		System.out.println(11 | 7);
		
		// 1011 = 11
		// 0111 = 7
		// 1100 = 12
		System.out.println(11 ^ 7);
		
		//1010 = 10
		//0110 = 6
		//1100 = 12
		System.out.println(10 ^ 6);
		
		//논리연산자 &&(AND), ||(OR)
		System.out.println(1 + 1 == 2 && false);
		/* 		AND
		 * 참   && 참   = 참
		 * 참   && 거짓 = 거짓
		 * 거짓 && 참   = 거짓
		 * 거짓 && 거짓 = 거짓
		 * 
		 * 		OR
		 * 참   || 참   = 참
		 * 참   || 거짓 = 참
		 * 거짓 || 참   = 참
		 * 거짓 || 거짓 = 거짓
		 */
		System.out.println(1 > 0.5 || true);
		System.out.println(1 != 1-2 || !true);//true
		
		//삼항연산자
		
		num = 1;
		if(num == 1) {
			System.out.println("1입니다.");
		} else {
			System.out.println("1이 아닙니다.");
		}
		
		//조건식 ? 참일때 문장 : 거짓일때 문장;
		System.out.println(num == 1 ? "1입니다." : "1이 아닙니다.");
		
		//배정대입
		int number = 10;
		number += 1;
//		number = number + 1;
		number -= 1;
		number /= 2; //몫을 넣어준다.
		
		System.out.println(number);
		
	}
}

If

  • If1
package dec05;

//제어문 = 조건문, 반복문
/*
 * 조건문 = if, switch
 * 
 * 
 * 반복문 = for, while, do~while
 * 
 * 
 * if
 * 제어문이란 프로그램이 실행될 때 특정 조건, 반복을 수행 또는 멈추게 하기 위해
 * 필요한 명령 구문.
 * 
 * 제어문은 조건에 따라 분기되는 조건문과
 * 특정 구문을 반복하는 반복문으로 구성되어 있다.
 * 
 * 조건문은 
 * if(조건식){ 
 * 		조건식이 참일 때 실행할 문장 
 * }
 * 
 * 
 * if(조건식) { 
 * 		참일 때 
 * } else { 
 * 		거짓일 때 
 * }
 * 
 * if(조건식1){
 * 		조건식1이 참일 때
 * } else if(조건식2) {
 * 		조건식2가 참일 때		
 * } else {
 * 		위 조건식 1, 2가 모두 거짓일 때
 * }
 * 
 * switch ~ case 구문도 있다.
 * 
 * if 조건문은 필요에 따라 구성할 수 있음.
 * if만 정의해도 되고, if~else if()로 구성해도 됨.
 * if와 else로만 구서앻도 됨.
 * (특별한 규칙이 없다)
 * 단, if가 없는 else if, else는 절대 불가능.
 * 또한 필요에 따라 각 구문 내부에 또 다시 조건을 중첩시킬 수 있다.
 * 
 */
public class If01 {
	public static void main(String[] args) {

		int num = 4;
		// 참/거짓이 나올 문장
		if (num > 5) {
			System.out.println("5보다 큽니다.");
		} else if (num < 5) {
			System.out.println("5보다 작습니다.");
		} else {
			System.out.println("5입니다.");
		}

	}
}
  • If2
package dec05;

import java.util.Scanner;

public class If02 {
	public static void main(String[] args) {

		// 아래 내용을 충족하는 프로그램을 작성
		int number = 12;
		// 위 변수가 짝수인지 홀수인지 구분하는 if문 만들기
		// 짝수면 "짝수입니다'
		// 홀수면 "홀수입니다"라고 출력하기.

		if (number % 2 == 0) {
			System.out.println("짝수입니다.");
		} else {
			System.out.println("홀수입니다.");
		}

		number = 13;
		System.out.println(number % 2 == 0 ? "짝수입니다." : "홀수입니다.");

		// 스캐너 = 키보드로 들어오는 숫자, 문자를 받아 자바가 처리
		// 타입 변수명 = 값;
		Scanner sc = new Scanner(System.in); //사용 끝난 객체는 닫아줘야.
		System.out.println("주민등록번호 뒤 첫숫자를 적어주세요.");
		// 입력대기
		int input = sc.nextInt();

		System.out.println("당신이 입력한 숫자 : " + input);
		
		// 남자 여자 판별
		if (input == 2 || input == 4) {
			System.out.println("여자입니다.");
		} else if (input == 1 || input == 3) {
			System.out.println("남자입니다.");
		} else {
			System.out.println("~~~");
		}
		
		//닫아주기
		sc.close();
	}
}
  • If3
package dec05;

public class If03 {
	public static void main(String[] args) {
		//숫자 바꾸기
		int num1 = 55;
		int num2 = 30;
		//두 숫자를 바꿔주시고 출력해주세요.
		int temp;
		temp = num1;
		num1 = num2;
		num2 = temp;
		System.out.println(num1);
		System.out.println(num2);
	}
}
  • If4
package dec05;

public class If04 {
	public static void main(String[] args) {

		int num1 = 90;
		int num2 = 5;

		// 정렬해주세요. 중복 제거, 들여쓰기, 정렬

		if (num1 > num2) {
			int temp = num1;
			num1 = num2;
			num2 = temp;
		}

		System.out.println(num1);
		System.out.println(num2);

	}
}
  • If5 : 가위바위보
package dec05;

import java.util.Scanner;

//가위바위보 게임 만들기
public class If05 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("가위바위보 게임에 오신 것을 환영합니다.");
		System.out.println("1 가위, 2 바위, 3 보");
		System.out.print("입력 >_");
		int input = sc.nextInt(); //사용자가 낸 1가위 2바위 3보
		int com; // 컴퓨터가 뽑은 1가위 2바위 3보
		
		//랜덤뽑기 Math.random(); = 0.0초과, 1.0미만의 랜덤한 수
		com = (int) (Math.random() * 3 + 1);
		System.out.printf("당신: %d%n",input);
		System.out.printf("컴퓨터: %d%n", com);
		
//		//쌤.
//		if (com == 1 && input == 3
//				|| com == 2 && input == 1
//				|| com == 3 && input == 2) {
//			System.out.println("컴퓨터가 이겼습니다.");
//		} else if (com == 1 && input == 2
//				|| com == 2 && input == 3
//				|| com == 3 && input == 1) {
//			System.out.println("당신이 이겼습니다.");
//		} else if (input == com) {
//			System.out.println("비겼습니다.");
//		}
		
		// &&가 ||보다 우선순위 높다고 한다... (괄호 불필요)
		if (input == com) {
			System.out.println("비겼습니다.");
		} else if (input == 1 && com == 3 || input == 2 && com == 1 || input == 3 && com == 2) {
			System.out.println("이겼습니다.");
		} else {
			System.out.println("졌습니다.");
		}
		
//		//넘 어렵게 한 거 같기도 하고...(되긴 된다.)
//		if (input == com) {
//			System.out.println("비겼습니다.");
//		} else if (input - com == 2 || input - com == -2) {
//			if (input == 1) {
//				System.out.println("당신이 이겼습니다.");
//			} else {
//				System.out.println("컴퓨터가 이겼습니다.");
//			}
//		} else if (input > com) {
//			System.out.println("당신이 이겼습니다.");
//		} else {
//			System.out.println("컴퓨터가 이겼습니다.");			
//		}
		
		
		
		
		
		
		sc.close();
	}
}
  • If6 : Scanner 대신 System.in.read()?
package dec05;

import java.io.IOException;

public class If06 {
	public static void main(String[] args) throws IOException {
		// 또 아스키 코드를 읽어주는 System.in.read()
		System.out.println("0~9 중 하나의 숫자를 눌러주세요.");
		int value = System.in.read() - 48; // 키보드 한 글자 읽음.
		
		System.out.println(value);
	}
}

0개의 댓글