728x90

 

  1. 2대 스캐너
  2. 단일 스캐너
  3. BufferedReader class

 

1. 스캐너 2개 사용

Scanner + while(sc.hasNextLine()) + [] sc.nextLine().split(”\\s”)

 

2. 단일 스캐너

ArrayList + while(sc.hasNext()) + add(sc.next())

 

3.BufferedReader

BufferedReader + while( 변수.readline() != null )+ [] 변수.split(”\\s”)

스캐너는 try catch가 자동으로 되고 BufferedReader는 익셉션을 수동으로 잡아줘야해서 try catch 필수

 

참고자료

https://www.techiedelight.com/ko/read-multi-line-input-console-java/

728x90
반응형
728x90

 

문제 : 1330번: 두 수 비교하기 (acmicpc.net)

 

1330번: 두 수 비교하기

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

www.acmicpc.net

 

brain Storming
if문 사용
한 줄에 두 수 받기 뭐가 있을까
한 줄에 공백으로 두개 받고 구분자로 나누기? StringTokenizer
방법1 : Scanner + split()
방법2 : BufferedReader + StringTokenizer

 

풀이

일단 스캐너로 숫자1 공백 숫자2 이런식으로 입력을 받고

공백을 기준으로 split을 이용하여 나눠서 배열에 넣는다(split이 배열로 반환하기에 배열로 받아줘야함)

이후 배열의 인덱스번호로 두 수를 지정하고 int로 형변환 해주면서 각각 변수에 넣어주고 if문으로 조건을 주어서 출력했다

 

정답

Scanner + String Class split() 방법

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String num = sc.nextLine();

        String[] nums = num.split(" "); // String Class인 split()은 배열로 반환하므로, 배열로 받아야함


        // 배열로 받은 것을 인덱스 번호로 수 2개로 나눔
        int num1 =  Integer.parseInt(nums[0]);
        int num2 =  Integer.parseInt(nums[1]);

        if(num1 < num2){
            System.out.println("<");
        }else if(num1 > num2){
            System.out.println(">");
        }else {
            System.out.println("==");
        }

    }
}

 

 

728x90
반응형
728x90

 

문제 : 10430번: 나머지 (acmicpc.net)

 

10430번: 나머지

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

www.acmicpc.net

 

 

 

a,b,c 각 변수에 스캐너로 값을 받고

문제대로 println에 식만 넣으면 되는 간단한 문제!

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        System.out.println((a+b)%c);
        System.out.println(((a%c)+(b%c))%c);
        System.out.println((a*b)%c);
        System.out.println(((a%c)*(b%c))%c);
        
    }
}
728x90
반응형
728x90

 

스캐너로 1-9 사이 양수를 받아

해당 수의 구구단을 출력하기

 

1-9외에 입력이 들어오면 1-9사이 정수만 입력하라는 문자를 출력하고

1-9가 들어오면 num1 변수를 가지고 for문 반복으로 구구단 출력

public void while_03() {
    // 1-9 사이 수를 입력 받아 구구단 출력
    Scanner sc = new Scanner(System.in);
    System.out.println("1-9 정수입력 : ");
    int num1 = sc.nextInt();

    if(num1 < 1 || num1 > 9 ) {
        System.out.println("1-9 정수입력만 입력가능");
    }else {
        for(int i=1; i < 10; i++) {
            System.out.println(num1+" x "+i+" = "+num1*i);
        }
    }
}
728x90
반응형
728x90

 

스캐너(Scanner)

Scanner sc = new Scanner(System.in);

System.in : 컴퓨터 자체 표준입출력

          키보드 입력값을 받아오기 위한 명령어. 키보드 한정.

System.out : 콘솔(결과 나오는 창. 이 중 하나의 도구가 모니터) 에다 출력하기 위한 표준출력

 

 

문자

nextLine() : 문자/문자열을 받아옴

   -다른 next는 값만 가져오지만 얘만 줄바꿈도 같이 버퍼에서 끌어온다

next() : : 문자/문자열을 받아옴

 

숫자

nextInt() : 정수 int 받아옴

nextlong() : 정수 long 받아옴

netxFloat() : 실수타입 float 받아옴

nextDouble() : 실수타입 double 받아옴

 

키보드 입력이 들어오면 값을 받아 버퍼(Buffer) 임시저장공간에 잠깐 저장됨

nextLine()은 받아온 값(값\n(줄바꿈))을 전체 다 인식 -버퍼에는 값이 안남음. 값을 전체 다 인식해서 넘기기기에.

next()는 받아온 값(값\n) 중 실제 데이터만 인식 -딱 값만 가지고간다 -버퍼에는 \n(줄바꿈)이 남아있음

 

 

스캐너 사용시, 입력도 안했는데 값이 넘어가는 이유

콘솔창에서 address가 입력이 안됨

System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();

System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();**	// 결과값에서 address가 입력이 안됨

System.out.println(name2+"("+age2+")"+"님이 사시는 곳은 "+address2+"입니다.");

키보드 입력 강건강 엔터치면 강건강\n까지 입력됨

버퍼 공간에 강건강\n까지 입력됨

nextLine()은 강건강\n 전체를 다 가지고가서 버퍼에 남는게 없음

String name = sc.nextLine();의 넥스트 라인에 강건강\n이 들어가있는 상태

.nexline()에서 변수 name으로 넘어갈 때 강건강만 넘어가고 \n는 짤려서 안넘어감

 

해결방법 3가지

  1. 주소를 next()로 받아오기
  2. nextLine()을 추가하기
  3. 엔터가 남지 않도록 나이를 받을 때, nextLine() 받은 후 parsing하기

 

해결방법1

Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.**next();**

해결방법2

Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
**sc2.nextLine();** // 중간에 넥스트라인 추가로 \\n의 찌꺼끼를 패스시킴 
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();
System.out.printf("%s(%d)님이 사시는 곳은 %s입니다.", name2, age2, address2);

 

해결방법3

parsing : 문자열을 데이터타입 기본형(primitive) 으로 바꾸는 것

Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
String strAge = sc2.nextLine();
int age2 = Integer.parseInt(strAge); // (strAge)를 parsing 하고 나온 것을 변수에 넣어야함
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();

 

728x90
반응형
728x90

 

Scanner란?

화면으로부터 데이터를 입력받는 기능을 제공하는 ‘클래스’

 

1)import문 추가

    - import java.util.*;

 

 

2)Scanner객체의 생성

    - Scanner scanner = new Scanner(System.in)

    - System.in : 화면입력한다는 의미

 

 

3)Scanner객체를 사용

int num = scanner.nextInt();       // 화면에서 입력받은 정수를 num에 저장
String input scanner.nextLine();   // 화면에서 입력받은 내용을 input에 저장.
                                   // nextLine은 한 행을 읽어서 문자로 변환
int num = Integer.parseInt(input); // 문자열(input)을 숫자(num)로 변환

   

     

<실습>

import java.util.*;

public class Ch2_14_Scanner {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		System.out.println(num);
		System.out.println(num2);
		System.out.println(num3); // 가로로 공백한칸 띄우고 입력가능
// 입력값 100 200 300
// 결과값
// 100
// 200
// 300

Integer.parseInt()

nextLine() : 라인 단위로 값 입력받기 가능

 

728x90
반응형
728x90

 

 

 

import java.util.Scanner;

public class VariablePractice4 {
	
	public void method1() {
		
	// 영어 문자열 값을 키보드로 입력 받아 문자에서 앞에서 세 개를 출력하세요
	// .charAt()
		
		// 방법1 : println()
		Scanner sc = new Scanner(System.in);
		System.out.print("문자열을 입력하세요 : ");
		String str = sc.nextLine();
		
		System.out.println("첫 번째 문자 : " + str.charAt(0));
		System.out.println("두 번째 문자 : " + str.charAt(1));
		System.out.println("세 번째 문자 : " + str.charAt(2));
		
		// 방법2 : printf()
		char ch1 = str.charAt(0);
		char ch2 = str.charAt(1);
		char ch3 = str.charAt(2);
		System.out.printf("첫 번째 문자 : %c%n",ch1 );
		System.out.printf("두 번째 문자 : %c%n",ch2 );
		System.out.printf("세 번째 문자 : %c",ch3 );
				
	}
}
728x90
반응형
728x90

 

 

728x90
반응형
728x90

 

 

728x90
반응형

+ Recent posts