본문 바로가기

항해 99/Java

Java 기초 4 - 훈련

Scanner 학습

Scanner

System.out 을 통해서 출력을 했듯이, System.in 을 통해서 사용자의 입력을 받을 수 있다. 그런데 자바가 제공하는 System.in 을 통해서 사용자 입력을 받으려면 여러 과정을 거쳐야해서 복잡하고 어렵다.
자바는 이런 문제를 해결하기 위해 Scanner 라는 클래스를 제공한다. 이 클래스를 사용하면 사용자 입력을 매우 편리하게 받을 수 있다.

 

Scanner1

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 scanner = new Scanner(System.in);
    • 이 코드는 객체와 클래스를 배워야 정확히 이해할 수 있다. 지금은 Scanner의 기능을 사용하기 위해 new를 사용해서 Scanner를 만든다 정도로 이해하면 됨. Scanner는 System.in을 사용해서 사용자의 입력을 편리하게 받도록 도와준다.
    •  Scanner scanner 코드는 scanner 변수를 선언하는 것이다. scanner 변수를 통해서 scanner를 사용할 수 있다.
  • Scanner.nextLine()
    • 엔터(\n)을 입력할 때까지 문자를 가져온다.
  • scanner.nextInt()
    • 입력을 int 형으로 가져온다. 정수 입력에 사용한다.
  • scanner.nextDouble()
    • 입력을 double 형으로 가져온다. 실수 입력에 사용한다.

주의! - 다른 타입 입력 시 오류

타입이 다르면 오류가 발생한다.

 

Scanner2

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

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("더 큰 수는: " + num1);
        } else if (num1 < num2) {
            System.out.println("더 큰 수는: " + num2);
        } else {
            System.out.println("두 숫자는 같습니다.");
        }
    }
}

 

Scanner While1

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);
        }
    }
}
  • while문을 사용한 반복해서 동작하는 프로그램, exit라는 문자가 입력되면 while문을 빠져나오며 프로그램이 종료된다.

Scanner While2

package scanner;

import java.util.Scanner;

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

        System.out.println("첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료합니다.");

        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);
        }
    }
}
  • if문과 and 연산을 사용해서 입력받은 두 숫자가 모두 0일 경우 반복하는 프로그램이 종료된다.

Scanner While3

package scanner;

import java.util.Scanner;

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

        int sum = 0;

        while (true) {
            System.out.print("정수를 입력하세요 (0을 입력하면 종료) : ");
            int number = input.nextInt();

            if (number == 0) {
                break;
            }

            sum += number;
        }

        System.out.println("입력한 모든 정수의 합: " + sum);
    }
}
  • sum += number를 통해 사용자가 입력한 값을 누적해서 더한다.

 

문제 풀이

 

ex1) 이름과 나이를 입력하면 출력하는 프로그램

출력 형식 : 당신의 이름은 (이름)이고, 나이는 (나이)살 입니다.

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 + "살입니다.");
    }
}

 

 

ex2) 홀수 짝수

사용자로부터 하나의 정수를 입력받고, 이 정수가 홀수인지 짝수인지 판별하는 프로그램을 작성

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 number = scanner.nextInt();

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

 

 

ex3) 음식점 주문

  • 사용자로부터 음식의 이름( foodName ), 가격( foodPrice ), 그리고 수량( foodQuantity )을 입력받아, 주문
    한 음식의 총 가격을 계산하고 출력하는 프로그램을 작성하세요.
  • 음식의 총 가격을 계산하세요. 총 가격은 각 음식의 가격( foodPrice )과 수량( foodQuantity )을 곱한 값이
    며, 이를 totalPrice 라는 이름의 변수에 저장하세요.
  • 주문 정보와 총 가격을 출력하세요. 출력 형태는 "[음식 이름] [수량]개를 주문하셨습니다. 총 가격은 [총 가격]원
    입니다." 이어야 합니다
package scanner.ex;

import java.util.Scanner;

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

        System.out.print("음식의 이름을 입력하세요: ");
        String foodName = input.nextLine();

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

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

        int totalPrice = foodPrice * foodQuantity;

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

 

 

ex4) 구구단 출력

사용자로부터 하나의 정수 n을 입력받고, 입력받은 정수 n의 구구단을 출력하는 프로그램을 작성.

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);
        }
    }
}

 

 

ex5)  변수 값 교환

변수 a와 b의 값을 교환하는 코드 작성

package scanner.ex;

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

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

        System.out.println(" a = " + a);
        System.out.println(" b = " + b);
    }
}
  • a와 b를 한 번에 서로 교환하는 것은 불가능함 (a = b라고 하면 원래 a의 값 10은 20이 되기 때문에 b에 a의 값인 10을 줄 수 없음)
  • 임시 변수 temp를 설정하고 temp에 a의 값을 저장하고 a에 b의 값을 저장하고 b에 temp의 값을 저장하는 것으로 변수 a와 b의 값을 서로 교환할 수 있다.

 

ex6) 사이 숫자

사용자로부터 두 개의 정수를 입력받고, 이 두 정수 사이의 모든 정수를 출력하는 프로그램을 작성하세요.

  • 사용자에게 첫 번째 숫자를 입력받으세요. 변수의 이름은 num1 이어야 합니다.
  • 사용자에게 두 번째 숫자를 입력받으세요. 변수의 이름은 num2 이어야 합니다.
  • 만약 첫 번째 숫자 num1 이 두 번째 숫자 num2 보다 크다면, 두 숫자를 교환하세요.
    • 참고: 교환을 위해 임시 변수 사용을 고려하세요.
  • num1 부터 num2 까지의 각 숫자를 출력하세요.
  • 출력 결과에 유의하세요. 다음 예시와 같이 2,3,4,5 처럼 , 로 구분해서 출력해야 합니다.
package scanner.ex;

import java.util.Scanner;

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

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

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

        if (num1 > num2) {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }

        System.out.println("두 숫자 사이의 모든 정수: ");
        for (int i = num1; i <= num2; i++) {
            System.out.print(i);
            if (i != num2) {
                System.out.print(",");
            }
        }
    }
}

 

 

ex7) 이름과 나이 반복

  • 사용자로부터 이름과 나이를 반복해서 입력받고, 입력받은 이름과 나이를 출력하는 프로그램 작성, 사용자가 "종료"를 입력하면 프로그램이 종료됨
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);
        }
    }
}

 

 

ex8) 상품 가격 계산

  • 사용자로부터 상품의 가격( price )과 수량( quantity )을 입력받고, 총 비용을 출력하는 프로그램을 작성하세
    요.
  • 가격과 수량을 입력받은 후에는 이들의 곱을 출력하세요. 출력 형태는 "총 비용: [곱한 결과]"이어야 합니다.
  • -1을 입력하여 가격 입력을 종료합니다.
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();

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

 

 

ex9) 입력한 숫자의 합계와 평균

  • 사용자로부터 여러 개의 숫자를 입력 받고, 그 숫자들의 합계와 평균을 계산하는 프로그램을 작성하세요. 사용자
    는 숫자를 입력하고, 마지막에는 -1을 입력하여 숫자 입력을 종료한다고 가정합니다.
  • 모든 숫자의 입력이 끝난 후에는, 숫자들의 합계 `sum` 과 평균 `average` 를 출력하세요. 평균은 소수점 아래까지
    계산해야 합니다.
package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int sum = 0;
        int count = 0;
        int num = 0;

        System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요: ");
        while (true) {
            num = input.nextInt();

            if (num == -1) {
                break;
            }

            sum += num;
            count++;
        }
//        while ((num = input.nextInt()) != -1) {
//            sum += num;
//            count++;
//        }

        double average = (double) sum / count;

        System.out.println("입력한 숫자들의 합계: " + sum);
        System.out.println("입력한 숫자들의 평균: " + average);
    }
}
  • while문을 주석처리 부분처럼 간략화 할 수 있음

 

ex10) 상품 구매

  • 사용자로부터 상품 정보(상품명, 가격, 수량)를 입력받고, 이들의 총 가격을 출력하는 프로그램을 작성하세요. 사
    용자는 여러 상품을 추가하고 결제할 수 있으며, 프로그램을 언제든지 종료할 수 있습니다.
  • 사용자에게 다음 세 가지 옵션을 제공해야 합니다: 1: 상품 입력, 2: 결제, 3: 프로그램 종료. 옵션은 정수로 입력받
    으며, 옵션을 저장하는 변수의 이름은 `option` 이어야 합니다.
  • 상품 입력 옵션을 선택하면, 사용자에게 상품명과 가격, 수량을 입력받으세요.
  • 결제 옵션을 선택하면, 총 비용을 출력하고 총 비용을 `0` 으로 초기화하세요. (사용자가 총 비용을 확인하고, 결제
    를 완료했다고 가정합니다. 따라서 다음 사용자를 위해 총 비용을 다시 `0` 으로 초기화 해야합니다.)
  • 프로그램 종료 옵션을 선택하면, "프로그램을 종료합니다."라는 메시지를 출력하고 프로그램을 종료하세요.
  • 위의 세 가지 옵션 외에 다른 값을 입력하면, "올바른 옵션을 선택해주세요."라는 메시지를 출력하세요.
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();
            input.nextLine();

            if (option == 1) {
                System.out.print("상품명을 입력하세요: ");
                String name = input.nextLine();

                System.out.print("상품의 가격을 입력하세요: ");
                int price = input.nextInt();

                System.out.print("구매 수량을 입력하세요: ");
                int quantity = input.nextInt();
                input.nextLine();

                totalCost += price * quantity;

                System.out.println("상품명:" + name + " 가격:" + 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("올바른 옵션을 선택해 주세요.");
                continue;
            }
        }
    }
}
  • 위 코드는 switch문으로 작성 가능

 

정리

'항해 99 > Java' 카테고리의 다른 글

Java 기초 6 - 메서드  (1) 2024.01.23
Java 기초 5 - 배열  (0) 2024.01.22
Java 문법 기초 테스트-3  (1) 2024.01.22
Java 문법 기초 테스트-2  (0) 2024.01.20
Java 문법 기초 테스트-1  (0) 2024.01.20