Java 제어 흐름: 조건문과 반복문

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 제어 흐름 구조의 세계를 탐구합니다. 이는 프로그램이 결정을 내리고 작업을 반복할 수 있게 해주는 필수적인 도구입니다. 다음 세 가지 주요 개념을 다룰 것입니다.

  1. 의사 결정을 위한 If-else 문
  2. 알려진 횟수만큼 작업을 반복하기 위한 For 루프
  3. 반복해야 하는 횟수를 알 수 없을 때 작업을 반복하기 위한 While 루프

이 용어들이 익숙하지 않더라도 걱정하지 마세요. 각 용어를 자세히 설명해 드리겠습니다. 이 랩이 끝나면 결정을 내리고 작업을 반복할 수 있는 Java 프로그램을 작성할 수 있게 되어 코딩 여정에서 완전히 새로운 가능성을 열 수 있습니다!

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 92%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

If-Else 문 이해하기

날씨 조언을 제공하는 프로그램을 만든다고 상상해 보세요. 온도에 따라 다른 조언을 제공하고 싶습니다. 이럴 때 if-else 문이 유용합니다!

  1. WebIDE 에서 WeatherAdvisor.java 파일을 엽니다. 다음 코드를 볼 수 있습니다.

    public class WeatherAdvisor {
        public static void main(String[] args) {
            int temperature = 28; // 섭씨 온도
            System.out.println("The temperature is " + temperature + "°C.");
            // TODO: 날씨 조언을 제공하기 위해 여기에 if-else 문을 추가하세요.
        }
    }

    다음은 코드 분석입니다.

    1. public class WeatherAdvisor:

      • 이 줄은 WeatherAdvisor 라는 public 클래스를 선언합니다.
      • Java 에서 모든 프로그램은 최소 하나의 클래스를 가져야 하며, 클래스 이름은 파일 이름과 일치해야 합니다 (이 경우 WeatherAdvisor.java).
    2. public static void main(String[] args):

      • 이것은 모든 Java 프로그램의 시작점인 main 메서드입니다.
      • public: 이 메서드는 클래스 외부에서 액세스할 수 있습니다.
      • static: 이 메서드는 클래스의 특정 인스턴스가 아닌 클래스 자체에 속합니다.
      • void: 이 메서드는 값을 반환하지 않습니다.
      • main: 이것은 메서드의 이름입니다. Java 는 프로그램을 실행하기 위해 "main"이라는 메서드를 찾습니다.
      • (String[] args): 이 메서드는 명령줄 인수를 허용합니다 (이 예제에서는 사용하지 않지만).
    3. int temperature = 28;:

      • 이 줄은 temperature라는 정수 변수를 선언하고 값을 28 로 초기화합니다.
      • int는 Java 에서 정수의 데이터 유형입니다.
      • 주석 // 섭씨 온도는 이 값이 무엇을 나타내는지 설명합니다.
    4. System.out.println("The temperature is " + temperature + "°C.");:

      • 이 줄은 콘솔에 메시지를 출력합니다.
      • System.out.println()은 텍스트를 출력하고 새 줄로 이동하는 메서드입니다.
      • + 연산자는 문자열 연결에 사용되어 텍스트를 temperature 변수의 값과 결합합니다.
      • 마지막의 °C는 출력에 섭씨 기호를 추가합니다.

    이 기본 구조는 온도를 정의하고 이를 출력하는 프로그램을 설정합니다. 온도 값에 따라 날씨 조언을 제공하기 위해 나중에 추가한 if-else 문과 같은 더 복잡한 로직을 추가하기 위한 기반을 제공합니다.

  2. TODO 주석을 다음 코드로 바꿉니다.

    if (temperature > 30) {
        System.out.println("It's a hot day. Remember to stay hydrated!");
    } else if (temperature > 20) {
        System.out.println("It's a nice warm day. Enjoy the weather!");
    } else if (temperature > 10) {
        System.out.println("It's a bit cool. You might need a light jacket.");
    } else {
        System.out.println("It's cold. Wear warm clothes!");
    }
    If else code example

    분석해 보겠습니다.

    • if 문은 온도가 30°C 보다 높은지 확인합니다.
    • 그렇지 않으면 첫 번째 else if로 이동하여 20°C 보다 높은지 확인합니다.
    • 이것은 조건이 참이 될 때까지 또는 마지막의 else에 도달할 때까지 계속됩니다.
    • 이 블록 중 하나만 실행됩니다. 조건이 참이 되면 Java 는 나머지 모든 것을 건너뜁니다.
  3. 파일을 저장합니다. WebIDE 를 포함한 대부분의 IDE 에서 Ctrl+S (Mac 에서는 Cmd+S) 를 눌러 저장할 수 있습니다.

  4. 이제 프로그램을 컴파일해 보겠습니다. WebIDE 하단의 터미널에 다음을 입력합니다.

    javac ~/project/WeatherAdvisor.java

    이 명령은 Java 에 코드를 컴파일하도록 지시합니다. 출력이 없으면 좋습니다! 오류가 없다는 의미입니다.

  5. 프로그램을 실행하려면 다음을 입력합니다.

    java -cp ~/project WeatherAdvisor

    -cp ~/project 부분은 Java 에 컴파일된 코드를 찾을 위치를 알려줍니다.

  6. 다음 출력을 볼 수 있습니다.

    The temperature is 28°C.
    It's a nice warm day. Enjoy the weather!

    28°C 는 20°C 보다 높지만 30°C 보다 높지 않으므로 이것은 코드와 일치합니다.

  7. 실험해 봅시다! 코드에서 temperature 값을 35 로 변경한 다음 저장, 컴파일 및 다시 실행합니다. 다음을 볼 수 있습니다.

    The temperature is 35°C.
    It's a hot day. Remember to stay hydrated!
  8. 온도를 15 와 5 로 변경하고, 매번 컴파일하고 실행해 보세요. 출력이 어떻게 변경되는지 확인하세요!

축하합니다! 방금 결정을 내리는 프로그램을 작성했습니다. 이것은 프로그래밍의 기본 개념이며 항상 사용하게 될 것입니다.

For 루프 사용하기

이제 for 루프에 대해 알아보겠습니다. 이는 곱셈표를 만드는 것처럼 특정 횟수만큼 무언가를 반복하려는 경우에 유용합니다!

  1. WebIDE 에서 MultiplicationTable.java 파일을 엽니다. 다음을 볼 수 있습니다.

    public class MultiplicationTable {
        public static void main(String[] args) {
            int number = 5;
            System.out.println("Multiplication table for " + number + ":");
    
            // TODO: 곱셈표를 출력하기 위해 여기에 for 루프를 추가하세요.
        }
    }
  2. TODO 주석을 이 for 루프로 바꿉니다.

    for (int i = 1; i <= 10; i++) {
        int result = number * i;
        System.out.println(number + " x " + i + " = " + result);
    }

    분석해 보겠습니다.

    • for (int i = 1; i <= 10; i++)는 for 루프 문입니다.
      • int i = 1은 변수 i를 생성하고 1 로 설정합니다. 이것은 처음에 한 번 발생합니다.
      • i <= 10은 조건입니다. 이 조건이 참인 동안 루프가 계속 실행됩니다.
      • i++는 루프가 완료될 때마다 i를 1 씩 증가시킵니다.
    • 루프 내부에서 numberi를 곱하고 결과를 출력합니다.
    • 이것은 10 번 반복되며, i는 1 에서 10 까지 증가합니다.
  3. 파일을 저장합니다.

  4. 프로그램을 컴파일합니다.

    javac ~/project/MultiplicationTable.java
  5. 프로그램을 실행합니다.

    java -cp ~/project MultiplicationTable
  6. 5 의 곱셈표를 볼 수 있습니다.

    Multiplication table for 5:
    5 x 1 = 5
    5 x 2 = 10
    5 x 3 = 15
    5 x 4 = 20
    5 x 5 = 25
    5 x 6 = 30
    5 x 7 = 35
    5 x 8 = 40
    5 x 9 = 45
    5 x 10 = 50

    1 에서 10 까지의 표가 어떻게 출력되었는지 확인하세요? 이것이 바로 for 루프의 작동 방식입니다!

  7. 실험해 봅시다! number 변수를 7 로 변경한 다음 저장, 컴파일 및 다시 실행합니다. 7 의 곱셈표를 볼 수 있습니다.

  8. 더 많은 것을 보고 싶으신가요? for 루프에서 i <= 10i <= 15로 변경해 보세요. 이렇게 하면 표가 10 대신 15 까지 표시됩니다.

for 루프는 정확히 몇 번 반복하고 싶은지 알 때 매우 유용합니다. 프로그래밍 여정에서 많이 사용하게 될 것입니다!

While 루프 탐구

While 루프는 미리 몇 번 반복해야 하는지 모르는 상황에 완벽합니다. 숫자 맞추기 게임을 만들기 위해 사용해 봅시다!

  1. WebIDE 에서 GuessTheNumber.java 파일을 엽니다. 다음을 볼 수 있습니다.

    import java.util.Random;
    import java.util.Scanner;
    
    public class GuessTheNumber {
        public static void main(String[] args) {
            Random random = new Random();
            int numberToGuess = random.nextInt(100) + 1; // 1 과 100 사이의 임의의 숫자
            Scanner scanner = new Scanner(System.in);
            int guess;
            int attempts = 0;
    
            System.out.println("I'm thinking of a number between 1 and 100. Can you guess it?");
    
            // TODO: 숫자 맞추기 게임을 구현하기 위해 여기에 while 루프를 추가하세요.
    
            scanner.close();
        }
    }

    이 코드는 플레이어가 추측할 임의의 숫자와 플레이어의 입력을 읽는 스캐너를 설정합니다.

  2. TODO 주석을 이 while 루프로 바꿉니다.

    while (true) {
        System.out.print("Enter your guess: ");
        guess = scanner.nextInt();
        attempts++;
    
        if (guess < numberToGuess) {
            System.out.println("Too low! Try again.");
        } else if (guess > numberToGuess) {
            System.out.println("Too high! Try again.");
        } else {
            System.out.println("Congratulations! You guessed the number in " + attempts + " attempts.");
            break;
        }
    }

    분석해 보겠습니다.

    • while (true)는 무한 루프를 생성합니다. 중지하라고 지시할 때까지 계속 실행됩니다.
    • 루프 내부에서 추측을 요청하고 시도 횟수를 늘립니다.
    • if-else 문을 사용하여 추측이 너무 낮은지, 너무 높은지, 또는 정확한지 확인합니다.
    • 추측이 정확하면 축하 메시지를 출력하고 break를 사용하여 루프를 종료합니다.
  3. 파일을 저장합니다.

  4. 프로그램을 컴파일합니다.

    javac ~/project/GuessTheNumber.java
  5. 프로그램을 실행합니다.

    java -cp ~/project GuessTheNumber
    GuessTheNumber program output
  6. 이제 게임을 플레이하세요! 정답을 맞힐 때까지 숫자를 계속 입력하세요. 프로그램은 너무 높거나 낮은지 알려줍니다.

이 while 루프는 정답을 맞힐 때까지 계속 실행됩니다. 몇 번의 시도가 필요할지 모르므로 여기서는 while 루프가 완벽합니다.

제어 구조 결합

마지막 과제에서는 if-else 문, for 루프, while 루프를 결합하여 소수 찾기를 만들 것입니다!

  1. WebIDE 에서 PrimeNumberFinder.java 파일을 엽니다. 다음을 볼 수 있습니다.

    import java.util.Scanner;
    
    public class PrimeNumberFinder {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int count = 0;
            int number = 2;
    
            System.out.print("How many prime numbers do you want to find? ");
            int maxPrimes = scanner.nextInt();
    
            System.out.println("First " + maxPrimes + " prime numbers:");
    
            // TODO: 여기에 소수 찾기 로직을 구현하세요.
    
            scanner.close();
        }
    }
  2. TODO 주석을 이 코드로 바꿉니다.

    while (count < maxPrimes) {
        boolean isPrime = true;
    
        for (int i = 2; i <= Math.sqrt(number); i++) {
            if (number % i == 0) {
                isPrime = false;
                break;
            }
        }
    
        if (isPrime) {
            System.out.print(number + " ");
            count++;
        }
    
        number++;
    }

    복잡해 보이지만 분석해 보겠습니다.

    • 원하는 수의 소수를 얻을 때까지 while 루프를 사용하여 소수를 계속 찾습니다.
    • 각 숫자에 대해 for 루프를 사용하여 소수인지 확인합니다.
    • Math.sqrt(number)를 최적화로 사용합니다. 숫자의 제곱근까지만 확인할 필요가 있습니다.
    • 제수를 찾으면 숫자가 소수가 아니라는 것을 알 수 있으므로 isPrime을 false 로 설정하고 내부 루프를 중단합니다.
    • for 루프 후에도 isPrime이 여전히 true 이면 숫자를 출력하고 카운트를 증가시킵니다.
    • 항상 마지막에 number를 증가시켜 다음 숫자로 이동합니다.
  3. 파일을 저장합니다.

  4. 프로그램을 컴파일합니다.

    javac ~/project/PrimeNumberFinder.java
  5. 프로그램을 실행합니다.

    java -cp ~/project PrimeNumberFinder
  6. 메시지가 표시되면 숫자 (예: 10) 를 입력하여 해당 수만큼의 소수를 찾습니다. 다음과 같은 출력을 볼 수 있습니다.

    How many prime numbers do you want to find? 10
    First 10 prime numbers:
    2 3 5 7 11 13 17 19 23 29

이 프로그램은 다양한 제어 구조를 결합할 때 Java 가 얼마나 강력한지 보여줍니다. 이제 결정을 내리고, 작업을 반복하며, 복잡한 문제를 해결할 수 있는 프로그램을 만들 수 있습니다!

요약

훌륭합니다! 이 랩에서 Java 프로그래밍의 가장 중요한 개념들을 마스터했습니다.

  1. If-else 문: 날씨 조언 프로그램에서 결정을 내리는 데 사용했습니다.
  2. For 루프: 곱셈표를 만들고, 특정 횟수만큼 작업을 반복하는 데 사용했습니다.
  3. While 루프: 추측 게임에서 조건을 충족할 때까지 작업을 반복하는 데 사용했습니다.
  4. 제어 구조 결합: 소수 찾기를 만들기 위해 모든 것을 함께 사용했습니다.

이러한 제어 흐름 구조는 복잡한 프로그램의 구성 요소입니다. 이를 통해 결정을 내리고, 작업을 반복하며, 복잡한 문제를 해결하는 프로그램을 만들 수 있습니다.

기억하세요, 연습이 완벽을 만듭니다. 이러한 프로그램을 수정하거나 이러한 개념을 사용하여 새로운 프로그램을 만들어 보세요. 요일별로 다른 조언을 제공하는 프로그램을 만들 수 있습니까? 또는 100 까지의 모든 숫자에 대한 구구단을 출력하는 프로그램을 만들 수 있습니까? 가능성은 무궁무진합니다!

계속 코딩하고, 계속 배우고, 무엇보다 즐겁게 하세요! 당신은 Java 전문가가 되는 길을 잘 가고 있습니다.