📌 난수, 랜덤숫자(Math.random) / 예제 풀기
- 난수: 정의된 범위 내에서 무작위로 추출된 수. 난수는 누구라도 그 다음에 나올 값을 확신할 수 없어야 함.
- Java에서 난수 구하는 방법:
- ① Math.random(): Math 클래스의 random() 메서드 사용
- ② Random 클래스 활용
Math.random()
: 0~1까지의 실수 중 랜덤한 수를 전달해 줌.
- 예) double d = Math.random();을 하면 0.0 <= d < 1 중 임의의 실수 값이 d에 할당된다.
문제 1.
- Math.random(); 이라는 메소드가 있다. 이 메소드는 0 ~ 1까지 사이의 실수 중 랜덤한 수를 전달해준다. 이를 활용하여 정수형 변수 I에 50 <= I < 100 의 임의의 정수를 저장해보라.
public class Array_배열문제_16 {
public static void main(String[] args){
int a = (int)10.5;
//Math.random() : 0.0 <= x < 1.0 랜덤 실수
//1~10까지의 정수를 랜덤,
int rand = (int)(Math.random() * 10 +1);
System.out.println(rand);
}
}
📌 배열(array) - 예제 풀기
문제 1.
- 1, 2, 3, 4, 5, 6 ,7 ,8 로 초기화된 배열을 만들고, 배열의 요소 중 짝수의 개수를 구하는 프로그램을 만드시오.
public class Array_배열문제_10 {
public static void main(String[] args){
int[] arr = new int[8]; //배열의 선언
//초기화된 배열 생성
for(int i = 1; i < arr.length; i++){
arr[i] = i + 1;
}
//배열의 요소 중 짝수의 개수 구하기
int cnt = 0;
for(int i = 0; i < arr.length; i++){
if(arr[i] % 2 == 0){
cnt++;
}
}
System.out.println(cnt);
}
}
문제 2.
- scanner로 정수 하나를 입력받아, 입력받은 정수만큼의 길이를 갖는 배열을 생성하고 배열에 각 요소에 1 ~ 입력 받은 정수로 값을 저장한다. 예를 들어 5를 입력했으면 길이가 5인 배열을 만들고 각 요소에 1,2,3,4,5가 들어가야 한다.
public class Array_배열문제_12 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 입력 : ");
int num = sc.nextInt();
int[] arr = new int[num];
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
문제 3.
- 초기값을 5,4,3,2,1로 갖는 배열 arr을 만든다. 그리고 길이가 5인 새로운 정수형 배열newArr을 만든 후 arr이 가진 값을 newArr로 복사하여 보자. 복사 결과는 출력을 통해 확인한다.
public class Array_배열문제_14 {
public static void main(String[] args){
int[] arr = {5, 4, 3, 2, 1};
int[] newArr = new int[arr.length];
//new int[5]로 설정하면 arr의 데이터가 바뀔 때마다 수정 필요
for(int i =0; i < newArr.length; i++){
newArr[i] = arr[i];
}
for(int i = 0; i < newArr.length; i++){
System.out.println(newArr[i]);
}
}
}
문제 4.
- 1, 2, 3을 초기값으로 갖는 배열 arr1과 4,5,6을 초기값으로 갖는 arr2를 만든다. 그 후 새로운 배열 newArr을 만들어 arr1과 arr2의 모든 값을 복사해보자. 복사 후 newArr은 1, 2, 3, 4, 5, 6을 가져야 한다.
public class Array_배열문제_15 {
public static void main(String[] args){
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};
//1 2 3 4 5 6
int[] newArr = new int[arr1.length + arr2.length];
//arr1 배열의 데이터를 newArr에 넣기
for(int i = 0; i < arr1.length; i++){
newArr[i] = arr1[i];
}
//arr2 배열의 데이터를 newArr에 넣기
for(int i = 0; i < arr2.length; i++){
newArr[arr1.length + i] = arr2[i];
}
//newArr 데이터 출력
for(int i = 0; i < newArr.length; i++){
System.out.print(newArr[i] + " ");
}
}
}
문제 5.
- (난이도 상) 간단한 성적처리 시스템을 만들어보자. 국어, 영어, 수학점수를 입력받아 각 과목에 대한 점수 및 총점, 평균을 출력하는 프로그램을 만들어보자. 반드시 배열을 사용하도록 한다.
public class Array_배열문제_11 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//국어, 영어, 수학, 총점에 대한 배열(정수)
//0: 국어, 1: 영어, 2: 수학, 3: 총점
int[] scores = new int[4];
double avg;
//과목명을 저장하고 있는 배열
String[] subjets = {"국어", "영어", "수학", "총점"};
//과목 수만큼 반복해서 각 과목의 점수를 입력
for(int i = 0 ; i < scores.length - 1 ; i++){
while(true) {
System.out.print(subjets[i] + "점수 입력 : ");
scores[i] = sc.nextInt();
//scores[0] 값이 0~100 사이'면' 반복문을 벗어난다.
if(scores[i] >= 0 && scores[i] <= 100){
//가장 가까운 반복문(for, while)을 벗어남.
break;
}
}
}
//총점 및 평균 계산
for (int i = 0; i < scores.length - 1; i++){
scores[scores.length - 1] = scores[scores.length - 1] + scores[i];
}
avg = scores[scores.length - 1] / (double)(scores.length - 1);
//점수 출력
for(int i = 0; i < scores.length; i++){
System.out.println(subjets[i] + "점수 : " + scores[i]);
}
System.out.println("평균 : " + avg);
}
}
문제 6.
- 길이가 100인 배열을 만들고 각 요소의 값을 1 ~ 100으로 변경하자. 그 후 배열에 들어간 수 중 소수만 출력해보자. (소수란 1과 자신의 수로만 나누어 떨어지는 수이다. ex> 2,3,5,7..)
public class Array_배열문제_13 {
public static void main(String[] args){
//1~100 중에서 소수를 모두 출력
int[] arr = new int[100];
for(int i = 0; i < arr.length; i++){
arr[i] = i + 1;
}
for(int i = 0; i < arr.length; i++){
int cnt = 0;
for(int j = 1 ; j < arr[i] ; j++){
if(arr[i] % j == 0){
cnt++;
if(cnt > 1){
break;
}
}
}
if(cnt == 1){
System.out.println(arr[i]);
}
}
}
}
🍀 회고
- 선생님의 풀이와 비교해보면서 내가 작성한 코드가 얼마나 비효율적인지 느꼈고, 추후에 수정, 보수 등의 작업을 항상 고려하며 자동화된 코드를 짤 수 있도록 공부해야한다는 것을 알았다.(예:
new int[5]
로 설정하면 데이터가 바뀔 때마다 손을 대야함 ➡️ new. int[arr.length]
로 설정하면 데이터가 바뀌어도 자동으로 수정이 됨.) 좋은 코드를 짜기까지 엄청난 노력과 연습이 필요하겠지만... 실무자가 되려면 당연한거지 뭐 어쩌겠음? 공부나해라.
- 정식수업 전 선행학습이라기엔 수업 내용이 너무나 많지 않았나 싶다...😫 한 주 동안 선행학습을 하면서 느낀점 1. 나만 말하는 감자인가?🥔 왜 나빼고 다 이해하는 것 같지? 2. 쥐꼬리만큼이라도 예습하길 잘했다. 그리고 기왕 예습하는 거 좀 더 공부 많이 해서 수업에 들어갈 걸... 자바의 정석을 열심히 봤어야하는데 요즘 이런저런 일정이 많이 겹쳐서 계획한만큼 예습을 못한 것이 가장 아쉽다.
- 이제 정식수업이 시작되는데 컨디션 관리, 일정 관리 잘하자. 패스트캠퍼스 인강도 봐야하니 매일의 공부기록을 포스팅하긴 어려울 것 같지만.. 주간으로라도 정리해서 항상 복습하고 복기하도록 하자🔥🔥🔥