Chap03

박성호·2024년 5월 4일
0

JAVA복습

목록 보기
3/4

Scanner

자바 스캐너 클래스를 이용해서 입력을 받아보았습니다.

스캐너를 사용하기 위해서 util 패키지를 import 해야합니다

import java.util.Scanner;

그 다음 스캐너 클래스를 쓰기위해 객체를 생성해주고

Scanner sLine =new Scanner(System.in);
Scanner sNum =new Scanner(System.in);

그리고 스캐너의 입력을 위해 메소드를 작성해 줍니다

		System.out.println("과목명을 영문으로 입력하시오");
		String str1=sLine.nextLine();
        System.out.println(str1);

입력을 위한 메소드는 자료형에 따른 종류가 존재합니다

String str1=sLine.nextLine(); //for String
int price = sNum.nextInt();	//for Integer

이건 제가 쓴 극히 일부고 좀더 다양한 종류는 자바 공식문서 홈페이지에서 찾아 볼 수 있습니다
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#skip-java.util.regex.Pattern-

마지막으로 입력이 끝나면 OS자원을 다시 되돌리면 끝입니다.

		sLine.close();
		sNum.close();

제가 쓴 방식과 다르게

		Scanner s =new Scanner(System.in);
		String s1 = s.nextLine();
		int s2 = s.nextInt();
		float s3 = s.nextFloat();
		System.out.println(s1+" "+s2+" "+s3);
		s.close();

이런 식으로 하나의 Scanner 객체로도 충분하기 때문에 하나의 객체로 키보드 입력을 처리할 수 있습니다.

결과

과제로 받았던걸 보면
원의 둘레 면적 구의 체적을 구하는 내용 이군요.
공식만 알면 나머지는 쉽게 했던 기억이 나네요.

Scanner rNum =new Scanner(System.in);
		 System.out.println("반지름을 입력하시요");
		 int r=rNum.nextInt();
		 
		 
		 float rnd = 2*3.14f*r;
		 float siz = r*3.14f*r;
		 float wsizs = 4/3*3.14f*r*r*r;
		 System.out.println("원의 둘례:"+rnd);
		 System.out.println("원의 면적:"+siz); //println에서는 자리수 지정이 불가함!!
		 System.out.println("구의 체적:"+wsizs);

연산자

연산자를 사용해 보았습니다.

//a=a+1 = a+=1 a에 1더해서 a에 저장
//a=a-1 = a-=1 a에 1빼서 a에 저장
//a=a*2 = a*=2 a에 2곱해서 a에 저장
//a=a/2 = a/=2 a에 2를 나누어 a에 저장
//a=a%2 = a%=2 a에 2나누어 나머지값 a에 저장
//a++, ++a, a-- , --a 1을 더하거나 빼서 저장

이러한 식으로 다양한 연산자가 존재합니다.

코드

		int p=10/4;		//정수/정수=정수 정수/실수=실수 실수가 포함되면 실수 결과 값임
		float q=10/4f;	//실수/정수=실수 실수/실수=실수 '='은 오른쪽에 값을 왼쪽에 저장하는 배정 연산자
		float o=10/4;	//뒤에 f를 안붙히면 나머지를 표기안함
		float y=4;	
		y=q*y;	
		int a=5;
		a=a+1;
		System.out.println(a);
		a=-a;
		System.out.println(a);
		int s=5;
		s++;
		System.out.println(s);
		s=5;
		s+=2;
		System.out.println(s);
		System.out.printf("%d %4.2f %f\n",p,q,o);
		System.out.println(y);

결과

여기서 하나 재밌는 점은 a=-a는 a를 음수로 바꿔 저장하는것도 가능하다는 겁니다.

그리고 증감 연산자인데 ++와 --는 1을 더하거나 뺀다는 뜻 입니다. 근데 변수 앞에 붙어있냐 뒤에 붙어 있는지에 따라 차이를 보이는 데 앞에 ++가 있으면 표현식에 사용되기 전에 1이 증가합니다. 뒤에 있으면 이 표현식에 사용되며, 그 후에 1 증가합니다.
예시를 보이자면

		int n=3;
		int m=5;
        System.out.println(m++*2+ ++n); //14
		System.out.println(m++*2+(++n)); //17
		System.out.println(m+","+n); //7,5

순서를 살펴보면 5++는 표현식이 끝나면 5에 1을 더합니다 그러니 아직 표현식에서는 5인 상태를 유지합니다.
그리고 2를 곱합니다. ++3이므로 표현식이 사용되기전에 1을 더합니다.
그러므로 10 + 4 =14가 반환됩니다.

두번째는 첫 번째 문장과 유사하지만, 여기서는 ++n이 괄호 안에 있으므로 n이 표현식에 사용되기 전에 1이 증가합니다.

m은 이전의 연산에서 6이 되었으므로, 6 * 2 = 12가 되고, 그런 다음 m은 7이 됩니다.
n은 현재 4이므로, 1이 추가되어 5가 됩니다.
따라서 결과는 12 + 5 = 17이 됩니다.
이번에는 문자와 숫자 조합에 따른 결과 입니다.

		int z=2;
		int x=3+z;	//숫자+숫자
		System.out.println(x);
        결과: 5

숫자와 숫자를 더하면 당연히 숫자가 나옵니다.

		String str1="hi"+z; //문자열+숫자
		System.out.println(str1);
        결과: "hi2"

문자와 숫자를 더하면 문자열이 나옵니다.

		str1=z+"hi"; //숫자+문자열
		System.out.println(str1);
        결과: "2hi"

숫자 + 문자열도 마찬가지

		str1="hi"+"world"; //문자+문자
		System.out.println(str1);
        결과 : "hiworld"

문자 + 문자는 문자열이 나옵니다.

헷갈리거나 재밌는점은 여기 부터인데

		System.out.println(2+3+4+""); 
		System.out.println(""+2+3+4);
        결과:
        "9"
        "234"

숫자가 문자보다 먼저 왔으므로 덧셈을 끝낸뒤 문자열을 반환하고
두번째는 문자열이 먼저왔으므로 숫자를 문자열 처럼 연결만 하고 문자열로 반환 되는 겁니다.
즉 빈문자열 하나가 맨 앞에 왔으므로 +가 더하기 연산자가 아닌 연결 연산자가 됩니다.
순서에 따라 아예 다른 결과를 만듭니다.
그럼 문자열 + 덧셈은 불가능 한 걸까요?
아닙니다 괄호를 통해 계산을 사용할 수 도 있습니다.

System.out.println("결과값은"+(z+x)+"입니다");
결과: "결과값은7입니다"

이런식으로 말이죠

비교 연산자

크기 비교를 위한 연산자를 알아보겠습니다.

		char char1 = 'a';
		char char2 = 'b';
		boolean res1 = (char1>char2);
        System.out.println(res1); //false
		System.out.println(char1>char2); //false

char a,b 를 변수로 저장했습니다. 그리고 그 두개의 크기를 비교하는 비교 연산자인데 a>b를 boolean과 비교했을때
둘다 false를 반환합니다. 이러한 결과가 나오는 이유는 사전에 나오는 순서별로 크기를 생각하면 됩니다. 사전에 먼저 나오면 작은것으로 구별합니다
ex)"a"<"b" "a"<"aa"
"Hello"<"hello"
"Hello"<"Hello "
ASCII코드로인해 순서가 정해집니다
//""<"공백"<"0~9"<"A~Z"<"a~z"

논리 연산자

		boolean q=true;
		boolean w=false;
        System.out.println(w&&w); //false
		System.out.println(w&&q); //false
		System.out.println(q&&w); //false
		System.out.println(q&&q); //true
		System.out.println(w||w); //false
		System.out.println(w||q); //true
		System.out.println(q||w); //true
		System.out.println(q||q); //true
        System.out.println(a>=5 && a<7); //true

논리 연산자는 트랜지스터에서도 사용하는 연산자인데
&&는 and라고도 하며 비교하는 대상이 두개가 true면 true를 반환합니다 하나라도 false면 false를 반환합니다.
||는 or 라고도 하며 비교하는 두 대상중 하나라도 참이면 참을 반환합니다 덧셈과 곱셈을 생각하면 편한데 and는 곱셈 or는 덧셈이라고 생각하면 됩니다.

논리 곱셈 ex) 1 x 1 = 1 , 1 x 0 = 0
논리 덧셈 ex) 1 + 1 = 1 (2진수 올림값 1) , 1 + 0 = 1

느낀점

지금까지 몇개 안했는데 처음에 배우는 단계였는지 간단하지만 많은걸 하게 됩니다. 이때부터 어렵다고 느낄 수도 있지만 하나씩 다시 살펴보니 별게 아닌거 같네요 ㅎㅎ 다음에도 열심히 쓰겠습니다. 틀린점 있으면 알려주세요

profile
꾸준히 성장하는 개발자

0개의 댓글