본문 바로가기

WIL(What I Learned)

자바정석 Chap.6 연습문제 답안 확인 모음

6-4)

어떤 int값을 특정 int값으로 나눠서 소수점 아래의 숫자가 포함된 결과를 얻으려면 float 타입의 리터럴로 나눠야 한다. 리터럴이란 '상수(constant; 값을 한번만 저장할 수 있는 공간)'의 다른 이름이다.

  • 어떤 float 값을 소수점 아래 첫째자리까지 반올림할 수 있는 기법으로는 그 float 값에다 10을 곱하고 0.5를 더한 뒤 int로 형변환을 하고 10f로 나눠주는 것이다. 이것을 소수점 아래 n번째자리까지 반올림할 때 응용할 수 있을 것이다.
    • 이때 형변환(Casting)을 하기 위해서는 다음과 같이 하면된다.
(타입)피연산자

자바정석 연습문제 답안 Pdf


6-5)

메서드 반환 타입이 String이어도 String 타입이 아닌 변수나 메서드를 반환문에 포함시켜도 됨을 확인했다.

public String info() { return name
+","+ban
+","+no
+","+kor
+","+eng
+","+math
+","+getTotal()
+","+getAverage()
;
}

상기 코드에서 name을 제외한 모든 변수는 int형이고, getTotal()은 int형을 반환하고 getAverage()는 float형을 반환하지만 main메서드에서 info를 호출하여 출력하면 각 변수에 저장된 값이나 메서드 반환값이 그대로 출력된다.


6-6)

  • i의 j제곱
Math.pow(i,j)
  • i의 제곱근
Math.sqrt(i)

6-8)

변수의 종류를 알려면 변수가 선언된 위치를 따지며 된다. 클래스 블럭 {} 안에 선언된 변수는 인스턴스 변수고, static이 붙은 것은 static 변수(클래스 변수)이다. 나머지는 다 지역변수.

객체참조변수와 main 메서드 선언부의 args[]에서 args 또한 지역변수(local variable; lv)로 인식하지 못했다.


6-9)

static 변수에 대한 작업을 하는 메서드에도 static이 붙여져야 한다.


6-10)

1. 생성자는 객체를 생성하는 과정에서 객체 초기화를 목적으로 사용되는 것이고, 객체를 생성하는 것은 new연산자이다.

2. 클래스에는 생성자가 반드시 하나 이상 있어야 한다.


6-11)

this는 지역변수와 인스턴스변수를 구별할 때 사용한다.


6-12)

오버로딩 성립의 요건

1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.

6-16)

  • 지역변수는 자신이 선언된 블럭이나 메서드가 종료되면 소멸되므로 메모리 부담이 적다.
  • 힙 영역은 인스턴스(인스턴스변수)가 생성되는 영역이며, 지역변수는 호출스택(call stack)에 생성된다.

6-17)

Static 변수의 초기화에 인스턴스변수를 사용할 수 없다. 마찬가지로, static메서드에서는 인스턴스변수와 인스턴스메서드를 사용할 수 없다.

다음은 에러문이다.

Non-static field 'iv' cannot be referenced from a static context
Non-static method 'instanceMethod1()' cannot be referenced from a static context

6-20)

다음은 이 문제 풀이에 활용된 난수 생성 메서드이다.

static int[] shuffle(int[] arr) {
        if (arr==null || arr.length == 0)
            return arr;

        for(int i = 0; i<arr.length; i++) {
            int j = (int) (Math.random()*arr.length);

            // arr[i]와 arr[j]의 값을 서로 바꾼다.
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
        return arr;
    }

6-22)

매개변수 값을 넘겨받을 때 어떤 값이 올지 알 수 없으므로 유효성 검사를 해주어야 한다. 다음은 매개변수가 String형일 때 유효성 검사 코드이다.

 if (str == null || str.equals("")) {
            return false;
        }

다음은 넘겨받은 변수에 저장된 값이 int형인지 아닌지 판별하기 위한 코드이다.

for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);

            if (ch < '0' || ch > '9') {
                return false;
            }

        }

For문과 .charAt() 메서드를 통해 변수에 저장된 값의 각 자리를 돌면서 char형 변수에 저장하고 if문 (조건문:

(ch < '0' || ch > '9')

)을 통해 char형 변수에 저장된 값이 숫자인지 아닌지 판별한다.

이후  isNumber()메서드에서 if문과 for문 안의 if문의 false 반환 조건문에 해당하지 않는 경우에 대해 true를 반환하게 한다.


 

'WIL(What I Learned)' 카테고리의 다른 글

21.11.26 金  (0) 2021.11.26
21.11.22 月  (0) 2021.11.22
21.11.5 金  (0) 2021.11.05
21.11.1 月  (0) 2021.11.02
코드업 100제 6096번 바둑알 뒤집기 문제  (0) 2021.10.31