- 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요?
int var1=5;
int var2=2;
double var3=var1/var2;
int var4=(int)(var3*var2);
System.out.println(var4);
3열 코드를 보면,
변수 var3은 double 타입으로 실수 값을 받을 준비가 되어있지만
같은 열의 연산식 var1/var2 는 두 변수 모두 int 타입으로 계산을 하고 있다.
따라서 위의 경우에는 연산하는 과정에서 int 값으로 값이 정해진 후,
double 타입의 변수 var3에 2.0 이라는 값이 들어 간 것이다.
만약 double var3 = (double)var1/var2; 로 실행하였다면,
var3에 2.5 라는 값이 할당되어 원하는 결과를 얻을 수 있었을 것이다.
(강제 타입 변환을 이용)
2번
- 다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)
int x=10;
int y=20;
int z = (++x) + (y--);
System.out.println(z);
답은 31
++, -- 는 해당 값을 +1 혹은 -1 해주는 것
++/-- 가 변수 앞에 붙어 있다면, 해당 열의 코드가 실행되기 전에 변수의 값을 +1 한 후 실행하는 것이고,
++/-- 가 변수 뒤에 붙어 있다면, 해당 열의 코드가 실행된 후 변수의 값을 +1 하는 것이다.
따라서 3열이 실행 될 때,
x는 11, y는 20 의 값을 가지고 연산되기 때문에 z 변수에는 31이라는 값이 저장된다.
3번
- while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요. 눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다.
- 출력 예시
시작!
(3,6)
(2,6)
(1,4)
끝!
정답 코드 1.
public class Prac {
public static void main(String[] args) {
System.out.println("시작!");
int var1 = (int)(Math.random()*6)+1;
int var2 = (int)(Math.random()*6)+1;
while (var1+var2 != 5) {
var1 = (int)(Math.random()*6)+1;
var2 = (int)(Math.random()*6)+1;
System.out.println("("+var1+","+var2+")");
}
System.out.println("끝!");
}
}
정답 코드 2.
public class Prac {
public static void main(String[] args) {
System.out.println("시작!");
boolean flag = true;
while (true) {
int var1 = (int) (Math.random() * 6) + 1;
int var2 = (int) (Math.random() * 6) + 1;
if (var1 + var2 == 5) {
break;
}
System.out.println("(" + var1 + "," + var2 + ")");
}
System.out.println("끝!");
}
}
다른분들의 코드를 보면서 더 간결하고 보기 좋게 다듬고 싶다!