오류, 기능, 문제해결(JAVA)

두 개의 정수를 입력 받으면, 두 정수 사이의 값을 출력(scanner 연습)

seungmin576 2024. 12. 27. 10:54

김영한님 자바 입문 영상 참고

 

package scannerex;

import java.util.Scanner;

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

        while (true) {
            System.out.println("두 개의 숫자를 입력해 주세요.(두 수가 모두 0일 경우 종료합니다) : ");
            int num1 = sc.nextInt();
            int num2 = sc.nextInt();

            if (num1 == 0 && num2 == 0) //무한반복을 멈출 명령어
                break;

            int[] list;

            if (num1 > num2) {  //작은 수가 num1로 가게 하는 정렬
                int temp = num1;
                num1 = num2;
                num2 = temp;
            }

            list = new int[num2 - num1 - 1]; //두수 num1, num2를 제외한 사이값 만큼만 배열의 길이가 되어야 한다.

            System.out.print(num1 + ", ");
            for (int i = 0; i < num2 - num1 - 1; i++) {
                list[i] = num1 + i + 1;
                System.out.print(list[i] + ", ");
            }
            System.out.println(num2);
        }
    }
}

이 문제를 처음 봤을 때는 처음 입력 받은 num1 과 num2 사이를 반복문과 배열로 출력하여 풀겠다고 생각하여 이 코드를 작성하게 되었다.

일단 if(num1 > num2)의 문장을 이용해 무조건 입력 받은 두 수 중 작은 숫자가 num1로 가게 정렬하였다.

그리고 배열의 길이는 입력 받는 정수 num1과 num2의 사이여야하니 큰수(num2) 에서 작은 수(num1)을 빼고 1을 빼면 num1과 num2 사이의 길이가 나온다.


  • (num2 - num1 - 1) 가 배열의 길이여야 하는 예시

num1 = 1

num2 = 5

일때 입력 받은 두 정수 사이의 값을 출력해야하니 1, 2, 3, 4, 5 가 되어야 하는데

입력 받은 두 정수를 제외하면 반복문 안 배열이 2, 3, 4 를 출력해야하는 것이다.

그럼 배열의 길이가 3이 되어야하는 것이다.

(num2 -num1 -1)  =  5 -1 -1 = 3


  • 여기서 부터 답
package scannerex;

import java.util.Scanner;

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

        System.out.println("첫 번째 수 입력 :");
        int num1 = sc.nextInt();

        System.out.println("두 번쨰 수 입력 :");
        int num2 = sc.nextInt();

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

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

배열이고 뭐고 for문 안에 num1과 num2를 넣으면 끝이었다.

초창기 i값을 num1 대입해 첫 시작이 num1 이 출력되고 하고 num2가 되기 전까지 증가하다가 num2 값이 되면 종료인 간단한 for문이다.

나는 너무 쉬운 문제를 복잡하게 푼거같다.

그래도 답 안보고 푼게 어디냐 라는 마음을 위안으로 삼아야겠다.