파라미터로 원시값과 참조값을 전해줄때의 차이

dawn·2021년 4월 9일
0

자바

목록 보기
6/9

자료구조와 함께 배우는 알고리즘 입문 자바편 69p 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CardConvRev {
    static int cardConvRev(int x, int r, char[] d) {
        int digits = 0;
        String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXZY";

        //몫이 0보다 클때동안
        do {
            d[digits++] = dchar.charAt(x % r);
            x /= r;
        } while (x != 0);
        return digits;
    }


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int no; //변환하는 정수
        int cd; //기수
        int dno; //변환 후의 자릿수
        int retry;
        char[] cno = new char[32]; //변환 후 각 자리의 숫자를 넣어두는 문자의 배열

        System.out.println("10진수를 기수 변환합니다.");
        do {
            do {
                System.out.print("변환하는 음이 아닌 정수");
                no = Integer.parseInt(br.readLine());
            } while (no < 0);

            do {
                System.out.println("어떤 진수로 변환할까요? (2~36) : ");
                cd = Integer.parseInt(br.readLine());
            } while (cd < 2 || cd > 36);

            dno = cardConvRev(no, cd, cno);

            System.out.print(cd + "진수로는 ");
            for (int i = dno - 1; i >= 0; i--)
                System.out.print(cno[i]);
            System.out.println("입니다");

            System.out.print("한번더? 1.예 0.아니오");
            retry = Integer.parseInt(br.readLine());

        } while (retry == 1);
    }
}

cardConvRev메소드에서 return 값으로 digits 만 던져주고 배열은 안 던져줘서 "엥? main에서 왜 똑같은걸 쓰고있지??" 했는데 생각해보니 배열은 참조값을 전해주니까 공유되기 때문에 return으로 배열은 안전해줘도 되는거였다... 왜 바로 생각을 못햇지..?

profile
안녕하세요

0개의 댓글