// 주사위 3개를 동시에 던져서 나오는 상황을 연출하시오. Random 클래스를 활용하시오.
// 실행예시)
// 주사위: [3, 1, 5]
-> seed를 전달하지 않겠다(2번째 것) : 현재 시간(TimeStamp) 값을 seed로 쓰겠다
Random 객체가 정수 6개를 만듦(nextInt(6))
정수 6개 중 한개가 나옴
0~5까지가 6개임
-> 0때문에 주사위로 볼 수 없음
-> 주사위로 0이 나오면 안됨
StringBuilder 씀
-> 반복문에 의해서 , 찍음
마지막은 닫는것만
// 1원부터 통장 잔고 사이의 난수를 발생시켜서 해당 난수만큼 출금 처리하시오.
// 더 이상 출금이 불가능한 상황이면 출금을 멈추시오.
// 실행예시)
// 출금 전 5000원, 1회 출금액 2917원, 출금 후 2083원
// 출금 전 2083원, 2회 출금액 1961원, 출금 후 122원
// 출금 전 122원, 3회 출금액 102원, 출금 후 20원
// 출금 전 20원, 4회 출금액 2원, 출금 후 18원
// 출금 전 18원, 5회 출금액 17원, 출금 후 1원
// 출금 전 1원, 6회 출금액 1원, 출금 후 0원
-> 빨간색 변수있음, 파란색 변수없음
-> 다 random (몇번에 끝날지 모름)
-> 한번에 끝날수도 있음
-> while문 쓰면 됨
balance가 있으면 계속하는것
출금액 만들때 규칙있음 -> 통장잔고 이상을 랜덤으로 만들면 안됨
-> 통장잔고가 계속해서 변한다
balance기준임
0~9 사이의 랜덤 발생 : 10개 랜덤
-> math.random 이 0에서 1사이임
곱하기 10 하면 -> 0.0 ~10.0
int로 casting해서 0은 포함 10은 불포함
(0이상 10미만)
-> 10보다 1작은 숫자만들어야 함
(int)(Math.random() * 100)
통장에 100원있으면
0 ~ 99원 만들어짐
-> 프로그램 끝나지 않음
(100원을 만들수있어야 끝남)
-> 통장에 들어있는 돈이 100원이라고 가정시)
1원~100원 만들수있도록 +1 추가해야함(통장잔액보다 크지않은 랜덤값 생성가능)
최초 5000만듦
부족하니까 + 1
(어쩌면 5000원이 나올 수 있게)
1원 ~ balance까지
-> 출금전 5000원하면 또 더해야 함 (불편함)
-> 미리 빼면 불편해짐 , 빼는 걸 나중에 함
-> 복합연산의 반환값은 왼쪽으로
출금액을 빼고 balance를 찍어줌
-> 몇번걸리든 무조건 끝나야 함
// 0~9 사이 값을 이용하여 임의의 인증코드 6자리를 생성하시오. SecureRandom 클래스를 활용하시오.
// 실행예시)
// 인증코드: [966419]
인증코드 만들때는 secureRandom 쓰기
-> 사용법이 random과 거의 같음
-> 10개 중 한개(시작은 0이고, 0~9까지)
-> 반복문으로 바꾸기
-> 0에서 시작했고 6번 돌렸다라는 뜻
// 2~9단 사이의 임의의 구구단이 출력되면 사용자는 정답을 입력한다.
// 정답을 입력해서 맞히면 "정답", 틀리면 "땡"을 출력하시오. Math 클래스의 random() 메소드를 활용하시오.
// 실행예시1)
// 4x9? >>> 36
// 정답
// 실행예시2)
// 8x7? >>> 49
// 땡
이메일로 보내는 것은 구현함
인증코드를 문자로 보내는 서비스도 있음
api 돌릴때마다 30원씩 차감되는 것도 있음
-> +2는 괄호 안이나 밖으로 나가도 되고 상관없음
2부터 dan : 8개
Math.random() 0.0 ~ 1.0 범위에 속하는 하나의 double 타입의 값을 리턴함
0.0은 범위 포함되고 1.0은 포함되지 않음
Math.random()을 활용한 다양한 난수 얻기
(1) 각 변에 10을 곱하기
0.0 <= .. < 10.0 사이의 범위에 속하는 하나의 double타입의 값을 얻을 수 있음
0.0 10 <= Math.random() < 1.0 10
(2) 각변을 int타입으로 강제 변환시켜서 0<=..<10 사이의 범위에 속하는 하나의 int타입의 값을 구하기
(int)(0.0 10) <= (int)(Math.random() 10) < (int)(1.0 10)
(3) 각 변에 1을 더하면 1<= .. < 11범위에 속하는 하나의 정수 얻음
(int)(0.0 10) + 1 <= (int)(Math.random() 10) < (int)(1.0 10) + 1
random은 객체만듦-> 벌써 메모리 써서 -> 성능상 문제
-> 삼항연산자
// 실행예시1)
// "도", 1칸 이동한다.
// 실행예시2)
// "개", 2칸 이동한다.
// 실행예시3)
// "걸", 3칸 이동한다.
// 실행예시4)
// "윷", "도", 5칸 이동한다.
// 실행예시5)
// "모", "윷", "도", 10칸 이동한다.
-> 인덱스 번호 = 이동횟수
-> 12345를 만든다고 생각해야함
(4나 5가 만들어지면 또 랜덤을 하면됨)
(반복문이 필요함 : 랜덤으로 만든값이 4이상이면 또 한번 랜덤 돌리기 -> 그값을 또 보여주면 됨)
0은 만들 필요없음
1. do-while문이 좋고(while보다는) : 한번은 던져야 그 다음에 할지 안할지 결정을 할 것임
2.무한루프(break로 끊어버리기)
(실행문) 랜덤값이 4이상이면
랜덤번호 = 이동횟수(move) 12345
이동횟수 1 : 도 출력
-> 앞에 두개 빈문자열 뒤에는 쓰레기로 생각함
"\" 역슬래쉬 해야 함
println -> print로(줄안바뀜)
,(콤마) 찍고 또 던질건지?결정해야함
move가 do 안에 있어서 오류남-> scope
윷 move 4 도 move 1
합쳐서 5가 나옴 -> 변수가 부족함
-> 0으로 초기화
끝나고 출력하는건 몇칸이동한다고 출력한다
// 사용자로부터 "가위", "바위", "보" 중 하나를 입력 받아서 컴퓨터와 가위바위보를 진행하시오.
// 내부적으로 가위는 0, 바위는 1, 보는 2로 처리하시오.
// 실행예시)
// 가위바위보 >>> 가위
// 당신은 가위, 컴퓨터는 보, 당신은 이겼습니다.
**
★ 가위바위보에 쓴 아이디어 생각! **
컴퓨터가 0,1,2 만들지 몰라야 함(난수)
-> 012 중에 하나 만듦( 뒤에 +0 할필요없음)
-> 사용자가 입력한 가위바위보를 가지고 switch를 돌리겠다
-> 나머지 경우는 고려 x
->가위바위보는 몇개 안되니까 그냥 switch로 풀 수 있음
0,1,2 중에 하나가진것(가위바위보로 입력했지만 012로 바뀐것)
9가지 조합 -> if로 짜는건 좋지 x
-> 결과를 string으로 저장시키기
-> com , user도 rsp 인덱스 모두 가지고 있음
-> 파란색 부분까지는 이미 출력가능
-> 이겼다, 졌다 , 비겼다만
-> string result로 저장했다가 마지막에 출력할 예정
(ex) 가위 (0) -> 보(2)
바위(1) -> 가위(0)
보(2) -> 바위(1)
-> 3개 조건
user - com = -2, 1, 1
-> 뺀 결과가 -2가 나오거나 1이 나오면 이겼다고 볼 수 있음
-> 두개를 한개로 묶었다는것에 만족할 수 있음
if
switch로 바꾸기
user 가 나올 수 있는건 rsp임
rsp 0 -> 가위
rsp 1 -> 바위
rsp 2 -> 보
컴퓨터는 가위,바위,보 중 하나를 만든걸로 생각!
+++ 질때까지 계속하기(몇승몇무몇패까지 할수있음)
java.script 로 짜면 화면으로 할 수 있음(웹을 조정하는 언어)- 2주
j.query 수업
// 사용자로부터 몇 자리의 인증번호를 만들것인지 입력 받아서 처리하시오.
// 대문자와 소문자와 숫자는 임의의 비율로 나타나도록 처리하시오. SecureRandom 클래스를 활용하시오.
// 실행예시1)
// 몇 자리의 인증번호를 생성할까요? >>> 4
// 생성된 4자리 인증번호는 7W5e입니다.
// 실행예시2)
// 몇 자리의 인증번호를 생성할까요? >>> 6
// 생성된 6자리 인증번호는 Fa013b입니다.
-> string많이 던지면 안좋음(3번에서)
stringbuffer나 stringbuilder 써야함(빠른건 stringbuilder)
-> count만큼 반복하는 것
★ 고민하지말고
-> 6번 숫자만큼 반복하는거다
방금 6이 count로 바뀜
-> count만큼 반복하겠구나
변수이름만 보고 의미가 전달되는것이 좋음
i를 쓰면 배열쓰자는 의미가 될 수 있음
셋중에 알아서 해야함
-> 확률처리하기(33%확률로 숫자만들기, 대문자만들기 ..)
-> 1이 백분율에서는 100%로 되어서
확률로 보면 타당함
(0%~ 100% 사이의 값이다)
-> 0.1 x 100 => 10% 확률
33%로 하기
-> 0은 0%이고 1은 100%임
-> 33%가 안넘을 확률
숫자) 10개중 한개
-> int값 0~9 나오는것
아까는
이런식
sb에 누적하기
-> 또다른 33%
아스키코드
65부터 90까지 만든다(random으로 만들 수 있는건 어차피 숫자라서)
-> 65부터 28개
-> 97부터 알파벳 소문자 시작
nextInt가 반환하는건 int값
26~65사이에 숫자가 나옴 int 더하기 int
-> 더하기 하고 casting해야함
-> 둘의 관계는 같다
-> int로 표기하면 65, A로 표기하면 A
char는 작은따움표로 묶어야 함 'A'-> A라는 문자가 됨
-> 연산해서 사용될때는 자동으로 형변환되서 65로 사용됨
-> stringBuilder쓰면 무조건 마지막은 toString : string으로 바꿔야함
-> 나중에 library(라이브러리)가 있어서 알아서 만들어 줌
// 발생한 0~9 사이의 각 난수들이 생성된 횟수(빈도수)를 그래프화 하여 출력하시오.
// 실행예시)
// 0 : #### 4
// 1 : ############ 12
// 2 : ############ 12
// 3 : ##### 5
// 4 : ######## 8
// 5 : ########### 11
// 6 : ############ 12
// 7 : ################## 18
// 8 : ####### 7
// 9 : ########### 11
만개중에 1개
우리가 입력할 숫자 : input
몇번만에 성공할건지 : nth(회차)
do- while 입력을 해야 끝나기 때문에
못 맞췄으면 계속해라 -> goal을 input으로 찾을예정인데
둘이 다르면
-> 맞추든 못맞추든 회차증가는 해야함
-> 0~9를 만드는 것
생성해서 집어넣는건 0~9 사이
(ex) 2가 만들어지면,
count배열 인덱스 2를 하나 늘림
-> 2가 또 만들어지면,
number[i] number배열에 저장된 값
count[i] count배열의 인덱스 자리에다가 넘기
-> ++ 해서 1씩만 증가시키면 되니까
(보통은) 100개 저장하고 100개 또 돌림
number배열에 생성된 값을 count의 index로 활용하기
-> 연습장 꺼내놓고 많이 연습해보기!
-> 출력할건 count배열의 상태
-> 하나하나 이어붙여야 하니까 : StringBuilder써야함
count배열에 저장된 만큼 반복
count배열에 5 있으면 ##### 샵 5번 찍음
-> count i만큼 ########### 한것
// 지시사항)
// 1. 1 ~ 25 사이 정수를 2차원 배열 bingo에 순차적으로 넣는다.
// 1 2 3 4 5
// 6 7 8 9 10
// 11 12 13 14 15
// 16 17 18 19 20
// 21 22 23 24 25
// 2. 섞는다.
// 총 25번의 교환이 랜덤하게 발생된다.
// bingo[0][0] <-> bingo[1][4]
// bingo[0][1] <-> bingo[0][2]
// bingo[0][2] <-> bingo[2][1]
// ...
// bingo[4][4] <-> bingo[3][1]
// 실행예시)
// 10 9 4 25 2
// 15 3 13 21 1
// 14 20 11 19 6
// 8 17 5 12 7
// 16 22 18 24 23
(j+1)은 항상 12345임
-> 빙고판의 크기를 SIZE만 바꾸면 바꿀 수 있음
(본문 전체에서 계속 사용됨)
bingo.length의 자리인데 그렇게 할 필요 x(같은거라서)
-> i다음에 곱해주는값 - 5 : SIZE임 (SIZE에 따라서 달라짐)
배열 3개짜리부터 해보기 33, 44 ,55 하면 보임
-> 값을 맞춰서 (안쪽에 j배열이 끝나면)
출력
-> 순서대로 채워주고 섞는건 아직 안함
-> 필드폭을 3자리까지는 괜찮음
앞에 빙고 i j를 순차적으로 접근 (random임)
-> 자기가 자기를 바뀔 수도 있고(25개 돌고나면 예상하지 못할만큼 섞였음)
-> 0~ size -1 (이전까지 random값을 2개 만들어야함)
x, y값을 random으로 만들어야함
-> xy가 랜덤값
-> 교환하는 방법 : temp(임시변수)만들고(direct로 교환은 불가능) - 한쪽이 주면 덮어써서 같아짐
(한바퀴 돌리기)
-> 임시변수(t)를 시작과 끝에 적고 a 2번, b 2번쓰면 교환가능
랜덤해서 생성해서 집어넣기로 하면 중복처리 못함
(만들었던 숫자 또 나올 수 있음)
-> 성능 떨어짐
먼저 다 쓰고 섞는게 최선임
어려워요............