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

낯선개발자님의 프로필 이미지
낯선개발자

작성한 질문수

김영한의 실전 자바 - 기본편

배열 도입 - 리펙토링

[배열 도입 - 리펙토링] 향상된 for문질문

해결된 질문

작성

·

128

0

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

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

안녕하세요. 🙂

ClassStart5 클래스에서 향샹된 for문으로 만 사용하려고 하는데 Students s와 같은 변수를 담아둔다고 헀을 때 아래 코드처럼 해야 실행이되더라구요,

 

package class1;

public class ClassStart5 {
    private static int i;

    public static void main(String[] args) {
        Student student1 = new Student(); // 학생을 담아둘 수 있는 변수를 선언
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;

        Student[] students = {student1, student2};
            for (Student student : students) {
                Student s= students[i];
                System.out.println("이름: " + s.name+ " 나이: " + s.age + " 성적:" + s.grade);

            }
        }

    }

다만 자꾸 컴파일 에러가 나서 확인해보니

위의 private static int i; 코드 때문인거 같은데 별도 선언을 해줘야하는 이유를 정확히 알수 있을까요?

 

s 변수에 담아두지 않고 아래처럼 해도 int i를 선언해야 하는 거 같습니다.

코딩자체가 입문이라 장황하게 문의드린 점 양해부탁드리며 답변 기다리겠습니다. 감사합니다!

Student[] students = {student1, student2};
    for (Student student : students) {
        System.out.println("이름: " + students[i].name+ " 나이: " + students[i].age + " 성적:" + students[i].grade);

답변 1

0

안녕하세요. 낯선개발자님, 공식 서포터즈 y2gcoder입니다.

먼저 향상된 for 문을 사용해서 ClassStart5의 코드를 고쳐보면 다음과 같습니다!

public class ClassStart5 {

    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;

        Student[] students = {student1, student2};
        for (Student student : students) {
            System.out.println("이름:" + student.name + " 나이:" + student.age + " 성적:" + student.grade);
        }
    }
}

 

여기서 student를 다른 변수로 빼진 않아도 좋습니다 🙂 왜냐하면 향상된 for문을 사용하면서 이미 student라는 다른 변수로 선언했기 때문입니다.

제가 낯선개발자님의 의도를 잘 이해했는지 모르겠습니다!

students[i]로 하시려는 이유에 대해 조금 더 자세하게 설명해주시겠습니까? 적어주신대로만 하면 students[i]는 위의 students 배열을 가리키게 되는데, i값을 증가시켜주는 등의 동작을 하지 않으면 똑같은 값만 반복적으로 출력할 것 같기 때문입니다!

 

감사합니다.

안녕하세요. y2gcoder님 상세한 답변 감사합니다. Student[] students 자체에 i가 포함되는거 같은데 제가 향상된 for문을 잘 못 이해했던 거 같습니다 ㅎ,,

이미 향상된 for문을 통해서 student라는 변수를 선언한 점 이해했습니다. 감사합니다 🙂

낯선개발자님의 프로필 이미지
낯선개발자

작성한 질문수

질문하기