앞으로 공부해야하는 JAVA가 어떤 언어인지, 어떤 특성을 가졌는지 공부해보기 위한 기초 과제이다!
int var2=2;
double var3=var1/var2;
int var4=(int)(var3*var2);
System.out.println(var4);
변수 var1 = 5, var2 = 2일 때
double var3=var1/var2 를 풀어보면,
double은 실수형 데이터 타입이기 때문에 5/2 하여 2.5가 나올 것이라고 예상할 수 있지만,
var1, var2는 int의 정수형 데이터이다.
int의 연산자 / 나누기는 - 피연산자의 나누기 연산 후 몫만 반환한다. (일반적인 나누기 계산처럼 분수나 소수 계산을 하지 않고, 해당하는 몫의 값만 반환한다.)
var1/var2 = 2가 되고, double 형으로 표현하게 되면, 2.0이 된다.
따라서 첫 번째 double var3=var1/var2 식으로 나오는 변수 var3의 값은
var3 = 2.0 이다.
int war4=(int)(var3var2); 를 풀어보면,
var3var2는 2.0 X 2로 4.0의 double 데이터타입을 갖게 된다.
여기서, 앞의 (int)로 정수형 데이터타입으로 변경해주었기 때문에
int war4=(int)(var3*var2);를 하면 4가 나온다.
따라서 System.out.println(var4); 를 하면 출력결과가 5가 아닌 4가 되는 것이다.
<팀 고찰>
5로 나오게 하려면! 어떻게 하면 될까
(1) 1. int -> double로 바꿔주기
(2) double var3=var1/var2; 나누기 기호 앞에 1.0을 곱해주는 것
(3) double var3= (double) var1/var2;
int x=10;
int y=20;
int z = (++x) + (y--);
System.out.println(z);
두 번째 문제를 풀기 위해서는 연산자에 대한 개념을 알아야 한다.
형식 | 의미 |
---|---|
++x | x를 먼저 1 증가시킨 후 그 값을 사용하는 것 |
x++ | x를 먼저 1 감소시킨 후 그 값을 사용하는 것 |
--x | x값을 먼저 사용 후 1 증가 |
x-- | x값을 먼저 사용 후 1 감소 |
+x | x부호 유지 |
-x | x부호 변경 |
따라서 int z = (++x) + (y--); 식의 ++x는 11이고, y--는 20 이므로
System.out.println(z); 출력 결과값은 31이다.
증감연산자를 좀 더 정확하게 이해하고 싶어 위 문제에 다른 ++, -- 코드를 추가해서 출력해 보았다.
public class Ques01 {
public static void main(String[] args) {
int x=10;
int y=20;
int a=y--;
int b=(--y);
int c=x++;
int d=++x;
int z = (++x) + (y--);
System.out.println(z);
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
그런데, 결과가 이상했다.
System.out.println(z); = 31 로 문제 푼것과 같이 결과가 잘 나왔는데
System.out.println(a); = 20
System.out.println(b); = 18
System.out.println(c); = 10
System.out.println(d); = 12 로 연산자가 뒤에 붙는 것은 증감연산자와 결과값이 같게 나왔는데 앞에 붙는 것은 -1이나 +1이 되는 것이 아닌 -2, +2 가 되는것을 확인하였다.
왜 이렇게 나오는지 이유를 깨달았다. (조금 뒤 정리 후 수정할 예정) (팀원들과 이야기해보기)
출력예시
시작!
(3,6)
(2,6)
(1,4)
끝!
우선 이 문제를 해결하기 위하여, Mathod.random() 메소드의 이해가 필요하다!
public class MathRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
}
}
0.7823854813094799
0.49640570238092907
0.067599990277046
0.44941068326020195
0.497710163140329
0.11137880365687514
0.14057930772566296
0.17204060024288914
0.7575185314824725
0.7603088285833096
Process finished with exit code 0
Method.random() 이란 함수는 double형으로, 0.0이상, 1.0미만 사이의 값을 출력하는 함수이다.
이 함수를 이용하여 주사위의 숫자인 정수 1부터 6까지를 표현하려면 어떻게 해야 할까?
Method.random() 함수 앞에 int를 붙여 정수형으로 바꿔주고, 값을 6 곱해준다. 0.0~1.0 사이의 값이기 때문에, 마지막에 +1을 해주어야 1~6까지의 정수 표현이 가능하다.
while문과 Math.random() 메소드를 사용하여 이 문제를 풀어보자
public class Ques03 {
public static void main(String[] args) {
while(true) {
int dice1 = (int)(Math.random()*6) +1;
int dice2 = (int)(Math.random()*6) +1;
System.out.println("("+dice1+","+dice2+")");
if (dice1 + dice2 == 5) {
break;
}
}
}
}
우선 while을 이용하여 조건은 무조건 true 조건이 되게 한다.
dice1, dice2는 각각 (int)(Math.random()*6) +1; 로 표현하여 1~6의 정수를 랜덤으로 갖게 한다.
System.out.println("("+dice1+","+dice2+")"); 로 출력하고,
break를 사용하여 dice1 + dice2 가 5의 값을 가지게 되었을 때 멈추게 하였다.
(3,3)
(5,5)
(5,1)
(5,4)
(4,6)
(6,3)
(1,2)
(4,5)
(6,5)
(4,4)
(4,3)
(3,5)
(6,5)
(1,5)
(3,4)
(5,2)
(2,2)
(3,5)
(3,2)
Process finished with exit code 0
생각보다 엄청 긴 결과가 나왔는데..! 합이 5가 되었을 때 정상적으로 멈추는 것을 확인할 수 있다.
앞으로 더 힘들어 지겠지만, 지금까지는 문제푸는거 너무 재밌다!!
새로 배정받은 조의 분위기가 첫날인데도 벌써부터 너무 좋다 😀 2주차 화이팅!