6/15 java

HMS·2022년 6월 16일
0

1. 변수

변수활용

1) 변수 밑 노란줄은 사용되지 않았단 의미
2) ""와+를 통해 변수와 문자열의 조합을 만들어 낼 수 있음
3) 문자열은 강함 문자열과 만나면 문자열 화 됨

package com.kh.variable;

public class TestVarExam {
	public static void main(String[] args) { 
		// 자료형별 변수를 만들고 -> int num...
		// 초기화 한 후 -> num=1...
		// 그 값을 출력  -> Sys..
		
		int iNum = 100;
		long lNum = 999900000000l;
		float fNum = 486.520f;
		double dNum = 567.890123;
		char cWord = 'A';
		String sHello = "Hello world";
		boolean bBool = true;
		short sNum = 11; // 변수밑 노란줄은 변수를 사용하지 않았다는 의미
		
		System.out.println("정수의 값 : " + iNum);
		System.out.println("정수의 값(9999억) : " + lNum);
		System.out.println("실수의 값 : " + fNum);
		System.out.println("실수의 값 : " + dNum);
		System.out.println("문자 : " + cWord);
		System.out.println("문자열 : " + sHello);
		System.out.println("논리 : " + bBool);
		
		//문자열은 강하다 문자열을 만나면 문자열이 되어벌임
		System.out.println('A' + 's'); // 문자+문자 -> 문자가 아스키코드에 따라 숫자합으로 바껴서 나옴
		System.out.println("1" + "1");
		System.out.println("Hello" + 'y'); // 문자열 + 아스키숫자?xx 문자열화 됨
		System.out.println("Hello" + 10); // Hello10?
		System.out.println(10 + "Hello"); //10Hello?
		System.out.println(10+ "Hello" + 10); //10Hello10?
		System.out.println(10+(20+"Hello")); //1020Hello
		System.out.println("Hello" + 10 + 20); //Hello10-> 이미 문자열 + 20->Hello1020
	}
}

상수선언

final int AGE = 20;
상수선언 예약어를 써 줌으로써 다른값을 대입할 수 없도록 해줌

리터럴

int i = 100;
100 이 리터럴 변수에 대입되는 값 자체를 말함

2. 연산자

연산자종류

  • 최우선연산자 ()
  • 단항 연산자 == --
  • 이항연산자
    1. 산술 연산자
    1. 쉬프트 연산자
    2. 비교 연산자
    3. 논리 연산자
  • 삼항 연산자
  • 대입연산자

단항연산자1- 증감연산자

!는 not을 의미 -> !true -> false !!true -> true
++는 1증가 --는 1감소
일반대입연산자
a++후위연산은 나중에 계산
++a전위연산은 먼저 계산
a=1
a=a+1 ->a++;
b=a==
전위연산
후위연산

a=10 b=20 c=30 일때 다음연산 값은?

a++; a=11,b=20,c=30
b=(--a)+b; b=30,a=10,c=30
c=(a++)+(--b); a=11-> 후위연산이라 괄호가 있음에도 나중에 계산이 됨,b=29 얘는 전위연산이라 먼저 계산,c=39
그래서 10+29 먼저 계산

flag를 true초기화하고 다음연산 수행하라
!!!!flag

x=100,y=33,z=0 초기화 다음 연산 수행후 xyz 출력
x--;
z=x-- + --y;
x=99 + x++ + x;
y=y-- + y+ ++y;

x=99
z= 99+22 121, y=32, x=98
x= 99+98+99(후위연산진행됨) =296 ->x끼리 만나니까 만나는 지점에서 후위연산도 진행됨
y= 32+31(후위연산진행됨)+32 = 95

package com.kh.operator;

public class Exam_Unary {
	public static void main(String[] args) {
		//1번문제 a=10,b=20,c=30
		
		int a=10;
		int b=20;
		int c=30;
		
		System.out.println("1번문제");
		System.out.println("a++;");
		System.out.println("b = (--a) +b;");
		System.out.println("c = (a++) + (--b);");
		a++;
		b = (--a) + b;
		c = (a++) + (--b);
		System.out.println("a의 값 : " + a);
		System.out.println("b의 값 : " + b);
		System.out.println("c의 값 : " + c);
		System.out.println();
		System.out.println("2번 문제");
		boolean flag = true;
		System.out.println("결과값 : " + !!!!flag);
		System.out.println();
		System.out.println("3번 문제");
		int x=100;
		int y=33;
		int z=0;
		x--;
		z= x-- + --y;
		x= 99+ x++ + x;
		y= y-- + y + ++y;
		
		System.out.println("x의 값" + x);
		System.out.println("y의 값" + y);
		System.out.println("z의 값" + z);
		
		
	}
}

비교 연산자

  • 두 개의 변수의 관계를 따지는 연산자, 다른 말로 비교 연산자 라고도 함
  • 관계 연산자는 조건을 만족하면 true, 만족하지 못하면 false를 반환
    a == b : a와 b가 같으면 true
    a != b : a와 b가 다르면 true
package com.kh.operator;

public class Exam_Comparison {
	public static void main(String[] args) {
		System.out.println("비교연산자 예제");
		//비교연산자 : 두값을 비교하는 연산자, 관계연산자
		// 비교연산자는 조건을 만족하면 true 아니면 false를 반환함.
		int a=50;
		int b=30;
		
		boolean result = a < b;
		System.out.println("(a<b)의 결과 : " + result);
		result = a>b;
		System.out.println("(a>b)의 결과 : " + result);
		result = a==b; // a와b가 같으면 true
		System.out.println("(a==b)의 결과 : " + result);
		result = (a != b);// a와b가 다르면 -> true 
		System.out.println("(a != b)의 결과 : " +result); //같으면 false
		// 짝수 홀수 판별 프로그램 
		int num = 2;
		result = (num / 2 == 1);
		System.out.println("짝수인가 : "+ result);

논리 연산자

  • 논리값 두 개를 비교하는 연산자로 제어문에서 많이 사용.
  • a && b a, b 모두 참일 때, 참!
  • a || b a, b 하나라도 참이면, 참!
  • or 앞에가 true면 뒤에 계산 안함 이 경우 뒤쪽은 증감연산자도 작동을 안함
  • and가 앞에가 false면 뒤에 계산안함

예제1. 50, 30을 입력받아 다음과 같은 식을 작성 하였을때 결과값을
예상해보고 출력해보자.
a!=b && a<b
a<b || a==b
a>b && a!=b
a>b || a==b

package com.kh.operator;

public class Exam_Logical {
	public static void main(String[] args) {
		System.out.println("논리 연산자 예제");
		int a= 50;
		int b= 30;
		boolean result1,result2,result3,result4;
		
		result1 = (a != b) && (a < b); // && = and
		result2 = (a < b) || (a == b); // || = or
		result3 = (a > b) && (a != b);
		result4 = (a > b) || (a == b);
		System.out.println("result1 : " + result1);
		System.out.println("result2 : " + result2);
		System.out.println("result3 : " + result3);
		System.out.println("result4 : " + result4);
		System.out.println("논리 연산자 예제2");
		
	}
}

예제 2. 70, 55을 a,b로 입력받아 다음과 같은 식을 작성 하였을때
결과값을 예상해보고 출력해보자.
a==b || a++<100
a<b && --b <55
a!=b && b-- < a++
a++ != b || b++ >=85
a=?
b=?

  • 풀이
    a==b || a++<100 71 55/ false||true true
    a<b && --b <55 71 55(54)/ false&&true false
    a!=b && b-- < a++ 71(72) 54(53) /true&&true true
    a++ != b || b++ >=85 72(73) 53(54) / true||false true
    a=? 73
    b=? 54
package com.kh.operator;

public class Exam_Logical {
	public static void main(String[] args) {
		System.out.println("논리 연산자 예제");
		int a= 50;
		int b= 30;
		boolean result1,result2,result3,result4;

		System.out.println("논리 연산자 예제2");
		int aNum = 70;
		int bNum = 55;
		result1 = (aNum == bNum) || (aNum++ < 100); //or 앞에가 true면 뒤에 계산 안함 aNum = 71, bNum = 55
		result2 = (aNum < bNum) && (--bNum < 55);  //and가 앞에가 false면 뒤에 계산안함 aNum = 71, bNum = 55
		result3 = (aNum != bNum) && (bNum-- < aNum++); // aNum = 72, bNum = 54
		result4 = (aNum++ != bNum)|| (bNum++ >= 85);  //or 앞에가 true면 뒤에 계산 안함 aNum = 73, bNum = 54
		
		System.out.println("result1 : " + result1);
		System.out.println("result2 : " + result2);
		System.out.println("result3 : " + result3);
		System.out.println("result4 : "+ result4);
		System.out.println("a의 값 : " + aNum + ",b의 값 : " +bNum);
	}
}

삼항연산자

조건식을 이용하여 결과값에 따라 연산을 처리하는 방식 if와 유사
조건식 (true일때 실행코드) : (false일때 실행코드)

package com.kh.operator;

public class Exam_Triple {
	public static void main(String[] args) {
		/*
		 * 삼항연산자
		 * 항목이3개
		 * (조건식) ? 참일때 : 거짓일때
		 * - 조건식은 반드시 true or false
		 * - 비교/논리연산자 주로 사용
		 * 
		 */
		int num = 99;
		// +, -, *, /, %(나머지연산자)
		// 4 / 2 == 2(몫)
		// 4 % 2 == 0(나머지)
		String resultStr; 
		resultStr = num % 2 == 0 ? "짝수" : "홀수";
		System.out.println(num + "은/는 " + resultStr + "입니다.");
	}
	
}

대입연산자

  • 증감연산자랑 비슷하지만 증감은 1씩증가하지만 대입연산자는 원하는 값을 증가시키고 그 변수에 저장할 수 있다.
  • 복합대입연산자는 램메모리상에서 연산하기 때문에 cpu에서 연산처리하는 일반 대입연산자보다 처리속도가 빠르다.

세개의 정수를 입력받아 아래의 연산을 하면 결과가
어떻게 될지 생각해보고 출력하세요.
입력 a=10, b=20, c=30
a+=20;
b*=3;
c/=4;
a%=b;
c-=a;

a=a+20=30
b=b*3=60
c=c/4=7
a%=a%b=30
c=7-30=-23

연산자의 우선순위

괄호의 우선순위가 제일 높다.
산술 연산자 > 비교 연산자 > 논리 연산자 > 대입 연산자

  • 대입은 제일 마지막에 수행된다.
    단항 연산자 > 이행연산자 > 삼항연산자
  • 단항 연산자의 우선순위가 이항 연산자보다 높다.
    단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은
    왼쪽에서 오른쪽이다.

스캐너 이용하여 입력창 만들기

package com.kh.exscanner;

import java.util.Scanner;

public class TestScanner {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);// Scanner 클래스가 있는데
											// TestScanner에서 사용할거야
		System.out.print("int 값을 입력해 주세요 : "); //println은 한줄띄고 시행 print는 바로옆에 실행
		int input1 = sc.nextInt();
		System.out.print("int 두번째 값을 입력해 주세요 : ");
		int input2 = sc.nextInt();
		System.out.println("input1 : " + input1 );
		System.out.println("input2 : " + input2 );
		
		int result = input1 + input2;
		System.out.println("두값의 합은 : " + result + "입니다.");
		sc.close();
	
		
		
//		System.out.print("이름을 입력해 주세요 : ");
//		String strA = sc.next();
//		
//		System.out.println();
//		
	}
}

정수 실수 문자열 문자 보여주는 코드 작성 해 보기

package com.kh.exscanner;

import java.util.Scanner;

public class TestScanner2 {
	public static void main(String[] agrs) {
		// 입력받은 것 중에서 정수를 입력 받았습니다.
		// 실수 문자 문자열
		
		Scanner sc= new Scanner(System.in);
		System.out.print("정수를 입력해 주세요 : ");
		int iNum = sc.nextInt();
		
		System.out.print("실수를 입력해 주세요 : ");
		double dNum = sc.nextDouble();
		
		System.out.print("문자열을 입력해 주세요 : ");
		String inputStr = sc.next(); //next는 공백 안받고 nextline은 공백도 받는다
		
		System.out.print("문자를 입력해 주세요 : ");
		char inputChar = sc.next().charAt(0); //nextchar은 없고 charAt로 맨 앞문자 잘라서 보여줌
		
		System.out.println("입력한 정수는 : " + iNum);
		System.out.println("입력한 실수는 : " + dNum);
		System.out.println("입력한 문자열은 : " +  inputStr);
		System.out.println("입력한 문자열은 : " + inputChar);
		
		
		
		
	}
}
package com.kh.exscanner;

import java.util.Scanner;

public class TextScanner3 {
	public static void main(String[] args) {
//		이름을 입력해주세요.
//		민봉식
//		태어난 월을 입력해주세요.
//		9
//		키를 입력해주세요.
//		180
//		성별을 입력해주세요.
//		남
//		주소를 입력해주세요.
//		서울시 종로구
//		이름은 민봉식입니다.
//		태어난 월은 9입니다.
//		키는 180.0입니다.
//		성별은남입니다.
//		주소는 서울시 종로구입니다.
		Scanner sc = new Scanner(System.in);
		
		System.out.print("이름을 입력해주세요. : " );
		String sName = sc.next();
		
		System.out.print("태어난 월을 입력해 주세요 : ");
		int iMonth = sc.nextInt();
		
		System.out.print("키를 입력해주세요 : ");
		double dTall = sc.nextDouble();
		
		System.out.print("성별을 입력해 주세요 : ");
		char cSex = sc.next().charAt(0);
		
		System.out.print("주소를 입력해 주세요 : ");
		sc.nextLine();
		// 성별에서 엔터치는것을 공백으로받아서 그걸 출력하기때문에 
		// 앞에 엔터를 받아줄 nextLine을 한번더 써준다
		String sAdr = sc.nextLine();
		// next와 nextline의 차이는 둘다 문자열 받음
		// nextLine은 공백을 입력 받음
		System.out.println();
		System.out.println("주소는 : " + sAdr);
		System.out.println("이름은 " + sName + "입니다.");
		System.out.println("태어난 월은 " + iMonth+ "월 입니다");
		System.out.println("키는" + dTall + "입니다.");
		System.out.println("성별은" + cSex+"입니다.");
		System.out.println("주소는 "+ sAdr+ "입니다.");
		
	}
}

클래스 선택 후 F2누르면 이름변경

연산자와 변수를 활용한 예제풀이

예제1. 문자값 확인 후 출력

// 입력한 문자 값이 대문자인지 확인하여 결과 출력하기
// 문자 하나 입력해주세요 : a
// 영어 대문자 확인 : false
// 문자 하나 입력해주세요 : A
// 영어 대문자 확인 : true

package com.kh.exercise;

import java.util.Scanner;

public class Exercise_Logical2 {
	// 입력한 문자 값이 대문자인지 확인하여 결과 출력하기
	// 문자 하나 입력해주세요 : a
	// 영어 대문자 확인 : false
	// 문자 하나 입력해주세요 : A
	// 영어 대문자 확인 : true
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("문자 하나 입력해 주세요 : ");
		char input1 = sc.next().charAt(0);
		System.out.println("영어 대문자 확인 : " + Character.isUpperCase(input1));
//		System.out.print("문자 하나 입력해 주세요 : ");
//		char input2 = sc.next().charAt(0);
//		System.out.println("영어 대문자 확인 : " + Character.isUpperCase(input2));
//		Character.isUpperCase() 문자가 대문자인지 소문자인지 확인하는class
		
		// 아스키코드 사용하여 풀이
		// 65~90 -> 대문자 97~122 -> 소문자
		System.out.print("문자 하나 입력해 주세요 : ");
		char input3 = sc.next().charAt(0);
		String a;
		a = input3 <= 90 ? "true" :  "false";
		System.out.println("영어 대문자 확인 : " + a);
		
	}
	
}

예제2. 연산자 활용하여 1~100사이 숫자 확인

// 입력한 정수값이 1 ~ 100 사이의 숫자인지 확인하시오
// 정수를 하나 입력해주세요 : 33
// 1부터 100사이의 숫자인가? : true
package com.kh.exercise;

import java.util.Scanner;

public class Exercise_Logical1 {
	// 입력한 정수값이 1 ~ 100 사이의 숫자인지 확인하시오
	// 정수를 하나 입력해주세요 : 33
	// 1부터 100사이의 숫자인가? : true
	public static void main(String[] agrs) {
		Scanner sc= new Scanner(System.in);
		
		System.out.print("정수를 하나 입력해 주세요 : ");
		int iCheck = sc.nextInt();
		String result1;
		result1 = iCheck <= 100 && iCheck >= 1 ? "true" : "false";
		System.out.println("정수를 하나 입력해 주세요 : " + iCheck);
		System.out.println("1부터 100사이의 숫자인가? : " + result1);
		boolean isTrue = (iCheck > 1) && (iCheck < 100);
		// 불리안은 삼항연산보단 리터럴가능
		// 리터럴은 변수에 대입되는 값 자체를 의미
		System.out.println("1부터 100사이의 숫자인가? : " + isTrue);
	}
}

예제3. if문없이 삼항연산자 사용항 0,양수,음수 판별

	// 입력받은 정수가 양수, 0, 음수인지 판별 후 출력하세요..
	// 너무 어려우면 양수, 음수 판별부터 해보세요
	// 정수를 입력해주세요 : -1
	// -1은/는 음수입니다.
	// 정수를 입력해주세요 : 1
	// 1은/는 양수입니다.

	// 정수를 입력해주세요 : 0
	// 0은/는 0입니다.
    
package com.kh.exercise;

import java.util.Scanner;

public class Exercise_Triple1 {
	public static void main(String[] args) {
		// 입력받은 정수가 양수, 0, 음수인지 판별 후 출력하세요..
		// 너무 어려우면 양수, 음수 판별부터 해보세요
		// 정수를 입력해주세요 : -1
		// -1은/는 음수입니다.

		// 정수를 입력해주세요 : 1
		// 1은/는 양수입니다.

		// 정수를 입력해주세요 : 0
		// 0은/는 0입니다.
		
		Scanner sc = new Scanner(System.in);
		System.out.print("정수를 입력해 주세요 : ");
		int input1 = sc.nextInt();		
		String result = input1 < 0 ? " 음수입니다" : (input1 == 0 ? " 0입니다" : " 양수입니다");
		System.out.println(input1 + "은/는" + result);
		//삼항연산자 중첩 뒤에 ()는 뺴도됨
		
		
		
		
	}
}

예제4. +와-를 입력받아 계산결과 출력하기

	// 두 수와 '+' 또는 '-'를 입력받아 알맞은 계산 결과 출력하기
	// 단, '+', '-' 이외의 연산자 입력시 "잘못입력하셨습니다!" 출력
	// 첫번째 수 : 6
	// 두번째 수 : 12
	// 연산자 입력(+ or -) : +
	// 결과 : 18

	// 첫번째 수 : 6
	// 두번째 수 : 12
	// 연산자 입력(+ or -) : -
	// 결과 : -6
package com.kh.exercise;

import java.util.Scanner;

public class Exercise_Triple2 {
	public static void main(String[] args) {
		// 두 수와 '+' 또는 '-'를 입력받아 알맞은 계산 결과 출력하기
		// 단, '+', '-' 이외의 연산자 입력시 "잘못입력하셨습니다!" 출력

		// 첫번째 수 : 6
		// 두번째 수 : 12
		// 연산자 입력(+ or -) : +
		// 결과 : 18

		// 첫번째 수 : 6
		// 두번째 수 : 12
		// 연산자 입력(+ or -) : -
		// 결과 : -6
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫번째 수를 입력하세요 : ");
		int input1 = sc.nextInt();
		System.out.print("두번째 수를 입력하세요 : ");
		int input2 = sc.nextInt();
		System.out.print("연산자를 입력하세요 : ");
		char input3 = sc.next().charAt(0);
		int a = (input1+input2);
		String result = (input3 == '+') ? (input1+input2+"") : (input3 == '-') ? String.valueOf(input1-input2) : "잘못입력하셨습니다!";
		// 형변환 문자열은 강하다 int+int+""으로 문자열화 해준다 wow
		// Integer.toString(int)
		// String.valueOf(int)
		System.out.println("결과 : " + result);
	}
	
}

예제5. 강제형변환 int ->char

//강제형변환 int ->char

package com.kh.exercise;

import java.util.Scanner;

public class Exercise_Typetrans1 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.print("숫자 하나 입력해 주세요 : ");
		int input = sc.nextInt();
		System.out.println("문자로 변환 : " + (char)input); //강제형변환 int ->char
		
	}
	
}

예제6. 강제형변환 int->double

//강제형변환 int->double

package com.kh.exercise;

public class Exercise_Typetrans2 {
	public static void main(String [] args) {
		int iNum1 = 3;
		double iNum2 = 2.2;//자동형변환 작은놈이 큰놈으로 바뀜
		double result = iNum1 + iNum2;
		int result2 = (int)(iNum1 + iNum2); // 뒤를 강제변환
		System.out.println(result);
		System.out.println((int)result); //강제형변환 5.2-?5
				
	}
}
profile
안녕하세요

0개의 댓글