6-4)
어떤 int값을 특정 int값으로 나눠서 소수점 아래의 숫자가 포함된 결과를 얻으려면 float 타입의 리터럴로 나눠야 한다. 리터럴이란 '상수(constant; 값을 한번만 저장할 수 있는 공간)'의 다른 이름이다.
- 어떤 float 값을 소수점 아래 첫째자리까지 반올림할 수 있는 기법으로는 그 float 값에다 10을 곱하고 0.5를 더한 뒤 int로 형변환을 하고 10f로 나눠주는 것이다. 이것을 소수점 아래 n번째자리까지 반올림할 때 응용할 수 있을 것이다.
- 이때 형변환(Casting)을 하기 위해서는 다음과 같이 하면된다.
(타입)피연산자
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 |