인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이가영님의 프로필 이미지

작성한 질문수

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

향상된 for 문 사용법 의문점

작성

·

69

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

 

배열의 입력과 출력 문제입니다. 스캐너로 배열을 입력받을 때 향상된 for문을 사용했더니 결과가 0,0,0,0,0이 나왔습니다. 주석처리된 일반 for 문으로 문제를 풀면 제대로 나옵니다. 두 가지가 같은 결과가 나올거라고 생각했는데 왜 다른 결과가 나온건지 알고싶습니다.

package array.ex;

import java.util.Scanner;

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

        int[] nums = new int[5];

        
        //왜 안되는거지
        for (int num : nums) {
            num = input.nextInt();
        }

//        for (int i = 0; i < 5; i++){
//            nums[i] = input.nextInt();
//        }

        for (int i = 0; i < 5; i++){
            System.out.print(nums[i]);
            if (i == 4){
                break;
            }
            System.out.print(", ");
        }

    }
}

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 이가영님.

향상된 for문을 사용할 때의 동작 원리와 문제점에 대해 설명드리겠습니다. 향상된 for문은 배열이나 컬렉션에 저장된 각각의 요소를 직접 변경하지 않고, 해당 요소의 값을 읽어오는 데 사용됩니다. 즉, 향상된 for문을 사용할 경우 각 요소의 값은 num 변수에 복사되며, num에 새로운 값을 할당해도 실제 배열의 해당 요소에는 적용되지 않습니다. 따라서 사용자가 입력한 값이 배열에 저장되지 않고 그대로 0, 0, 0, 0, 0이 출력된 것입니다.

해결 방법을 위해서는 일반 for문을 사용해서 배열의 특정 인덱스에 값을 명시적으로 할당하는 것이 필요합니다. nums[i] = input.nextInt();처럼 배열의 특정 인덱스를 잡고 값을 저장하면 의도한 대로 배열의 값이 변경됩니다.

관련해서 비슷한 내용의 질문이 있었던 게시물을 소개드립니다:
- ArrayEx2 질문 입니다

해당 게시물에서도 스캐너와 배열을 조작하는 방법과 관련한 질문이 있었으니 유용하실 수 있을 거예요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.