[STUDY] 231207 | Java | Array 복습, Random 복습, for-each문

Nimgnos·2023년 12월 9일
0

👾 STUDY

목록 보기
15/40
post-thumbnail

💻 Array(배열)

  • Array(배열) : 다수의 같은 자료형 데이터를 여러개 저장할 수 있는 공간
    • 배열은 하나의 자료형

📌 배열 선언 방법

  1. 배열의 선언
  • 정수를 여러개 저장할 수 있는 배열 arr1 선언
 int[] arr1;
  1. 선언된 배열을 생성
  • 배열 생성 시 몇 개의 데이터를 저장할 지 결정
  • arr1으로 선언된 배열을 3의 정수를 저장할 배열로 생성
arr1 = new int[3];
  1. 배열의 선언과 생성을 동시에 진행
  • 정수 5개 저장할 수 있는 배열 arr2 생성
    (모든 값이 0으로 초기화)
  • 실수를 6개 저장할 수 있는 배열 arr3를 생성
    (모든 값이 0.0으로 초기화)
  • 문자열을 3개 저장할 수 있는 배열 arr4를 생성
    (모든 값이 null로 초기화)
int[] arr2 = new int[5]; //정수
double[] arr3 = new double[6]; //실수
String[] arr4 = new String[3]; //문자열
  • 배열의 길이(크기) : .length
  • 배열의 출력
    • 배열의 각 요소를 출력해야 함. 배열 자체를 출력하면 이상값이 출력됨.
    • 배열의 모든 요소 출력(예시)
//배열 출력은 출력의 각 요소를 출력해야함.
//배열의 1번재 요소 출력
System.out.println(arr1[1]);
//System.out.println(arr1[3]); 오류!
//실수를 100개 저장할 수 있는 배열 arr2 생성
double[] arr2 = new double[100];
//배열의 모든 요소 출력 0~99
for (int i = 0; i < 100; i++){
System.out.println(arr2[i]);
}
  • 특정 값으로 초기화된 배열의 생성
    • 특정값으로 초기화된 배열 생성 시 주의사항: 배열 선언 및 생성의 별도 시행이 불가함!
//특정 값으로 초기화된 배열을 생성하는 방법
int[] arr = {1, 2, 3, 4, 5};
//단, 특정값으로 초기화된 배열 생성 시 주의사항
// int[] arr1;
// arr1 = {1, 2, 3}; 선언 및 생성의 별도 시행 불가 
  • 배열 요소의 값 변경하기
arr[2] = 5;
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}

💻 for-each문

  • 배열의 모든 요소를 출력할 때만 사용한다.
    • 첫번째 값: 반복되는 데이터에서 차례대로 읽은 데이터
    • 두번째 값: 반복을 돌릴 변수

📌 for-each문의 구조

for (type 변수명: iterate) {
    body-of-loop
}
  • iterate는 루프를 돌릴 객체이고 iterate 객체에서 한 개씩 순차적으로 변수명에 대입되어 for 문이 수행된다.
  • iterate에 사용할 수 있는 자료형은 루프를 돌릴 수 있는 자료형(배열이나 ArrayList 등)만 가능하다.
  • 변수명의 type(자료형)은 iterate 객체에 포함된 자료형과 일치해야 한다.
  • for each 문은 따로 반복 횟수를 명시적으로 주는 것이 불가능하고, 한 단계씩 순차적으로 반복할 때만 사용이 가능하다는 제약이 있다.

💻 Math.random()

  • 난수/랜덤숫자 생성에 사용되는 함수
  • Math 클래스는 수학과 관련된 상수들과 메소드들이 구현되어 있는 클래스이다. 그중 랜덤 숫자를 생성할 때 사용되는 메소드가 random() 메소드이며, static으로 구현되어 있다.
  • 0.0 이상, 1.0 미만의 랜덤한 double(실수)형 값 하나를 생성하여 반환하여 준다.
    • 0.0 ≤  (Math.random()의 반환값) < 1.0
public class Random {
    public static void main(String[] args) {
        //Math.random()-> 0.0 <= x < 1.0 실수
        //1~20(둘 다 포함) 중 랜덤한 정수
        //1.0 <= x < 21.0  실수
        double rand = (int)(Math.random() * 20 + 1);
        System.out.println(rand);
    }
}

📌 Array, for-each문 예제

예제 1.

  • 정수를 10개 저장할 수 있는 배열을 생성, 모든 요소의 값을 출력하시오.
    • 풀이 및 결과
public class test5 {
    public static void main(String[] args) {
        int [] arr = new int[10];
        for(int i = 0; i < arr.length; i++){
            System.out.println(arr[i]);
        }
        int[] array = {1, 2, 3, 4, 5};
        for(int e : array){
            System.out.println(e);
        }
        double[] array2 = {1.1, 2.2, 3.3};
        for(double e : array2){
            System.out.println(e);
        }
        String[] array3 = {"java", "python", "c++"};
        for(String e : array3){
            System.out.println(e);
        }
    }
}

예제 2.

  • 정수를 10개 저장할 수 있는 배열을 생성, 모든 요소에 3을 넣고 출력하여 확인하시오.
    • 풀이 및 결과
public class test6 {
    public static void main(String[] args) {
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++){
            arr[i] = 3;
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        //for-each문으로 실행
        for(int e : arr){
            System.out.print(e + " ");
        }
    }
}

예제 3.

  • 정수를 10개 저장할 수 있는 배열을 생성, 각 요소에 1 ~ 10까지 차례대로 넣고 출력하시오.
    • 풀이 및 결과
public class test7 {
    public static void main(String[] args) {
        int[] arr = new int[10];
        for(int i = 0; i < arr.length; i++){
            arr[i] = i + 1;
            System.out.println(arr[i]);
        }
        //for-each문으로 출력
        for(int e : arr){
            System.out.println(e);
        }
    }
}

예제 4.

  • 1,5,7을 초기값으로 저장하고 있는 배열을 만들고, 배열의 모든 요소의 합을 출력하시오.
    • 풀이 및 결과
public class test8 {
    public static void main(String[] args) {
        //
        int[] arr = {1, 5, 7};
        int sum = 0;
        for(int i = 0; i < arr.length; i++){
            sum = sum + arr[i];
    }
        System.out.println(sum);
	}
}

예제 5.

  • 1, 2, 3, 4, 5, 6 ,7 ,8 로 초기화된 배열을 만들고, 배열의 요소 중 짝수의 개수를 구하는 프로그램을 만들어라.
    • 풀이 및 결과
public class test10 {
    public static void main(String[] args) {
        //
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
        int cnt = 0;
        for(int i = 0; i < arr.length; i++){
            if(i % 2 == 0){
                cnt = cnt + 1;
            }
        }
        ////for-each문
        for(int e : arr){
            if(e % 2 == 0){
                cnt++;
            }
        }
        System.out.println(cnt + "개");
    }
}

예제 6.

  • scanner로 정수 하나를 입력받아, 입력받은 정수만큼의 길이를 갖는 배열을 생성하고 배열 각 요소에 1 ~ 입력 받은 정수로 값을 저장한다. 예를 들어 5를 입력했으면 길이가 5인 배열을 만들고 각 요소에 1,2,3,4,5가 들어가야 한다. 그 후 배열에 들어간 수의 평균을 출력해보자.
    • 풀이 및 결과
public class test11 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("숫자를 입력하시오.");
        int num = sc.nextInt();
        int[] arr = new int[num];
        double arg = 0;
        for(int i = 0; i < arr.length; i++){
            arr[i] = i + 1;
        }
        for(int i= 0; i < arr.length; i++){
            arg = i ;
            System.out.println(arg);
        }
    }
}

예제 7.

  • scanner로 정수 하나를 입력받아, 입력받은 정수만큼의 길이를 갖는 배열을 생성하고 배열에 각 요소에 '1 ~ 입력 받은 정수'로 값을 저장한다. 예를 들어 5를 입력했으면 길이가 5인 배열을 만들고 각 요소에 1, 2, 3, 4, 5가 들어가야 한다. 그 후 배열에 들어간 수의 평균을 출력해보자.
    • 풀이 및 결과
public class test12 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] arr = new int[num]; //num=5
        for(int i = 0; i < arr.length; i++){
            arr[i] = i + 1;
        }
        System.out.println("배열에 저장된 값 : ");
        for(int e : arr){
            System.out.print(e + " ");
        }
        System.out.println( );
        int sum = 0;
        for(int i = 0; i < arr.length; i++){
            sum = sum + arr[i];
        }
        double avg = sum / (double)arr.length;
        //정수와 정수끼리의 계산->실수로 출력x
        //둘 중 하나 실수로 바꿔야 함
        System.out.println(avg);
    }
}

예제 8.

  • 초기값을 5,4,3,2,1로 갖는 배열 arr을 만들자. 그리고 길이가 5인 새로운 정수형 배열 newArr을 만든 후 arr이 가진 값을 newArr로 복사하여 보자. 복사 결과는 출력을 통해 확인한다.
    • 풀이 및 결과
public class test14 {
    public static void main(String[] args) {
        int[] arr = {5, 4, 3, 2, 1};
        int[] newArr = new int[arr.length];
        for(int i = 0; i < arr.length; i++){
            newArr[i] = arr[i];
        }
        for (int i = 0; i < arr.length; i++){
            System.out.println(newArr[i]);
        }
    }
}

예제 9.

  • 1,2,3을 초기값으로 갖는 배열 arr1과 4,5,6을 초기값으로 갖는 arr2를 만든다. 그 후 새로운 배열 newArr을 만들어 arr1과 arr2의 모든 값을 복사해보자. 복사 후 newArr은 1, 2, 3, 4, 5, 6을 가져야 한다.
    • 풀이 및 결과
public class test15 {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {4, 5, 6};
        int[] newArr = new int[arr1.length + arr2.length];
        for(int i = 0; i < arr1.length; i++){
            newArr[i] = arr1[i];
        }
        for(int i = 0; i < arr2.length; i++){
            newArr[arr1.length + i] = arr2[i];
        }
        for(int i = 0; i < newArr.length; i++){
            System.out.print(newArr[i] + " ");
        }
    }
}

예제 10.

  • 간단한 로또번호 생성기를 만들어보자. 길이가 6인 정수형 배열을 생성하고, 배열의 모든 요소에 1에서 45까지의 랜덤한 정수를 넣어보자. 그리고 배열의 모든 요소를 출력해보자.
    • 풀이 및 결과
public class test17 {
    public static void main(String[] args) {
        // (1과 45를 포함하고, 중복값은 허용한다.)
        int[] arr = new int[6];
        for (int i = 0; i < arr.length; i++) {
            int rand = (int) (Math.random() * 45 + 1);
            arr[i] = rand;
        }
        for (int e : arr) {
            System.out.println(e);
        }
    }
}

예제 11.

  • 1, 5, 3, 8, 2를 초기값으로 갖는 배열을 생성하고 해당 배열에서 최대값을 출력하여라.
    • 풀이 및 결과
public class test18 {
    public static void main(String[] args) {
       int[] arr = {1, 5, 3, 8, 2};
        int max = arr[0];
        for(int i = 0; i < arr.length; i++){
            if(arr[i] > max){
                max = arr[i];
            }
        }
        System.out.println("최대값 : " + max);
    }
}

🍀 회고

  • 분명 지난주에 배웠던 배열인데 왜 이렇게 어렵지...?😢 물론 지난주 아예 아무것도 모를 때보다는 문제를 좀 더 풀 수 있게 되긴 했지만, 많은 양을 한 번에 익히다보니 코드가 이것저것 섞이는 느낌이다. 예제를 풀면서 for문과 while문이 헷갈린다거나... 계속해서 앞에 풀었던 코드를 보면서 푼다거나... 개념이 정립되지 않고 문제만 푸는 느낌인데, 수업 후 개념서를 읽거나 관련된 포스팅을 자주 찾아봐야할 것 같다.
profile
먹고 기도하고 코딩하라

0개의 댓글