public class a {
public static void main(String[] args){
int a, b;
a = 0;
b = 0;
while(++a<101)
{
if(a%5!=0 || a%7!=0)
continue;
b++;
System.out.println(a);
}
System.out.println(b+"(개)");
}
}
100이하의 자연수 중에서 5의 배수이자 7의 배수인 정수를 전부 출력하고, 그 수를 세어보는 프로그램인데
다른 건 다 이해가는데 'if(a%5!=0 || a%7!=0)' 이 부분이 이해가 안간다.
5의 배수가 아니거나 또는 7의 배수가 아니면 나머지 조건을 생략하고 다시 위로 올라가라는 건데
5,10,15,20,25,30,35.....100
7,14,21,28,35.......98
이렇게 5의 배수이거나 또는 7의 배수잖아?
그래서 5,7,10,14,15,20,21........100 이런 경우가 false라서 continue 아랫 부분이 실행되는 거고...맞지?
근데 결과가
35
70
2(개)
이렇게 나온다.
그리고 내가 예측한 결과는 'if(a%5!=0 || a%7!=0)'이 부분에서 ||를 &&로 고쳐친 'if(a%5!=0 && a%7!=0)와 같다.
즉, 'if(a%5!=0 && a%7!=0)를 넣은 결과가
5
10
14
15
.
.
.
100
32(개)
이렇게 나온다.
왜 결과가 반대로 나오는 지 모르겠다.
왜 그런지 속 시원히 알려줘~
! 부정연산자여서요
답변은 감사하나, 저도 !를 씌우면 &&가 ||로 바뀌는 건 알고 있고 있는데, 그런 주입식 말고 근본 원리가 궁금합니다!
그게 바뀌는게 아니고 ! 는 부정연산자여서 진실을 거짓으로 거짓을 진실로 바꿔줍니다.
||같은 경우 좌변항이 진실이거나 우변항이 진실이면 진실을 내뱉습니다. &&경우는 좌변항도 진실 우변항도 진실이여야 진실을 내뱉죠 !(진실||거짓) 이렇게 했을경우 거짓이나옵니다.진실||거짓 하면 진실이 나오는걸 부정해서 거짓이 되기 때문이죠
!(진실&&거짓)경우 진실이 나옴 해석은 진실&&거짓 을 비교했을때 맞지 않아 거짓을 표현하지만 !부정연산자를 만나 진실로 바뀜 근데이걸 설명할게있나 진실을 거짓으로 거짓을 진실로 바꿔주는게다임
감사합니다!