사용자로부터 값을 입력받고 싶을 때는 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 = > "<"
<아스키코드 표>
'☕️JAVA' 카테고리의 다른 글
[JAVA] 자바 조건문 (if문 / switch문) (0) | 2020.02.18 |
---|---|
[JAVA] 자바 연산자(Operator) (0) | 2020.02.18 |
[JAVA] 자바 변수(Variavle)와 자료형(Data Type) (0) | 2020.02.18 |
[JAVA] 자바 출력문(print, println, printf), 형변환 (2) | 2020.02.18 |
[JAVA] 자바 환경변수 설정하는 이유, 설정하는 방법 (0) | 2020.02.18 |