[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 -> 음수
계속하려면 아무 키나 누르십시오 . . .
*/
++ 컴파일창 복사 꿀팁💡
컴파일창 이렇게 드래그해서 엔터치면 복사됨 ~_~
Author And Source
이 문제에 관하여([JAVA]5일차(System.in.read()/pint구분/Scanner/비트연산자/비트 shift 연산/삼항연산자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyojin_j/국비지원-개발자-양성과정-5일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)