728x90

 


Scanner

java.util.Scanner

 

객체 생성 및 사용 예시

import java.util.Scanner;

public class Main{

	public static void main(String args[]){
    
    	Scanner sc = new Scanner(System.in);	//객체 생성
        
        String s1 = sc.next();	// 구분자로 분리된 문자열 1개
        String s2 = sc.nextLine();	// 엔터 이전의 한 라인 전체
        int n1 = sc.nextInt();	// 구분자로 분리된 정수 1개
        double d1 = sc.nextDouble();	// 구분자로 분리된 실수 1개
        
        sc.close();	//객체 종료 : 안하면 경고 뜸.
    }

}

 


1. 문자열 입력

1) .next()

//input : hi there
String s1 = sc.next();	// s1 : hi
String s2 = sc.next();	// s2 : there
  • 콤마(,),공백(\t),엔터(\n)를 기준으로 문자열을 잘라서 입력받음.
  • 따라서 문자열 내에 엔터, 공백등은 입력되지 않음. 

 

2) .nextLine()

//input : hi there
String s = sc.nextLine();	// s : hi there
  • 엔터(\n)까지의 문자열 전체를 받음.
  • 문자열 내에 \n을 포함해서 받음을 주의.

 

📢next와 nextLine을 혼용해서 사용할 경우, next에서 입력받지 못한 \n(개행)을 주의해야 함. 

  • next에서 입력받지 못한 개행문자는 nextLine하나를 통째로 날려버릴 수 있음.
    즉, 다음 라인을 입력받지 못하고 개행문자 하나만 입력받게 됨.
  • 이런 경우 그냥 nextLine을 한 번 더 써서 개행을 지워주면 됨. 

 


2. 문자 입력받기

📢 .nextChar() 메소드는 존재하지 않음!

//input : abc def
char c = sc.next().charAt(0);	// c : a
  • 이런식으로 문자열을 받아온 다음에  charAt메소드를 사용해서 받아온다. 

 


3. 나머지 기타 등등 입력받기

  • 모두 .nextXX()의 형태이니 골라서 사용하면 됩니다.
int n = sc.nextInt();	
double d = sc.nextDouble();	
boolean b = sc.nextBoolean();

 


4. .hasNext()

  • 다음 토큰이 있으면 true, 없으면(즉, EOF의 경우) false를 반환.
  • EOF가 아니면 입력이 있을 때까지 무한 대기 하므로 주의가 필요.
while (sc.hasNext()) {
			//TODO
}
  • 이외에 hasNextInt(),hasNextDouble().. 등으로 hasNextXXX() 형식을 취하고 있으니 골라서 사용하면 됩니다. 
    구체적인 설명이 필요하다면 아래 문서를 참고하세요. ( Ctrl + F로 찾아서 사용하세요 )
 

Scanner (Java Platform SE 8 )

Scans the next token of the input as a float. This method will throw InputMismatchException if the next token cannot be translated into a valid float value as described below. If the translation is successful, the scanner advances past the input that match

docs.oracle.com

 

 

728x90
728x90


 

1. Math.random()

  • 0.0 이상 1.0 미만의 double형 난수를 반환
  • 정적 메소드. import할 필요 없음.
  • 현재 시간을 seed로 사용.
코드 반환값x
Math.random() 0.0 <= x < 1.0 인 실수
Math.random() * N 0.0 <= x < N 인 실수
(int) ( Math.random() * N ) 0 <= x < N 인 정수
(int) ( Math.random() * N ) + 1 1 <= x < N+1 인 정수 ( 1에서 N까지의 정수)

 


2. Random()

Java.util.Random()
  • 객체를 생성하여 사용 == 지속적으로 난수 생성 시 유리 ( 재활용 가능 )

 

객체 생성

Random rand = new Random();

 

seed 지정

long seed = System.currentTimeMills();

Random rand = new Random(seed);

//이후 seed 변경 시 아래의 메소드 사용
rand.setSeed(anotherseed);

 

난수 리턴 메소드

메소드 설명
boolean nextBoolean() 균일 분포의 boolean형 난수 리턴
int nextInt() 균일 분포의 int형 전 범위 난수 리턴 
int nextInt(int n) 균일 분포의 0이상 n 미만의 int형 난수 리턴
long nextLong() 균일 분포의 long형 전 범위의 난수 리턴
float nextfloat() 균일 분포의 0.0이상 1.0미만의 float형 난수 리턴
double nextDouble() 균일 분포의 0.0이상 1.0 미만의 double형 난수 리턴
double nextGaussian() 정규 분포(평균이 0, 표준편차가 1)의 난수 리턴

 

  • ex. 0에서 9사이의 난수를 리턴
int r = rand.nextInt(10); // 0<= r < 10
728x90
728x90


Java 전체 연산자 우선순위 및 연산 대상

우선 순위 연산자 결합 방향 연산 대상 부가 설명
1 []
.
++
--
+, -
~
!
new
(type)
👈 모든 데이터형
참조형
정수형, 실수형
정수형, 실수형
정수형, 실수형
정수형
논리형
참조형
모든 데이터형
배열 요소 지정
객체 멤버 지정
값 증가
값 감소
부호에 사용
비트 반전
논리 반전
객체 생성
형 변환 연산자
2 +, / , % 👉 정수형, 실수형 산술계산
3 +, - 
+
👉 정수형, 실수형
String 객체
산술계산
문자열 병합
4 <<
>>
>>>
👉 정수형 비트 연산자
5 <, <=, =>, > 
instanceof
👉 정수형, 실수형
참조형
값의 대소 비교
객체 타입 비교
6 ==
!=
==
!=
👉 기본형
기본형
참조형
참조형
비교 연산자
7 &
&
👉 정수형
논리형
비트 AND
논리 AND
8 ^
^
👉 정수형
논리형
비트 XOR
논리 XOR
9 |
|
👉 정수형
논리형
비트 OR
논리 OR
10 && 👉 논리형 조건 AND
11 || 👉 논리형 조건 OR
12 ? : 👉 모든 데이터형 삼항 연산자
13 =
+=, -=,..등의 연산 후 대입 연산자들
👈 모든 데이터형 대입 연산
연산 후 대입

 

📁비트 논리 연산자

연산자 기호 연산자 이름 결합 방향 기능
& 비트 AND 👉 두 피 연산자의 값이 둘 다 1인경우만 1
| 비트 OR 👉 두 피연산자 중 하나라도 1인 경우 1
^ 비트 XOR 👉 두 피연산자의 값이 다른 경우 1
~ 비트 NOT 👈 단항 연산자. 피연산자의 모든 비트를 반전시킴

 

📁비트 이동 연산자 ( Shift 연산자 )

연산자 기호 결합 방향 기능 ( a 연산자 b 의 경우)
<< 👉 a를 b만큼 왼쪽으로 이동. 빈 공간은 0으로 채움.
<<1 은 x2와 동일함. 
>> 👉 a를 b만큼 오른쪽으로 이동. 빈공간은 음수는 1, 양수는 0으로 채움.
>>1 은 /2와 동일함. 
>>> 👉 a를 b만큼 오른쪽으로 이동. 빈공간은 무조건 0으로 채움. 

✨그냥 2를 곱하고 나누는 것보다 속도가 빠름.

 

📁논리 연산자

연산자 기호 결합 방향 기능
& 👉 두개의 피연산자가 모두 true인 경우 true
| 👉 두 피연산자 중 하나라도 true인 경우 true
! 👈 단항 연산자. 값을 반전.
^ 👉 두 피연산자가 서로 다른 경우만 true
&& 👉 &와 동일한 기능 + 앞 피연산자가 false인 경우 뒤 연산자를 검사하지 않음.
|| 👉 |와 동일한 기능 + 앞 연산자가 true인 경우 뒤 연산자를 검사하지 않음.

 

 

728x90
728x90


형 변환

Type Casting

; 변수의 타입을 다른 타입으로 변환

  • primitive는 primitve끼리, reference는 reference끼리 형 변환.
  • primitive와 reference 간의 변환은 wrapper class 사용 필요.
  • boolean은 변환 불가. boolean을 제외한 나머지 7개의 기본형은 서로 형 변환이 가능.

 

1. Implicit Type Casting

묵시적 형변환 ( 자동 형변환 )
  • 더 큰 크기의 타입에 집어넣는 경우, 자동으로 더 큰 타입으로 형변환 됨.
int smaller = 10;
double bigger = smaller;
// 정수형은 실수형으로 자동 형 변환됨

 

2. Explicit Type Casting

명시적 형변환
  • 더 작은 크기의 타입으로 집어 넣는 경우, 명시적으로 타입을 지정해줘야 함.
  • 📌값 손실이 발생할 수 있음
double bigger = 100;
int smaller = (int) bigger;
//(int)를 통해 형변환을 명시해주어야 함

 

😈 여러 타입 연산 시에는 가장 큰 값으로 결과값을 얻음.

😈 byte, char, short 는 이항 연산시에 자동으로 int로 변환되어서 계산됨.

 

728x90
728x90


변수

variable
  • 메모리를 담는 그릇 : 공간
  • 메모리 공간에 값을 할당 후 사용
  • 공간의 크기는 타입 별로 상이.

 

타입

; 변수에 저장되는 데이터의 종류.

1. Primitve Type

기본형
  • 미리 정해진 메모리의 크기에 변수 값을 저장.
  • 흔히 알고 있는 int, char, .. 등등
타입 키워드 크기 (bit 단위) 범위
논리형 boolean 1 true, false
문자형 char 16 \u0000 ~ 
\uffff (0 ~ 2^15-1)
정수형 byte 8 -128 ~ 127
short 16 -32768 ~ 32767
int  32 -2147483648 ~ 2147483647
long 64 -9223372036854775808 ~ 
9223372036854775807
실수형 float 32 0x0.000002P-126f ~ 
0x1.fffffeP+127f
double 64 0x0.0000000000001P-1022 ~ 
0x1.fffffffffffffP+1023

 

2. Reference Type

참조형
  • 데이터를 heap에 저장하고 그 공간의 주소를 저장.
  • Class, Interface, Array, String .. 
728x90

+ Recent posts