본문 바로가기
IT/김영한의JAVA입문_inFlearn

7. 훈련 - Scanner / Scanner 기본 예제 / Scanner 반복 예제 / 문제와 풀이1~4

by for-learn 2024. 12. 27.

7-1. Scanner

System.out을 통해 출력 했듯, System.in을 통해 사용자 입력을 받을 수 있다. 

Scanner1.java

package scanner;

import java.util.Scanner;

public class Scanner1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("문자열을 입력하세요:");
        String str = scanner.nextLine(); // 입력을 String으로 가져온다.
        System.out.println("입력한 문자열: " + str);

        System.out.print("정수를 입력하세요:");
        int intValue = scanner.nextInt();
        System.out.println("입력한 정수: " + intValue);

        System.out.print("실수를 입력하세요:");
        double doubleValue = scanner.nextDouble();
        System.out.println("입력한 실수: " + doubleValue);
    }
}

  • scanner.nextLine(): 엔터(\n)를 입력할 때까지 문자를 가져온다. 
  • scanner.nextInt(): 입력을 int형으로 가져온다. (정수)
  • scanner.nextInt() : 입력을 double형으로 가져온다. (실수)
  • 타입이 다르면 오류가 발생한다. 

print() vs println()

  • print(): 출력하고 다음 라인으로 넘기지 않는다.
  • println(): 출력하고 다음 라인으로 넘긴다.
  • 엔터 키를 치면 ( \n )이라는 문자를 남기는 것
    • 영어로 new line character, 한글로 줄바꿈 문자 또는 개행 문자

 

7-2. Scanner 기본 예제

두 수를 입력받고 그 합을 출력하는 예제

Scanner2.java

package scanner;

import java.util.Scanner;

public class Scanner2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요:");
        int num1 = scanner.nextInt();

        System.out.print("두 번째 숫자를 입력하세요:");
        int num2 = scanner.nextInt();

        int sum = num1 + num2;
        System.out.println("두 숫자의 합: " + sum);
    }
}

 

두 수를 입력받고 더 큰 수를 출력하는 예제. 두 숫자가 같은 경우 같다고 출력.

Scanner3.java

package scanner;

import java.util.Scanner;

public class Scanner3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자:");
        int num1 = scanner.nextInt();

        System.out.print("두 번째 숫자:");
        int num2 = scanner.nextInt();

        if (num1 == num2) {
            System.out.println("두 숫자가 같다.");
        } else if (num1 > num2) {
            System.out.println("더 큰 숫자: " + num1);
        } else {
            System.out.println("더 큰 숫자: " + num2);
        }
    }
}

 

7-3. Scanner 반복 예제

사용자가 입력한 문자열을 그래도 출력하는 예제

exit이라는 문자가 입력되면 프로그램 종료

프로그램은 반복해서 실행

ScannerWhile1.java

package scanner;

import java.util.Scanner;

public class ScannerWhile1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.print("문자열을 입력하세요(exit: 종료):");
            String str = scanner.nextLine();

            if (str.equals("exit")) {
                System.out.println("프로그램을 종료합니다.");
                break;
            }
            System.out.println("입력한 문자열:" + str);
        }
    }
}

 

첫 번째 숫자와 두 번째 숫자를 더해서 출력하는 프로그램을 개발

첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료

프로그램은 반복해서 실행

ScannerWhile2.java

package scanner;

import java.util.Scanner;

public class ScannerWhile2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.print("첫 번째 숫자:");
            int num1 = scanner.nextInt();

            System.out.print("두 번째 숫자:");
            int num2 = scanner.nextInt();

            if (num1 == 0 && num2 == 0) {
                System.out.println("프로그램을 종료");
                break;
            }
            int sum = num1 + num2;
            System.out.println("두 숫자의 합: " + sum);
        }
    }
}

 

사용자 입력을 받아 그 합계를 계산하는 프로그램을 작성해야 한다.

사용자는 한 번에 한 개의 정수를 입력할 수 있으며, 사용자가 0을 입력하면 프로그램은 종료된다.

이 때, 프로그램이 종료될 때까지 사용자가 입력한 모든 정수의 합을 출력해야 한다.

ScannerWhile3.java

package scanner;

import java.util.Scanner;

public class ScannerWhile3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int sum = 0;

        while (true) {
            System.out.print("정수를 입력하세요(0을 입력시 종료):");
            int num = scanner.nextInt();
            sum += num;

            if (num == 0) {
                System.out.println("입력한 모든 정수의 합: " + sum);
                break;
            }
        }
    }
}

 

7-1. 문제와 풀이1

ScannerEx1.java

package scanner.ex;

import java.util.Scanner;

public class ScannerEx1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("당신의 이름을 입력하세요:");
        String name = scanner.nextLine();
        System.out.print("당신의 나이를 입력하세요:");
        int age = scanner.nextInt();

        System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "살 입니다.");
    }
}

 

 

ScannerEx2.java

package scanner.ex;

import java.util.Scanner;

public class ScannerEx2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("하나의 정수를 입력하세요:");
        int num = scanner.nextInt();

        if (num % 2 == 0) {
            System.out.println("입력한 숫자 " + num + "는 짝수입니다.");
        } else {
            System.out.println("입력한 숫자 " + num + "는 홀수입니다.");
        }
    }
}

 

ScannerEx3.java

package scanner.ex;

import java.util.Scanner;

public class ScannerEx3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("음식 이름을 입력해주세요:");
        String foodName = scanner.nextLine();

        System.out.print("음식의 가격을 입력해주세요:");
        int foodPrice = scanner.nextInt();

        System.out.print("음식의 수량을 입력해주세요:");
        int foodQuantity = scanner.nextInt();

        int totalPrice = foodPrice * foodQuantity;

        System.out.println(foodName+" "+foodQuantity+"개를 주문하셨습니다. 총 가격은 "+totalPrice+"원 입니다. ");
    }
}

 

ScannerEx4.java

package scanner.ex;

import java.util.Scanner;

public class ScannerEx4 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("구구단의 단 수를 입력해주세요:");
        int n = input.nextInt();
        System.out.println(n + "단의 구구단:");

        for (int i = 1; i <=9 ; i++) {
            System.out.println(n + " x " + i + " = " + n * i);
        }
    }
}

 

7-2. 문제와 풀이2

ChangeVarEx.java

package scanner.ex;

public class ChangeVarEx {
    public static void main(String[] args) {
         int a = 10;
         int b = 20;

         int temp = a;
         a = b;
         b = temp;

        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

 

ScannerEx5.java

package scanner.ex;

import java.util.Scanner;

public class ScannerEx5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요:");
        int num1 = scanner.nextInt();
        System.out.print("두 번째 숫자를 입력하세요:");
        int num2 = scanner.nextInt();

        if (num1 > num2) { // 숫자 교환
            int temp = num2;
            num2 = num1;
            num1 = temp;
        }

        for (int i = num1; i <= num2; i++) {
            System.out.print(i);
            if (i != num2) {
                System.out.print(",");
            }
        }

    }
}

7-3. 문제와 풀이3

ScannerWhileEx1.java

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx1 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while (true) {
            System.out.print("이름을 입력하세요 ('종료'를 입력하면 종료): ");
            String name = input.nextLine();

            if (name.equals("종료")) {
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            System.out.print("나이를 입력하세요: ");
            int age = input.nextInt();
            input.nextLine(); // 숫자 입력 후 줄바꿈 처리

            System.out.println("입력한 이름: " + name + ", 나이: " + age);
        }
    }
}
  • input.nextLine()을 하는 이유는 input.nextInt()40 \n(엔터) 를 입력했을 때, \n을 빼고 숫자 40만 가져가기 때문
  • 남아 있는 \n을 다음 nextLine()에서 인식하고 빈 문자열을 넘기는 문제 발생

 

ScannerWhileEx2.java

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while (true) {
            System.out.print("상품의 가격을 입력하세요 ('-1' 입력하면 종료): ");
            int price = input.nextInt();

            if (price == -1) {
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            System.out.print("구매하는 수량을 입력하세요: ");
            int quantity = input.nextInt();
            input.nextLine(); // 숫자 입력 후 줄바꿈 처리

            int totalPrice = price*quantity;
            System.out.println("총 비용: " + totalPrice);
        }
    }
}

 

7-4. 문제와 풀이4

ScannerWhileEx3.java

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int count = 0;
        int sum = 0;
        int input = 0;

        System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요:");
        while (( input = scanner.nextInt() ) != -1) {
            count++;
            sum += input;
        }
        double average = (double) sum / count;
        System.out.println("입력한 숫자들의 합계:"+sum);
        System.out.println("입력한 숫자들의 평균:"+average);
    }
}

 

ScannerWhileEx4.java

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx4 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int totalCost = 0;

        while (true) {
            System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료");
            int option = input.nextInt();

            if (option == 1){
                input.nextLine(); // 이전에 입력된 개행문자 제거
                
                System.out.print("상품명을 입력하세요: ");
                String product = input.nextLine();
                System.out.print("상품의 가격을 입력하세요: ");
                int price = input.nextInt();
                System.out.print("구매 수량을 입력하세요: ");
                int quantity = input.nextInt();

                totalCost = price * quantity;
                System.out.println("상품명:" + product + " 가격:" + price + " 수량:" + quantity + " 합계:" + totalCost);
            } else if (option == 2) {
                System.out.println("총 비용: " + totalCost);
                totalCost = 0; // 결제 후 비용 초기화
            } else if (option == 3) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                System.out.println("올바른 옵션을 선택해주세요.");
            }
        }
    }
}