import java.util.Scanner;
public class ScannerTest1 {
public static void main(String[] args) {
//키보드를 통해서 데이터를 입력 받는 스캐너
Scanner sc = new Scanner(System.in);
String addr = "";
System.out.print("주소를 입력하세요: ");
addr = sc.nextLine();
System.out.println("주소: " + addr);
//+의 의미 1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
//2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
sc.close();
}
}
+의 의미
1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
주소를 입력하세요: 서울시 강남구 역삼동 //주소 입력
주소: 서울시 강남구 역삼동
System.out.println("주소: " + addr);
입력받은 주소값이 addr 에 저장되어 출력 된다
next / nextLine (문자열을 입력받는다)
에러 코드
import java.util.Scanner;
public class ScannerTest1 {
public static void main(String[] args) {
//키보드를 통해서 데이터를 입력 받는 스캐너
Scanner sc = new Scanner(System.in);
//next(): 문자열을 띄어쓰기 전까지 입력 받는다.
//nextLine(): 문자열을 한 줄 전체로 입력 받는다.
String addr = "";
System.out.print("주소를 입력하세요: ");
addr = sc.next();
String name ="";
System.out.println("이름을 입력하세요: ");
name= sc.nextLine();
System.out.println(name + "님은" + addr + "에 삽니다");
//+의 의미 1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
//2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
sc.close();
}
}
주소를 입력하세요: 서울시 강남구 역삼동
이름을 입력하세요:
강남구 역삼동님은 서울시에 삽니다
next(); 문자열을 띄어쓰기 전까지 입력 받는다.
nextLine(); 문자열을 한 줄 전체로 입력 받는다.
키보드 버퍼가 비어있을 경우 입력을 요구하며 대기하고
키보드 버퍼가 비어있지 않을 경우, 키보드 버퍼 전체의 내용을 읽어들인다
addr = sc.next(); 서울시 //띄어쓰기 전까지 입력 받음
주소를 입력하고 엔터를 치면
띄어쓰기 뒤에 나오는 문자들은 키보드 버퍼라는 임시기억장소에 들어가게 된다
강남구 역삼동 은 아직 키보드버퍼에 남아 있기 때문에
name= sc.nextLine(); 에는 키보드버퍼에 있는 강남구 역삼동 한줄이 들어오게 된다
이 경우에는 이름을 입력 받는 실행을 건너뛰고, 주소가 바로 출력 된다
수정한 코드
import java.util.Scanner;
public class ScannerTest1 {
public static void main(String[] args) {
//키보드를 통해서 데이터를 입력 받는 스캐너
Scanner sc = new Scanner(System.in);
//next(): 문자열을 띄어쓰기 전까지 입력 받는다.
//nextLine(): 문자열을 한 줄 전체로 입력 받는다.
//키보드 버퍼가 비어있을 경우 입력을 요구하며 대기하고
//키보드 버퍼가 비어있지 않을 경우, 키보드 버퍼 전체의 내용을 읽어들인다
String addr = "";
System.out.print("주소를 입력하세요: ");
addr = sc.nextLine();
String name = "";
System.out.println("이름을 입력하세요: ");
name= sc.nextLine();
System.out.println(name + "님은 " + addr + "에 삽니다");
//+의 의미 1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
//2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
sc.close();
}
}
주소를 입력하세요: 서울시 강남구 역삼동
이름을 입력하세요:
홍길동
홍길동님은 서울시 강남구 역삼동에 삽니다
nextLine 으로 문자열 한줄 전체 다 받는 걸로 수정하면 제대로 출력 된다
next 입력받을 자료형
에러 코드
import java.util.Scanner;
public class ScannerTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int age = 0;
System.out.print("나이를 입력 하세요: ");
age = sc.nextInt();
String name = "";
System.out.print("이름을 입력 하세요: ");
name = sc.nextLine();
System.out.println(name + "님은 " +age + "살 입니다.");
sc.close();
}
}
나이를 입력 하세요: 20
이름을 입력 하세요: 님은 20살 입니다.
이 경우에는 이름 입력을 건너뛰고 바로 출력이 된다
20 [엔터키] // 엔터키 까지 키보드버퍼에 들어가게 된다
nextInt(); => 20 까지 저장후 age변수에 넣는다
nextLine(); 키보드버퍼가 비어 있지 않으면 버퍼에 남은 내용 전체를 불러들인다
즉 엔터키 값이 아직 버퍼에 남아 있다(눈에는 안보이지만)
문자열을 제외한 데이터를 입력 받은 후 nextLine() 메소드가 실행되야 한다면
키보드 버퍼의 엔터키를 읽어들이는 문제가 발생된다
문자열을 제외한 데이터를 입력 받은 후, 키보드 버퍼를 비워주는 동작을 실행하고 nextLine() 실행
수정한 코드
import java.util.Scanner;
public class ScannerTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int age = 0;
System.out.print("나이를 입력 하세요: ");
age = sc.nextInt();
//문자열을 제외한 데이터를 입력 받은 후 nextLine() 메소드가 실행되야 한다면
//키보드 버퍼의 엔터키를 읽어들이는 문제가 발생된다
//문자열을 제외한 데이터를 입력 받은 후, 키보드 버퍼를 비워주는 동작을 실행하고 nextLine() 실행
sc.nextLine(); //키보드 버퍼 비워주는 동작
String name = "";
System.out.print("이름을 입력 하세요: ");
name = sc.nextLine();
System.out.println(name + "님은 " +age + "살 입니다.");
sc.close();
}
}
나이를 입력 하세요: 20
이름을 입력 하세요: 홍길동
홍길동님은 20살 입니다.
next();
공백을 구분점으로 판단해서 각각의 문자열을 입력 받음
package day04;
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
String name=""; //초기화
Scanner sc = new Scanner(System.in);
//sca + ctrl + 스페이스바 누르면 자동완성 scanner클래스까지 호출 됨!
// .마침표는 하위연산자 A.b : A안에 b
System.out.println("이름이 무엇입니까?");
//내가 입력한 문자열 값이 담긴다
name = sc.next();
System.out.println(name);
sc.close();
}
}
이름이 무엇입니까?
길동 (입력)
길동
nextLine();
공백까지도 한 줄로 판단해서 한 줄을 그대로 입력 받음
package day04;
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
String name=""; //초기화
String lastName="";
Scanner sc = new Scanner(System.in);
//sca + ctrl + 스페이스바 누르면 자동완성 scanner클래스까지 호출 됨!
// .마침표는 하위연산자 A.b : A안에 b
System.out.println("이름이 무엇입니까?");
//내가 입력한 문자열 값이 담긴다
// name = sc.next();
// lastName=sc.next();
name=sc.nextLine();
System.out.println(name);
System.out.println(lastName);
sc.close();
}
}
이름이 무엇입니까?
길동 홍
길동 홍
package day04;
import java.util.Scanner;
public class InputTest {
public static void main(String[] args) {
int num1=0, num2=0;
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 정수: ");
num1= sc.nextInt();
System.out.println("두번째 정수: ");
num2= sc.nextInt();
System.out.println("첫번째 정수: "+num1);
System.out.println("두번째 정수: "+num2);
System.out.println("두 정수의 합 : "+ (num1+num2));
}
}
첫번째 정수: 1
두번째 정수:
3
첫번째 정수: 1
두번째 정수: 3
두 정수의 합 : 4
한 줄에 정수 두개를 입력 받아 두 수의 합 구하기
package day04;
import java.util.Scanner;
public class InputTask {
public static void main(String[] args) {
int num1=0 , num2=0;
Scanner sc = new Scanner(System.in);
System.out.println("정수 2개를 입력해주세요. \n 예)1 2");
num1=Integer.parseInt(sc.next());
num2=Integer.parseInt(sc.next());
System.out.println("결과: " +(num1+num2));
//"결과: " +num1 문자열과 정수가 연결되면 통째로 문자열로 보기 때문에
//그 다음에 오는 정수도 문자열로 변환되어 연산이 아닌, 연결이 되어 나온다
}
}
정수 2개를 입력해주세요.
예)1 2
1 3
결과: 4
"결과: " +num1 문자열과 정수가 연결되면 통째로 문자열로 보기 때문에
그 다음에 오는 정수도 문자열로 변환되어 연산이 아닌, 연결이 되어 나온다
nextLine 주의 할 점
package day04;
import java.util.Scanner;
public class InputTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("나이를 입력하세요");
sc.nextInt();
System.out.println("이름을 입력하세요");
sc.nextLine(); //엔터키가 먹히기 때문에
sc.nextLine();
}
}
나이를 입력하세요
12
이름을 입력하세요
규규
'Dev. > java' 카테고리의 다른 글
Java 조건문(if~else) (0) | 2022.04.23 |
---|---|
Java String (0) | 2022.04.23 |
연산자/제어문 (0) | 2022.04.20 |
Java 연산자/instanceof 연산자 (0) | 2022.04.18 |
Java의 시작, 변수와 상수 (0) | 2022.04.15 |
댓글