반응형

사용자로부터 값을 입력받고 싶을 때는 Scanner라는 클래스를 사용하게 됩니다.

Scanner sc = new Scanner(System.in);

처음에 빈공간에서 sc 입력 후 ctrl+space 후 엔터를 치면

자동으로 java.util.Scanner가 import 됩니다!!

예제1. 간단한 입출력

package day4;

import java.util.Scanner;

public class InputTest {

	public static void main(String[] args) {
		
		int num1 = 0 ;
		int num2 = 0;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫번쨰 정수 : ");
		num1 = sc.nextInt();
		System.out.print("두번쨰 정수 : ");
		num2 = sc.nextInt();
		
		System.out.println("첫번쨰 정수 : "+num1);
		System.out.println("두번쨰 정수 : "+num2);
		System.out.print("두 수의 합   : ");
		System.out.println(num1+num2);
	}

}

출력 값

<중요>

sc.next() // 공백 전까지 입력을 받음

sc.nextLine() // 한 줄 전체를 입력 받음

sc.nextInt(), sc.nextDouble() // sc.next+자료형() => 자료형에 따라 입력을 받음

Scanner 클래스의 주요 메소드

메소드 설명
String next() 다음 토큰을 문자열로 리턴
byte nextByte() 다음 토큰을 byte 타입으로 리턴
short nextShort() 다음 토큰을 short 타입으로 리턴
int nextInt() 다음 토큰을 int 타입으로 리턴
long nextLong() 다음 토큰을 long 타입으로 리턴
float nextFloat() 다음 토큰을 float 타입으로 리턴
double nextDouble() 다음 토큰을 double 타입으로 리턴
boolean nextBoolean() 다음 토큰을 boolean 타입으로 리턴
String nextLine() '\n'을 포함하는 한 라인을 읽고 '\n'을 버린 나머지만 문자열로 리턴
void close() Scanner의 사용 종료
boolean hasNext() 현재 입력된 토큰이 있으면 true, 아니면 새로운 입력이 있을 때 까지 무한정 대기. 새로운 입력이 들어올 때 true 리턴. ctrl+z 키가 입력되면 입력의 끝이므로 false 리턴

 

 

예제 2. next()와 nextLine()의 차이

package day4;

import java.util.Scanner;

public class InputTes2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int age = 0;
		String name = "";
		String x,y = "";
		
		//nextInt()와 nextLine()
		System.out.print("나이를 입력하세요 : ");
		age = sc.nextInt(); // 정수를 입력받음
		System.out.print("이름을 입력하세요 : ");
		name = sc.next(); // 공백 전 까지 입력 받음
		System.out.printf("나이 : %d  이름 : %s%n%n",age, name);
		
		// next() 와 nextLine()의 차이점
		System.out.print("a b c d 입력 : ");
		x = sc.next();	
		y = sc.nextLine(); // 한 줄 전체를 입력받음 
		System.out.printf("x = %s%ny = %s",x,y);
		//System.out.printf("x = %s %ny = %s %n",x, y);
	}

}

출력 값

next()를 쓰실 때는 항상 엔터도 입력에 포함되는 것을 인지하셔야 합니다

위에서 a b c d 값을 입력받고

첫 번째 next(); 에서 'a'를 입력받습니다

그리고 나머지 값들 _b_c_d (_는 공백이라고 생각하시면 됩니다)이

그대로 nextLine()으로 넘어가

y =b c d가 아닌

y = b c d로 출력되었습니다.

예제 2.

package day4;

import java.util.Scanner;

public class InputTes2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		String x,y = "";
		
		// next() 와 nextLine()의 차이점
		System.out.print("문자열 입력 : ");
		x = sc.next();		
		System.out.println(x);
		
		sc.nextLine(); // 이 부분을 넣어 준 이유!! -----------(1)
        // 위에서 "자바 이클립스" 입력시 "자바"라는 값만 입력받고 "이클립스" 부분은
        // 행사상품이 이월되듯이 없어지지않고 다음으로 넘어가서 y값에 영향을 주게됩니다.
        // 따라서 나머지값을 없애주기 위해 적었습니다.
		
		System.out.print("문자열 입력 : ");
		y = sc.nextLine(); 
		System.out.println(y);
	}

}

출력 값

출력 값을 보시면 next()는 공백까지만. nextLine()은 한 줄 전체를 입력받습니다

예제 2. 코드 중간쯤sc.nextLine();이라고 제가 주석을 단 부분이 보이시나요??

위에서 "자바 이클립스" 입력 시 "자바"라는 값만 입력받고 "이클립스" 부분은

행사상품이 이월되듯이 없어지지 않고 다음으로 넘어가서

y값에 영향을 주게 됩니다.

따라서 나머지 값을 없애주기 위해 적었습니다.

sc.nextLine(); 부분을 없애고 출력을 해보면....

첫 번째 출력 값처럼 제대로 나오지 않고 실행이 끝나버려 이상하게 나오는 것을 확인할 수 있습니다!!

 

예제 3. 암호화 간단 예제

package day4;

import java.util.Scanner;

public class Encryption {

	public static void main(String[] args) {
		
		String pw = null;
		System.out.print("PW : ");
		pw = new Scanner(System.in).next();
		System.out.print("암호화 된 PW : ");
		for(int i = 0; i<pw.length();i++)
		{
			System.out.printf("%c",(int)pw.charAt(i)+10);
			//System.out.println();
		}
		
	}

}

출력 값

charAt(i) 함수는 그 문자열의 i번째 성분을 뽑아 오는 역할을 한다고 보시면 됩니다.

System.out.printf("%c",(int)pw.charAt(i)+10)에서

pw문자열의 i번째 성분을 10 진수 값으로 바꾸어 +10을 한 뒤 문자열로 출력을 하게 되면

해당하는 아스키코드 값이 출력이 되어 암호화가 되는 원리입니다.

ex)"2" => 아스키코드값 : 50

50 + 10 = 아스키코드 값 : 60 = > "<"

<아스키코드 표>

 

반응형

+ Recent posts