[JAVA]5일차(System.in.read()/pint구분/Scanner/비트연산자/비트 shift 연산/삼항연산자)

7월20일(화)

Test016~Test027

◼ System.in.read()

  • 입력대기열에 있는 것을 데려오는 것
  • 자바는 단일 입출력 구조
  • 엔터같은 경우 키값이 2개임(깜빡이는 것 하나(\r), 개행하는 것 하나(\n))
  • ※ 입력 대기열에 남아있는 \r 과 \n을 스킵(건너뛰기) 해야함!!!!
System.in.skip(2); 
//-- 매개변수(2)에 의해 두 글자를 읽지 않고 건너뛴다.(버린다.)
import java.io.IOException;

public class Test014
{
	public static void main(strint[] args) throws IOException
    
    	{
            //주요 변수 선언
            char ch;
            int n;
            char temp;

            //연산 및 처리
            System.out.print("한 문자 입력: ");
            ch = (char)System.in.read();

            System.in.skip(2);

            System.out.print("한 자리 정수 입력 : ");
            n = System.in.read()

            temp = (char)n;

            //결과 출력
            System.out.println();
            System.out.println(">> 입력한 문자 :" + ch);
            system.out.println(">> 입력한 정수 : " + temp);
   	 }
    
    
}
/* 실행 결과
한 문자 입력 : A
한 자리 정수 입력 : 5

>> 입력한 문자 : A
>> 입력한 정수 : 5
계속하려면 아무 키나 누르십시오 . . .

*/

◼ print() / println() / printf()

  • printf에서 개행은 \n 또는 %n
  • System.out.printf("%10d\n",123); // %10d -> 총 10자리 앞에 7자리 비우고 세자리 등장하는 개념
  • System.out.printf("%8d\n", 1234); // %8d -> 총 8자리 앞에 4자리 비우고 4자기 등장
  • System.out.printf("%010d\n",123); //%010d -> 총 10자리인데 앞에 0으로 채워짐
  • printf
    System.out.printf("+%d\n",365); //+365
    System.out.printf("%d\n",+365); //+365
    System.out.printf("-%d\n",365); //-365
    System.out.printf("%d\n",-365); //-365
    System.out.printf("%(d\n",-365); //음수는 괄호안에 (365)
    System.out.printf("%(d\n",365); //양수는 그냥 숫자 365
    System.out.printf("%c\n",'A'); //A
    System.out.printf("%s\n","ABCD"); //ABCD
    System.out.printf("%h\n",365); //16d(16진수)
    System.out.printf("%o\n",24); //30 (8진수)
    System.out.printf("%b\n",true); //true (불린형은 %b)
    System.out.printf("%f\n",123.23); //123.230000 (소수점 이하 6자리까지 나옴)
    System.out.printf("%.2f\n",123.236); ////123.24
    System.out.printf("%8.2f\n",123.236); // 공간 8칸 확보 그리고 소숫점 이하 두번째까지 표현 . 도 자리차지 // 123.24 (공백2개)
    System.out.printf("%2.2f\n",123.236); // 내가 가지고있는 것보다 작은 자리수를 나타내면 무시되고 실행됨 //123.24

◼ Scanner

▪ Scanner

  • import java.util.Scanner;
  • 단락 문자 패턴을 사용하여 입력을 토큰에 따라 분할하며 디폴트(default)로 사용되는 단락 문자는 공백이다.
  • 작성된 다음 토큰은 next() 메소드를 이용. 다른 형태의 값으로 변환할 수 있다.
  • 버퍼드리더보다 나중에 나왔고, 더 개선해서 나와서 편함
  • 컴퓨터는 기능이 많으면 성능이 더 떨어짐
  • throws IOException 불필요

▪ Scanner 구조

import java.util.Scanner; //이걸 써워야함!!

public class Test016
{
	public static void main(String[] args) //throws IOException 안해도 됨
	{
		// ○ Scanner 인스턴스 생성
		Scanner sc = new Scanner(System.in); //InputStreamReader 쓸 필요없음
			
		String name; //이름
		int kor, eng, mat; //국어, 영어, 수학 점수

		// ○ 연산 및 처리
		System.out.print("이름을 입력하세요 : ");
		//br.readLine();
		name = sc.next();

		System.out.print("국어 점수를 입력하세요 : ");
		//kor = Integer.parseInt(br.readLine());
		//kor = Integer.parseInt(sc.next());
		kor = sc.nextInt();
		System.out.print("수학 점수를 입력하세요 : ");
		eng = sc.nextInt();
		System.out.print("수학 점수를 입력하세요 : ");
		mat = sc.nextInt();



		// ○ 결과 출력
		System.out.println();
		System.out.println(">> 이름 : " + name);
		System.out.println(">> 총점 : " + (kor + eng + mat)); //(괄호)안하면 908070이런식으로 나옴
	}
}
/* 실행 결과
이름을 입력하세요 : 정효진
국어 점수를 입력하세요 : 90
수학 점수를 입력하세요 : 80
수학 점수를 입력하세요 : 70

>> 이름 : 정효진
>> 총점 : 240
계속하려면 아무 키나 누르십시오 . . .
*/

▪ sc.next().char.At(0);

Scanner을 이용해서 char을 입력하기 위해서는
sc.next().char.At(0);하면 된다!
sc.next() 뒤에 charAt(0) 또는 문자열이 많은 경우 char 배열을 생성해 toCharArray()로 받아줘야 한다.

Scanner sc = new Scanner(System.in);
int n1, n2, res=0;
char c;

System.out.print("첫 번째 정수 입력 : ");
n1 = sc.nextInt();
System.out.print("두 번째 정수 입력 : ");
n2 = sc.nextInt();
System.out.print("연산자 입력[+ - * /] : ");
c = sc.next().charAt(0); //check~!!

▪ useDelimiter

//정효진,90, 80, 70
//정효진 *90 *80 *70
//정효진 -90 -80 -70
import java.util.Scanner;

public class Test018
{
	public static void main(String[] args)
	{
		// ○ 주요 변수 선언
		Scanner sc = new Scanner(System.in);
		String name;
		int kor, eng, mat, tot;

		// ○ 연산 및 처리
		System.out.print("이름,국어점수,영어점수,수학점수 입력(,구분) : ");
		sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*");
		//               정효진,90,80,70
		// Deliter 는 구분자!
		// \ns* -> 임의문자열  \s*가 나와야하니까 \\s*입력

		name = sc.next();
		kor = sc.nextInt();
		eng = sc.nextInt();
		mat = sc.nextInt();

		tot = kor + eng + mat;
				
		// ○ 결과 출력
		System.out.println("\n >> 이름 : " + name);
		System.out.println(" >> 총점 : " + tot);

	}
}
/* 실행 결과 (값 입력할 때 공백있으면 안됨 ,로만 구분!!)
이름, 국어점수, 영어점수, 수학점수 입력(, 구분) : 정효진,80,70,90

 >> 이름 : 정효진
 >> 총점 : 240
계속하려면 아무 키나 누르십시오 . . .
*/

◼ 비트 연산자

: 비트 단위 연산자 (&, | ,^, ~)

public class Test021
{
	public static void main(String[] args)
	{
		int a = 10, b = -10;

		System.out.printf("~a : %d\n", ~a);
		System.out.printf("~b : %d\n", ~b);

	}
}

/* 실행 결과 
~a : -11
~b : 9
계속하려면 아무 키나 누르십시오 . . .
*/


/*
a = 10 -> 00001010

             ↓~a

		  11110101  -> -11  check?  -> ok~!!!
        + 00001011  =>  11
		------------------
		  00000000  -> 0   
		  

b = -10    10 -> 00001010 -> 2의 보수
                            ----------------
							1의 보수 + 1
							--------
							비트열 반전
                 11110101
				        1
				 11110110  -> -10 -> check? -> ok~!!
               + 00001010  -> 10
              --------------------
			            0
*/
public class Test022
{
	public static void main(String[] args)
	{
		// 주요 변수 선언
		int a = 13, b = 7;
		int c, d, e;
		
		// 연산 및 처리
		c = a & b;
		d = a | b; //버티컬라인
		e = a ^ b; 

		// 결과 출력
		System.out.printf("a & b : %d\n", c);
		System.out.printf("a | b : %d\n", d);
		System.out.printf("a ^ b : %d\n", e);


	}
}
/* 실행 결과
a & b : 5
a | b : 15
a ^ b : 10
계속하려면 아무 키나 누르십시오 . . .
*/

 /*
    13 -> 00001101
   & 7 -> 00000111
	 -------------
	      00000101 ->5    둘다 1이면 1

	13 -> 00001101
  |  7 -> 00000111
	 -------------
	      00001111 ->15    하나만 1이어도1


	13 -> 00001101
  ^  7 -> 00000111
	 -------------
	      00001010 ->10     같으면 0 다르면 1

		  
*/

◼ 비트 shift 연산

public class Test023
{
	public static void main(String[] args)
	{
					  //				            |
		int x = 128;  // 00000000 00000000 00000000 10000000 
		              // 00000000 00000000 00000100 00000000
					  //                        |

		System.out.printf("x << 3 : %d\n", x<<3);
		System.out.printf("x * 8 : %d\n", x*8);
		// 둘다 1024
		// *8 보다 <<를 한 것이 더 빠르게 처리된다.

		System.out.printf("x >> 3 : %d\n", x>>3);
		System.out.printf("x / 8 : %d\n", x/8);
		// 16

		//  >> -> 비트열 이동 시 빈 자리에 양수면 0, 음수면 1  => 부호 유지
		//  >>> -> 비트열 이동 시 빈자리에 무조건 0을 채워넣음

		System.out.printf("x << 24 : %d\n", x<<24);
		//x << 24 : -2147483648  제일 앞에 1이되면 음수가 되고 음수 중에서도 제일 최대값이 됨
		// 10000000 00000000 00000000 00000000
		// |


		System.out.printf("x << 25 : %d\n", x<<25);
		System.out.printf("x << 26 : %d\n", x<<26);
		System.out.printf("x << 31 : %d\n", x<<31);
		// 0 -> 25번째는 다시 맨 맨뒤로감  check~!!
		// 00000000 000000000 00000001 이지만 0임 값을 발현 못함 32칸 이동해서 100000000되면 128 발현됨
		//                     -------  이만큼은 발현안된다는 것! 내자리인 128이 나오기 전까진 계속 카운트만 하고있음

		System.out.printf("x << 32 : %d\n", x<<32);
		//128


	}
}
/* 실행 결과
x << 3 : 1024
x * 8 : 1024
x >> 3 : 16
x / 8 : 16
x << 24 : -2147483648
x << 25 : 0
x << 26 : 0
x << 31 : 0
x << 32 : 128
계속하려면 아무 키나 누르십시오 . . .
*/

▪ 두 변수 값 바꾸기

public class hyodii024
{
	public static void main(String[] args)
	{
		int a = 20;
		int b = 23;
		int temp;

		System.out.printf("a->%d, b->%d\n", a, b);
			
		a=a^b;
		b=b^a;
		a=a^b;

		System.out.printf("a->%d, b->%d\n", a, b);		
		
		temp = a;
		a = b;
		b = temp;
		
		System.out.printf("a->%d, b->%d\n", a, b);		
	}
}
/*
a->20, b->23
a->23, b->20
a->20, b->23
계속하려면 아무 키나 누르십시오 . . .
*/

◼ 삼항연산자 == 조건 연산자

  • a?b:c -> a가 참이면 b, 거짓이면 C
  • 삼항연산자 안에 삼항연산자를 또 중첩해서 계속 사용할 수 있음!!
//사용자로부터 임의의 정수를 입력받아
//입력받은 정수가 양수인지, 음수인지, 0인지 구분하여
//이 결과를 출력하는 프로그램을 구현한다.
//단, 입력 데이터는 BufferedReader의 readLine()을 통해 넘겨받을 수 있도록 한다.
//또한, 조건 연산자(삼항연산자)를 활용하여 기능을 구현할 수 있도록 한다.

// 실행예)
// 임의의 정수 입력 : -12
// -12 -> 음수
//계속...

// 임의의 정수 입력 : 257
// 257 -> 양수
//계속...

// 임의의 정수 입력 : 0 
// 0 -> 영
//계속...

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

public class hyodii027
{
	public static void main(String[] args) throws IOException
	{
		int n;
		String strResult;

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("임의의 정수 입력 : ");
		n = Integer.parseInt(br.readLine());

		strResult = (n==0 ? "영" : (n>0 ? "양수" : "음수"));
		
		System.out.printf("%d -> %s\n",n,strResult);
	}
}
/*
임의의 정수 입력 : 0
0 -> 영
계속하려면 아무 키나 누르십시오 . . .

임의의 정수 입력 : 257
257 -> 양수
계속하려면 아무 키나 누르십시오 . . .

임의의 정수 입력 : -85
-85 -> 음수
계속하려면 아무 키나 누르십시오 . . .
*/

++ 컴파일창 복사 꿀팁💡


컴파일창 이렇게 드래그해서 엔터치면 복사됨 ~_~

좋은 웹페이지 즐겨찾기