1. 입출력 함수 사용시 주의사항 1
- 타입 별로 입력을 받는 방법
1) int를 입력 받을 때는 nextInt 메서드를 이용한다.
public class StandardIO {
public static void main(String[] args) throws IOException {
//int를 입력 받을 때는 nextInt 메서드를 이용한다.
Scanner sc = new Scanner(System.in);
int a,b;
a = sc.nextInt();
b = sc.nextInt();
System.out.println(a+" "+b);
}
}
입력 : 10 20
결과 : 10 20
2) char를 입력 받을 때는 (char)System.in.read 메서드를 이용한다.
public class StandardIO {
public static void main(String[] args) throws IOException {
//char를 입력 받을 때는 (char)System.in.read 메서드를 이용한다.
char ch;
ch = (char)System.in.read();
System.out.println(ch);
}
}
입력 : A
결과 : A
3) char를 여러개 입력 받을 때는 nextLine 메서드를 이용한다.
public class StandardIO {
public static void main(String[] args) throws IOException {
//char를 여러개 입력 받을 때는 nextLine 메서드를 이용한다.
char a, b;
String str;
Scanner sc = new Scanner(System.in);
str = sc.nextLine();
a = str.charAt(0);
b = str.charAt(2);
System.out.println(a+" "+b);
sc.close();
}
}
입력 : A B
결과 : A B
2. 입출력 함수 사용시 주의사항 2
- 입력을 여러줄로 받을 경우
1) int를 받을 경우 두 줄로 입력 받아도 문제가 전혀 없다.
public class StandardIO {
public static void main(String[] args) throws IOException {
//int를 받을 경우 두 줄로 입력 받아도 문제가 전혀 업다.
Scanner sc = new Scanner(System.in);
int a,b;
a = sc.nextInt();
b = sc.nextInt();
System.out.println(a+" "+b);
//nextShort, nextLong, nextDouble, nextFloat 등이 있다.
}
}
입력 : 10
입력 : 20
결과 : 10 20
2) 문자를 받을 경우 두 줄로 입력 받을 때 잘 되지 않는다.
-> 첫 A를 입력하고 엔터를 누르는 순간! \n 엔터 값이 먹히고 해당 값이 들어가기 때문이다.
public class StandardIO {
public static void main(String[] args) throws IOException {
char a1,b1;
a1 = (char)System.in.read();
b1 = (char)System.in.read();
System.out.println(a1+" "+b1);
}
}
입력 : A
입력 : B
결과 : A B
와 같은 결과가 아니다...실상은 아래와 같이 입출력된다.
입력 : A
결과 : A
3) 문자를 여러줄 받는 경우, nextLine 메서드를 이용해서 한 줄 씩 읽어서 처리하자.
※ next() 개행문자를 무시하고 입력을 받음, 즉 숫자를 치고 엔터를 누를경우 엔터 전까지만 입력을 받음.
※ nextLine() 한줄 단위로 입력 받기 때문에, 개행문자도 한 줄로 인식합니다.
public class StandardIO {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
String str;
char a, b;
str = sc.nextLine();
a = str.charAt(0);
str = sc.nextLine();
b = str.charAt(0);
System.out.println(a+" "+b);
}
}
입력 : A
입력 : B
결과 : A B
3. 입출력 함수 사용시 주의사항 3
- 입력 받을 개수가 가변적인데 그 사이에 공백이 있을 경우
1) int는 nextInt로 char는 nextLine으로 받으면 문제가 발생한다.
-> 숫자를 입력받고 엔터를 치면 Exception이 발생한다. nextInt()로 입력을 받기 때문에 개행문자 전까지만 입력을 받고 개행문자(\n)는 다음 nextLine이 읽었기 때문이다. 이를 해결하기 위해선 nextInt() 와 nextLine() 함수 사이에 nextLine()함수를 한번 더 사용해 개행문자를 제거하도록 한다.
입력 : 5
출력 : Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at COMMON.StandardIO.main(StandardIO.java:66)
2) nextLine 메소드를 한번 더 사용해서 해결할 수 있다.
-> nextLine() 를 중간에 사용함으로써 개행문자 제거
입력 : 5
입력 : A B C D E
결과 : A B C D E
3) 모든 입력을 nextLine 메서드를 활용해서 해결할 수 있다.
입력 : 5
입력 : A B C D E
결과 : A B C D E
3. 입출력 함수 사용시 주의사항 4
- 공백이 포함된 문자열을 입력받는 경우
1) 입력받을 문자열 개수는 가변이고 문자열 사이가 공백으로 구분되었을 경우
입력 : 5
출력 : alice bob libe lie libe lilie
'프로그래밍 > Java' 카테고리의 다른 글
[JAVA] 조합,중복조합,순열,중복순열 소스 (1) | 2019.03.23 |
---|---|
[JAVA] JAVA 1차원 배열, 2차원 배열 깊은복사 (0) | 2019.03.09 |
[String] == VS equals 문자열 비교 (1) | 2017.12.27 |
[Java] String vs StringBuffer vs StringBuilder (0) | 2017.10.26 |
[Java] 다형성 (Polymorphism) (0) | 2017.10.25 |
댓글