💻 Array(배열)
- Array(배열) : 다수의 같은 자료형 데이터를 여러개 저장할 수 있는 공간
📌 배열 선언 방법
- 배열의 선언
- 정수를 여러개 저장할 수 있는 배열 arr1 선언
int[] arr1;
- 선언된 배열을 생성
- 배열 생성 시 몇 개의 데이터를 저장할 지 결정
- arr1으로 선언된 배열을 3의 정수를 저장할 배열로 생성
arr1 = new int[3];
- 배열의 선언과 생성을 동시에 진행
- 정수 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문이 헷갈린다거나... 계속해서 앞에 풀었던 코드를 보면서 푼다거나... 개념이 정립되지 않고 문제만 푸는 느낌인데, 수업 후 개념서를 읽거나 관련된 포스팅을 자주 찾아봐야할 것 같다.