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.
[Java]Math.random()이란 ?
Math.random() 함수 double 형으로 0.0이상 1.0 미만 사이의 값을 반환하는 함수이다. 난수를 만들고 싶을때 자주 이용되는 함수이다. public class MathRandomTest{ public static void main(String[] args){ System.out.println(
jkadv.tistory.com
[Java]주사위 랜덤 뽑기
Math.random() 함수 Math.random()함수를 이용해 뽑을 수 있다. 0.0은 범위에 포함되고 1.0은 포함되지 않는다. 이것을 비교연산자로 표현하면 아래와 같다. 0.0
jkadv.tistory.com
이전에 작성해 놨던 글이 도움이 된다.
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 |
댓글