3-1) 다음 연산의 결과를 적으시오.
package JAVA1218;
public class ex03_01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 2;
int y = 5;
char c = 'A'; // 아스키 코드 : 65
System.out.println(1+x << 33);
System.out.println(y >= 5 || x < 0 && x > 2);
System.out.println(y += 10 - x++);
System.out.println(x += 2);
System.out.println(!('A' <= c && c <= 'Z'));
System.out.println('C'-c);
System.out.println('5'-'0');
System.out.println(c+1);
System.out.println(++c);
System.out.println(c++);
System.out.println(c);
}
}
1) 6
→ 덧셈이 쉬프드연산자보다 우선순위가 높아 3<<33이 되고, int는 32bit이므로 1(33-32)번만 쉬프트 합니다.
→ 3은 2진수로 11(2)이고 1번 왼쪽으로 쉬프트되면 110(2)이므로 6이 됩니다.
2) true
3) 13
→ y = y + 10 - (x +1) 이지만 ++가 x뒤에 있으므로 출력이 된 후 y값에 저장합니다.
따라서 이 계산식에서는 포함되지 않습니다.
4) 5
→ x는 이전 계산식에서 1증가했기 때문에 3이고 이젠 5가 저장됩니다.
5) false
→ 값은 true지만 !로 인해 반대 결과가 출력됩니다.
6) 2
→ 67 - 65 = 2 (아스키 코드)
7) 5
→ 53 - 48 = 5 (아스키 코드지만 5개 차이나므로 5입니다.)
8) 66
→ 숫자 덧셈이 있어 숫자로 출력됩니다.
9) B
→ 1증가한 후 출력합니다. c에는 B가 저장됩니다.
10) B
→ 출력 후 1증가합니다. c에는 C가 저장됩니다.
11) C
3-2) 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다. 만일 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면, 13개의 바구니가 필요할 것이다. (1)에 알맞은 코드를 넣으시오.
package JAVA1218;
public class ex03_02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int numOfApples = 123; // 사과의 개수
int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과 개수)
int numOfBucket = ( /* (1) */); // 모든 사과를 담는데 필요한 바구니의 수
System.out.println("필요한 바구니의 수 : " + numOfBucket);
}
}
// 출력
// 필요한 바구니의 수 : 13
(1) (int)Math.ceil((float)numOfApples / sizeOfBucket)
3-3) 아래는 변수 num의 값에 따라 '양수', '음수', '0'을 출력하는 코드이다. 삼항 연산자를 이용해서 (1)에 알맞은 코드를 넣으시오. [Hint. 삼항 연산자를 두 번 사용하라.]
package JAVA1218;
public class ex03_03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = 10;
System.out.println( /* (1) */ );
}
}
// 출력
// 양수
(1) num > 0 ? "양수" : num < 0 ? "음수" : 0
3-4) 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다. 만일 변수 num의 값이 '456'이라면 '400'이 되고, '111'이라면 '100'이 된다. (1)에 알맞은 코드를 넣으시오.
package JAVA1218;
public class ex03_04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = 456;
System.out.println( /* (1) */ );
}
}
// 출력
// 400
(1) num/100 > 0 ? num/100 * 100 : 0
3-5) 아래는 변수 num의 값 중에서 일의 자리를 1로 바꾸는 코드이다. 만일 변수 num의 값이 333이라면 331이 되고, 777이라면 771이 된다. (1)에 알맞은 코드를 넣으시오.
package JAVA1218;
public class ex03_05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = 333;
System.out.println( /* (1) */ );
}
}
// 출력
// 331
(1) num / 10 > 0 ? num/10*10+1 : 1
3-6) 아래는 변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다. 예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변수 num의 값이 24라면 6을 결과로 얻어야 한다. (1)에 알맞은 코드를 넣으시오. (Hint. 나머지 연산자를 사용하라.)
package JAVA1218;
public class ex03_06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = 24;
System.out.println( /* (1) */ );
}
}
// 출력
// 6
(1) num >= 0 ? (num/10+1)*10-num : false
▷ 간단하게 표현하면 10 - num % 10으로 표현할 수 있습니다!
3-7) 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. 변환공식이 'C = 5/9 * (F-32)'라고 할 때, (1)에 알맞은 코드를 넣으시오. 단, 변환 결과값은 소수점 셋째자리에서 반올림해야한다. (Math.round()를 사용하지 않고 처리할 것)
package JAVA1218;
public class ex03_07 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int fahrenheit = 100;
float celcius = /* (1) */;
System.out.println("Fahrenheit : " + fahrenheit);
System.out.println("Celcius : " + celcius);
}
}
// 출력
// Fahrenheit:100
// Celcius:37.78
(1) (float)Math.round((float)5/9*(fahrenheit - 32)*100)/100
▷ 다른 코드 예시 : (int)((5/9f*(fahrenheit-32))*100 + 0.5) / 100f
1. 값에 100을 곱합니다.
→ 37.77778 * 100
2. 0.5를 더합니다.
3. int타입으로 변환해 소숫점을 버립니다.
4. 이후 100f로 나눕니다.(100, 100.0은 각각 int, double이므로 100f를 사용해 결과를 도출합니다.)
3-8) 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻도록 하시오.
package JAVA1218;
public class ex03_08 {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 10;
byte b = 20;
byte c = a + b;
char ch = 'A';
ch = ch + 2 ;
float f = 3 / 2;
long l = 3000 * 3000 * 3000;
float f2 = 0.1f;
double d = 0.1;
boolean result = d==f2;
System.out.println("c="+c);
System.out.println("ch="+ch);
System.out.println("f="+f);
System.out.println("l="+l);
System.out.println("result="+result);
}
}
// 출력
// c=30
// ch=C
// f=1.5
// l=27000000000
// result=true
1. byte c = a+b → byte를 int로 변경 또는 (byte)(a+b)로 변경합니다.
2. ch = ch + 2 → (char)((int)ch + 2) 또는 (char)(ch+2)로 변경합니다.
3. float f = 3 / 2 → (float)3/2 또는 3/2f로 변경합니다.
4. long l = 3000 * 3000 * 3000 → 3000뒤에 L을 붙입니다.
5. boolean result = d==f2 → d 앞에 (float)을 붙입니다.
3-9) 다음은 문자형 변수 ch가 영문자(대문자 또는 소문자)이거나 숫자일 때만 변수b의 값이 true가 되도록 하는 코드이다. (1)에 알맞은 코드를 넣으시오.
package JAVA1218;
public class ex03_09 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char ch = 'p';
boolean b = ( /* (1) */ );
System.out.println(b);
}
}
(1) ((ch>= 65 && ch<=90) || (ch>=97 && ch<=122) || (ch >= 48 && ch <= 57)) ? true : false
→ ((ch>= 'A' && ch<='Z') || (ch>='a' && ch<='z') || (ch >= '0' && ch <= '9')) ? true : false
3-10) 다음은 대문자를 소문자로 변경하는 코드인데, 문자 ch에 저장된 문자가 대문자인 경우에만 소문자로 변경한다. 문자코드는 소문자가 대문자보다 32만큼 더 크다. 예를 들어 'A'의 코드는 65이고 'a'의 코드는 97이다. (1)~(2)에 알맞은 코드를 넣으시오.
package JAVA1218;
public class ex03_10 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char ch = 'A';
char lowerCase = (/* (1) */) ? (/* (2) */) : ch;
System.out.println("ch:"+ch);
System.out.println("ch to lowerCase:"+lowerCase);
}
}
(1) ch>= 65 && ch<=90
(2) (char)((int)ch + 32) → (char)(ch + 32)
제가 풀이한 것은 좀 길고 간단하지 못한데 다른 분들의 풀이를 참고해보니 훨씬 쉽고 간단한 코드가 많네요!
혹시 다른 풀이 아이디어가 있으시면 댓글로 남겨주세요!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Java' 카테고리의 다른 글
[java] 자바의 정석 ch5 연습문제 풀이 (0) | 2022.12.19 |
---|---|
[java] 자바의 정석 ch4 연습문제 풀이 (0) | 2022.12.19 |
[java] 자바의 정석 ch2 연습문제 풀이 (0) | 2022.12.18 |
[java] 클래스(class)를 이용한 메서드(method) (0) | 2022.12.13 |
[java] 자바의 클래스(class)란? (0) | 2022.12.13 |