Q1.
다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다.
어디에서 잘못 작성된 것일까요?
int var1=5;
int var2=2;
double var3=var1/var2;
int var4=(int)(var3*var2);
System.out.println(var4);
우선 정수와 실수의 개념을 알아야한다. int는 정수변수, double은 실수 변수이다.
일반적으로 정수 실수가 아닌 일반적으로 계산을 했을 경우는 5 ÷ 2 를 하면 2.5가 나오는게 우리가 배운 기본개념이다.
하지만 정수 5, 정수 2를 나누면 결과는 소수점 뒤 .5를 버리고 2만 산출된다.
double var3=var1/var2;
결과는 2.5가 아닌 2가 나온 것이고 double var3의 값은 2가 아닌 2.0으로 저장이 됐을 것이다.
int var4=(int)(var3*var2);
var3 * var2의 값은 var3= 2.0 , var 2의 값은 2
이 둘만 있다면 4.0의 실수 값으로 곱해졌다.
이를 받는 var4의 값을 double var4 = (var3 * var2);
int의 변수타입 변환이 필요가 없기 때문
결과는 4.0의 실수 값으로 출력된다.
하지만 받는 var4의 값을 int 정수, 그리고 (int)(var3 * var2);로 정수로 변환하여 출력하였기 때문에
4.0이 아닌 4의 값이 출력된다.
A1.
변수의 변환을 이용하여 해결하면 될것이다.
int var1 = 5;
int var2 = 2;
double var3 = (double)var1 / var2;
int var4 = (int) (var3 * var2);
System.out.println(var4);
var1 / var2를 나눌때 실수 값으로 변환하여 문제를 해결하면 될것이다.
그게 아니라면
double var1 = 5;
double var2 = 2;
double var3 = var1 / var2;
int var4 = (int) (var3 * var2);
System.out.println(var4);
처음 var1과 var2의 받는 변수의 값을 실수변수 double 형태로 받으면 된다.
Q2.
다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)
int x=10;
int y=20;
int z = (++x) + (y--);
System.out.println(z);
A2.
우선 증감연산자의 위치를 봐야한다.
앞에 있는지, 뒤에 있는지
++x 와 같이 앞에 있다면 먼저 1을 증가한 뒤 계산을 할 것이고,
y--와 같이 뒤에 있다면 계산을 한 다음 1을 감소할 것이다.
그렇기에 int z = 11 (1이 증가) + 20 ; (계산 후 1이 감소)
출력 값은 31이 나올 것이다.
하지만 다음 값을 출력하게 된다면
int z = 12 (11에서 다시 1이 증가하여 계산) + 19(1이 감소하여 20-1이 저장되어 있고 이가 먼저 계산이 되고 1이 감소)
출력 값은 다시 31이 나올 것이다.
계속하여 이 연산식의 값은 반복문으로 돌려도 끝없이 31이라는 값이 나올 것이다.
while(true)
{
int x=10;
int y=20;
int z = (++x) + (y--);
System.out.println(z);
}
Q3.
while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고,
눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요.
눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다.
A3.
이전에 작성해 놨던 글이 도움이 된다.
int num = (int) (Math.random() * 6 ) + 1;
우선 주사위 랜덤 뽑기의 코드이다.
while문을 사용하여 숫자의 합이 5가 되면 멈추게 break문으로 작성을 하면 된다.
public class Main {
public static void main(String[] args) {
while (true) {
int num1 = (int) (Math.random() * 6) + 1;
int num2 = (int) (Math.random() * 6) + 1;
System.out.println("(" + num1 + ", " + num2 + ")");
if ((num1 + num2) == 5) {
break;
}
}
}
}
위에서 작성한 주사위 랜덤 뽑기 코드를 통해 2가지 값을 뽑고,
num1의 값과 num2의 값을 (num1 ,num2) 이렇게 나오게 출력한다.
그 후 if문을 통해 두 수의 합이 5가 될 경우 break문이 작동하게 되어 코드를 끝낸다.
이상 Java스터디 과제 끝!
그래도 공부를 조금 해서 쉽게 풀수 있었던 과제였던 것 같다.
'Java > Java' 카테고리의 다른 글
[Java]StringBuilder 란 ? (0) | 2022.11.20 |
---|---|
[Java] Stream이란 ? (0) | 2022.11.20 |
[Java]StringTokenizer 문자열 분리하기 (0) | 2022.11.11 |
[Java]열거 타입 (0) | 2022.11.11 |
[Java]향상된 for문 (0) | 2022.11.11 |
댓글