10장의 키워드는 상수
배울 내용
+ 랜덤의 필요성
+ 랜덤의 의미
+ 랜덤의 사용법
첫 번째 줄은 랜덤 번호 생성기를 만드는 코드.
여기서 Random은 클래스라고 한다.
클래스는 이 책에서 배울 범위에서 벗어나서 일단 제쳐두자고 한다.
그냥 이렇게만 알고있자. 첫번째 줄 코드로 랜덤 생성기를 만들어 random 변수에 대입한다고!!
간단히..
함수 -> 기능 수행하는 코드 묶음
클래스 -> 그런 함수를 모아둔 곳
두번째 줄의 random.Next(1,7);
Next() -> 무작위의 정수를 만들 때 사용하는 함수
(1,7) -> 1이상 7미만
세번째 줄은 왜 있는지?? -> Next()함수를 호출할 때마다 새로운 숫자가 나온다는 사실을 보여주려고 한다.
보통 number1 과 number2는 다른 값이 되는거지 / 랜덤!!
저번에 만든.. 디지털 도어락 프로그램에서 비밀번호를 랜덤으로 돌려보잣 ㅋ.ㅋ
저번에는 passcodeNumber 배열을 내가 직접 정했는데,
이제 그 내용을 랜덤으로 했다.
17~22번째의 for문 => 배열 속에 랜덤 정수 집어넣고 보여주기
29~34 for문 => 내가 입력한 비밀번호 배열 만들기
37~45 for문 => 입력배열이랑 랜덤배열이랑 비교하여 틀리면 37번의 for문을 빠져나와 while문 안을 다시 돌기
ㅇ만약에 37번 for문을 다 수행할 때까지 39번 if문 조건에 걸리지 않았다면?
ㅇ비밀번호가 맞다는 거니까
46번 if문을 수행하여 문이 열렸다고 알려주고, break를 통해 while문을 빠져나온다.
흠.. if문 break랑 for문 break가 달랐나..
왜 비번 틀렸을때는 다시 반복하고 비번 맞았을 때는 프로그램이 종료되는지!!
알아보니까 결국 이거는 복습부족이다 흑흑
>>break는 가장 가까운 반복문을 빠져나가게 된다.
break는 반복을 종료시키는 구문이다.
break가 if문 안에 쓰였더라도 효과는 가장 가까운 반복문을 종료시키는 것이다<<
아이고~~~옌아~~~~ㅠㅅㅠ
위와 같이 random함수를 통해 비밀번호가 실행시 달라지게 만들어 봤다.
우리 로또 해보자!!
랜덤으로 번호가 나온다.
그런데 코드가 이해 안가는 부분이 있다. 한번 살펴보자
16줄 while문 -> while(lottoNumberIndex < lottoLength)
엥? lottoNumberIndex =0; 으로 일정할텐데.. lottoLength는 6이고.. 그럼 항상 실행하라는건가??
아니!! 뒤에서 lottoNumberIndex++인 부분을 만들 것이다. 6개를 다 뽑으면 멈출거다!
?? 근데 왜 for문을 사용 안하고 while문을 사용한고야? 번호 뽑는건 반복적인 일인데?
자자자 여기보세요!! 로또 번호는 "중복되면 안돼요!"
랜덤으로 돌리다가 만약 중복된 번호를 고르면 다시 번호를 뽑아야 하기 때문에
무조건 6번 반복이 아니라, 중첩되지 않는 번호 여섯 개를 다 뽑을때까지 돌려야 하는 거죳
그래서 for문보다는 while문이 적합.
18줄
lottoNumbers[lottoNumberIndex] = random.Next(1,46)
오키 랜덤으로 정수값을 lottoNumbers배열에 집어넣는거. (초기 인덱스 0부터 점차 늘려가며)
20줄
bool hasDuplicate = false;
왜 중복이 없다고 초기화를 할까?
일단. 아직 중복된 적이 없다고 초기화를 해주고 나서!
하나하나 비교해보면서 중복된 값을 찾으면
bool hasDuplicate = true; 로 바꿔주는 거지~!
네~~알겠숨다
그래서 중복된 값이 있는지! 체크하는 코드는 21줄부터 시작
if (lottoNumbers[lottoNumberIndex] == lottoNumbers[i] 을 통해서
그 인덱스에 있는 값이, 다른 인덱스에 있는 값과 같은지 비교한다.
같은게 존재->
ㅇ중복=true로 바꿔주고, break로 21줄 for문을 빠져나오면
ㅇ30줄의 조건문에서 !true = false 니까 인덱스 번호를 올리지 않고 다시 while문 첨으로 감.
같은게 없음->
ㅇfor문의 조건식을 벗어나서 30번째줄로 가면,
ㅇ인덱스 번호를 올려서 다시 같은 과정 진행
중첩되지 않는 6개의 번호를 다 정하면, 그제서야 while문을 빠져나와서 로또 번호를 표시할 수 있게 됨.
오랜만에 숫자야구
수비수가 랜덤으로 숫자를 고르게 하는 코드를 추가한다
처음에 랜덤함수 써주고
넘버배열 만들고
인덱스는 0부터 시작
그담엔 숫자를 중복되지 않게 고르기 위해 while문 사용할거야
index<3하고, 인덱스에 값 다 넣게되면 숫자 고르기는 그만!!
일단 while문 안쪽에서
넘버배열[인덱스]에다가 랜덤값을 넣어주자
그리고 일단 중복 = 노노 정해주고
진짜 중복 = 노노인지 확인하기 위해
그 인덱스의 값이랑, ++되는 j값 쫘라락 비교한다.
ㅇ중복이다 -> 중복 = true로 바꾸고, break
ㅇ중복 아니다 -> j++때문에 for문의 조건을 다해서 빠져나오게 됨. 그리고 index++ 코드를 실행하게끔 함.
자 이렇게 인덱스값 증가시키면서 넘버배열을 완성시키면
고게 바로 수비수가 고른 번호 3개!! (중복 노)
공들여서 배운 프로그램이니까 숫자야구 게임 한번 해보쟈
ㅠㅠㅠ잼따
숫자야구 프로그램 완성
우아ㅜㅜ
챕터 10 기본심화문제 끝나면
실습했던 프로그램을 안보고 혼자 짜보면서 복습하는 걸로 하자.
'기타' 카테고리의 다른 글
[비주얼 스튜디오] 콘솔 실행파일(exe)만들기 / "빌드를 통해서" | 2017, 2019 (5) | 2020.03.02 |
---|---|
Hello Coding 헬로코딩 프로그래밍 챕터10; 기초문제 (0) | 2020.03.01 |
Hello Coding 헬로코딩 프로그래밍 챕터9; 기초문제 심화문제 (0) | 2020.02.25 |
Hello Coding 헬로코딩 프로그래밍 챕터9; 반복문 for (0) | 2020.01.20 |
Hello Coding 헬로코딩 프로그래밍 챕터8; 기초문제 심화문제 (0) | 2020.01.16 |