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

비전공자개발자되기님의 프로필 이미지
비전공자개발자되기

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

Array 관한 예문

작성

·

385

·

수정됨

0

안녕하세요, 선생님. 어제 배열 파트를 다시 복습하면서 생긴 문제가 있습니다.

선생님께서는 for반복문에 for -each문을 이용하면서 출력되도록 하셨는데

저는 조금 더 간결하게 하고자 for-each문 없이 주석처리한대로 해보니

사이즈[I@75b84c92(재고있음) 이렇게, 사이즈에 해당하는 값은 안나오더라구요.

혹시 이렇게 접근하면 안되는 이유가 있을까요?

 

두 번째로는 메소드에 관한 문제입니다.

아래 코드처럼 메소드 값을 메인영역 밖에서 호출 시 에러나는 이유가 무엇인가요?

잘은 모르지만 혹시나 지역변수 이런 것과 상관이 있는건가요?

 

 

      //Quiz. 배열을 활용하여 쇼핑몰에서 구매 가능한 신발 사이즈 옵션을 출력하는 프로그램을 작성하시오
        //조건 : 신발 사이즈는 250부터 295까지 5단위로 증가
        //조건 : 신발 사이즈 수는 총 10가지
        //실행결과 : 사이즈 250 (재고있음) / 사이즈 260 (재고있음),,, size에 해당하는 값을 배열로 만들기
//        int size = 250;
//        int size = 255;
//        int size = 260;
        int[] size = new int[10];
        for (int i = 0; i < size.length; i++) {
            size[i] = 250 + (5 * i);
//            System.out.println("사이즈"+size+"(재고있음)"); //왜 안되는지?????????

        }
        for (int size2 : size  ) {
            System.out.println("사이즈"+size2+"(재고있음)");
        }
-------------------------------------------------------------------------------
public class Test1 {
    //호텔 전화번호
    public static String getPhoneNumber(){
        return "02-123-4567";
    }
    //호텔 위치
    public static String getAddress(){
        return "서울시 어딘가";
    }
    //호텔 엑티비티
    public static String getActivities(){
        return "수영장, 당구장, 볼링장";
    }

    public static void main(String[] args) { //왜 메인영역 밖에서 호출하면 에러나지?????
        //메인 밑에서 매소드 호출
        System.out.println("호텔위치 : "+getAddress());
        System.out.println("호텔 전화번호 :"+getPhoneNumber());
        System.out.println("호텔 엑티비티 : "+getActivities());

    }

답변 1

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

먼저 첫 번째 질문에 대해 답변 드립니다.
배열의 이름인 size 를 직접 출력하게 되면 size 배열 내의 어떤 정수 값이 아닌, 메모리에 size 라는 배열이 존재하는 위치 정보(참조)가 표시됩니다.

다음과 같이 코드를 작성하고 실행을 해볼게요.

int[] size1 = new int[10];
double[] size2 = new double[10];
float[] size3 = new float[10];

System.out.println(size1);
System.out.println(size2);
System.out.println(size3);

그러면 이러한 형태의 출력 결과를 얻을 수 있습니다.

[I@75b84c92
[D@6bc7c054
[F@232204a1

각 문장의 앞에 쓰여진 [I, [D, [F 는 각각 Integer 배열, Double 배열, Float 배열을 의미하구요. 뒤에 쓰여진 75b84c92, 6bc7c054, 232204a1 값들은 메모리 주소가 됩니다.

foreach 에서 사용하신 size2 라는 값은 size 배열의 어떤 요소의 값, 즉 정수이기 때문에 원하는 결과를 얻을 수 있게 된 것입니다.

for (int size2 : size  ) {
    System.out.println("사이즈"+size2+"(재고있음)");
}

두 번째 질문은 코드를 잘 적어주셨는데요.
맨 아랫줄에 } 만 추가해주시면 될 것 같은데, 질문에서 의도하신 코드는 이런 형태였을까요?

public static void main(String[] args) {

}

System.out.println("호텔위치 : "+getAddress());
System.out.println("호텔 전화번호 :"+getPhoneNumber());
System.out.println("호텔 엑티비티 : "+getActivities());

만약 그렇다고 하시면 자바에서는 명령줄이 main 영역 또는 어느 메소드 내에서만 작성 및 실행될 수 있어서 그런 것입니다. 자바의 클래스는 크게 인스턴스 변수와 메소드로 이루어지며, 인스턴스 변수는 어떤 값을 저장하기 위해 사용되며 메소드는 어떤 명령들이 모인 영역입니다. 그래서 main 영역 밖에 코드를 적게 되면 오류가 발생하게 됩니다 😊

감사합니다.

비전공자개발자되기님의 프로필 이미지
비전공자개발자되기

작성한 질문수

질문하기