double r = Math.random(); => 0~1 사이의 랜덤한 수가 나옴
0~99 사이의 난수가 필요하다면 r*100
-> (int) 캐스팅 연산으로 소수점 자리를 없애준다.
0~49(50미만) 사이가 필요하면 *50
모든 경우의 최종 연산은 (int) 캐스팅 연산으로 소수점 아래를 버리는 동작으로 마무리 한다.
예시 1
Random 클래스 사용하는 방법
import java.util.Random;
사용자가 어떤 것을 입력했고 컴퓨터의 수가 뭐였는지 알 수 있게 하려고 코드를 추가해 보았다.
출력 예시 (내가 실행해본 결과)
가위(0) 바위(1) 보(2) 중 하나를 입력하세요(숫자입력)
종료를 원하시면 '9'를 입력해주세요 : 2
컴퓨터에게 이겼습니다.
결과 You : 보, Com : 바위
가위(0) 바위(1) 보(2) 중 하나를 입력하세요(숫자입력)
종료를 원하시면 '9'를 입력해주세요 : 1
컴퓨터에게 졌습니다.
결과 You : 바위, Com : 보
가위(0) 바위(1) 보(2) 중 하나를 입력하세요(숫자입력)
종료를 원하시면 '9'를 입력해주세요 : 4
잘못된 입력입니다.
정수 0(가위), 1(바위), 2(보), 9(종료) 중에 하나를 입력해주세요
결과 You : X, Com : 바위
가위(0) 바위(1) 보(2) 중 하나를 입력하세요(숫자입력)
종료를 원하시면 '9'를 입력해주세요 : 9
게임이 종료 되었습니다.
2월 부분은 원래 switch안에 if문을 넣어야 하는데 뭔가 잘못 썼는지 계속 오류가 나서 2월 부분만 따로 빼서 만들었다.
응용 : 전달, 다음 달, 종료 추가하기
아래는 내가 써본 코드 - 1차
if(조건);
(X)for(int i=1; i<100; i++);
(X)while(i<100);
(X)do{ } while(조건);
(O)예시 1
do~ while을 써서, 사용자가 100을 입력하기 전까지 입력된 모든 숫자를 합산해서 출력 하기
예시 2
두 개의 숫자와 연산자를 입력 받아서 해당 숫자를 입력한 연산자로 연산한 결과를 출력
위의 코드를 반복 시킬 예정, 무한 반복을 막기 위해서 반복을 멈출 코드를 넣어야 한다.
Array란?
동일한 변수 이름에 번호(첨자)를 붙여서 다수 개의 데이터를 한 번에 저장할 수 있는 방법
배열 변수 생성
int [] a;
int [] kor = new int[3];
int [] eng = new int[3];
int [] mat = new int[3];
int [] tot = new int[3];
double [] avg = new double[3];
참조변수는 메모리(주기억장치:RAM) 내부의 공간 중 HEAP라는 영역 안에 실제 데이터가 저장된 곳을 지정하고 그 곳의 위.치.정.보를 저장하는 변수
String도 참조변수
다~ 같은 말!!
참조값 = 레퍼런스값 = 주소값 = 어드레스값
참조변수(레퍼런스변수)는 위 네 개의 이름이 지칭하는 그 하나의 값을 저장하는 변수
a=123;
⇒ 에러 (123은 정수가 아니고 위치정보를 표시한 것)
a변수는 정수를 저장하는 변수가 아니고, 정수가 저장된 곳의 주소를 저장하는 변수이기 때문에
123번지를 임의로 개발자가 사용하는 것은 위험한 행동
현재는(int [] a;
) 배열에 정수를 몇 개 저장할 수 있는 지 개수와 메모리가 정해지지 않았다.
배열을 사용하기 전에 저장할 수 있는 개수와 HEAP에 만들어진 공간 주소를 반드시 저장하고 사용해야 한다.
new int[3]
: Heap 영역에 정수가 3개 저장될 공간을 "새.롭.게" 확보하라는 명령
new가 새 메모리를 확보한 후
그 시작 주소를 왼쪽 참조변수에 전달-저장되게 해준다.
새로운 메모리는 int(4byte) 3개가 저장되어야 하므로 총 12byte가 확보된다.
배열의 각 공간에 값을 대입하는 방법
⇒ 인덱스(첨자) 연산을 사용
배열의 인덱스(첨자) : 시작은0, 종료는 배열의 크기-1
배열변수명[인덱스(첨자)] = 값;
null을 이용해서 참조변수 값을 초기화
System.out.println(b1);
➡ ERROR!!배열 참조 변수의 선언과 배열 실제 공간의 생성을 동시에 new를 이용하여 진행한다면... ⬇
배열 변수 a7, a8을 동시 선언하는 코드
배열 변수 a9, a10, 일반 int형 변수 a11을 생성하는 코드
nextInt()를 사용할 때 주의할 점!!
sc.nextInt();는 사용자의 입력 중에 마지막 Enter를 제외한 앞의 정수만 취한다.
공교롭게 바로 다음에 sc.nextLine();명령이 온다면 입력 버퍼에 남아있는 Enter를 해당 입력 String 데이터로 인식해서 Enter를 취하고 명령을 종료해버린다.
이럴 경우 사용자가 String을 입력하지 않았는데 다음 실행으로 넘어가 버려서 원하는 String 입력이 불가능 해진다.
따라서 별도의 조치가 없어도 되는 상황이 아니라면 sc.nextLine()으로 먼저 입력받고 이를 숫자로 변경한다..
배열 생성하고 성적표 입력 받기 ⬇️
성적표 출력 (혼자해보기)
조건
출력 양식
쉬운 문제라 금방 작성 할 수 있었음.