본문 바로가기
My Image
프로그래밍/Java

[Java] 자바 표준 입출력 (nextInt, nextLine 등) 주의사항

by Lim-Ky 2018. 12. 5.
반응형

 

 

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

 

 

반응형

댓글