Array
비슷한 변수를 여러 개 만들어야 할 때 유용하게 사용된다.
public class Array1 {
public static void main(String[] args) {
int student1 = 90;
int student2 = 80;
int student3 = 70;
int student4 = 60;
System.out.println("학생1 점수: " + student1);
System.out.println("학생2 점수: " + student2);
System.out.println("학생3 점수: " + student3);
System.out.println("학생4 점수: " + student4);
}
}
이런식의 코드가 있을 때 변수를 하나씩 생성하고, 학생 뒤의 숫자와 출력할 변수를 하나하나 바꾸기가 귀찮음. 반복문으로 할 수 있지 않을까? ⇒ 못함
그래서 배열이란 것을 쓰면 편리하게 이용할 수 있음
public class Array1 {
public static void main(String[] args) {
int[] students; //배열 변수 선언
students = new int[4]; //배열의 크기를 4로 초기화
//변수 값 대입
students[0] = 90;
students[1] = 80;
students[2] = 70;
students[3] = 60;
//변수 값 사용
System.out.println("학생1 점수: " + students[0]);
System.out.println("학생2 점수: " + students[1]);
System.out.println("학생3 점수: " + students[2]);
System.out.println("학생4 점수: " + students[3]);
}
}
위의 코드와 같은 결과값이 출력됨
int[] students;
배열 변수를 선언한 것이지 배열 안은 비어있음new int[숫자]
를 하게되면 새로운 배열을 숫자 크기만큼으로 만든다는 뜻이다.(배열의 크기만큼 메모리 확보) 내부값은 0으로 자동으로 초기화됨boolean
은false
,String
은null
로 초기화 된다.students
는 배열이 생성된 위치를 나타낸다. (메모리 주소)
배열 사용
인덱스
: 배열은 0부터 시작한다. (인덱스는 0부터 시작한다.)
ex. 배열의 크기가 5라면 인덱스는 0, 1, 2, 3, 4까지 존재한다.
배열에 값 대입
배열명[인덱스] = 값;
기본형 vs 참조형
- 기본형
- 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
- 이때까지 우리가 사용했던 변수 개념 (
int a = 5;
) - 선언과 동시에 사이즈가 정적으로 정해짐
- 참조형
- 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입
- ex. 배열, 객체 (
int[] students
)- students가 저장된 배열의 참조를 저장하는 것
- 동적으로 크기가 변할 수 있음
배열 리펙토링
리펙토링 : 코드를 개선하는 것
public class Array1 {
public static void main(String[] args) {
int[] students; //배열 변수 선언
students = new int[4]; //배열의 크기를 4로 초기화
//변수 값 대입
students[0] = 90;
students[1] = 80;
students[2] = 70;
students[3] = 60;
//변수 값 사용
System.out.println("학생1 점수: " + students[0]);
System.out.println("학생2 점수: " + students[1]);
System.out.println("학생3 점수: " + students[2]);
System.out.println("학생4 점수: " + students[3]);
}
}
⬇️
public class Array1 {
public static void main(String[] args) {
int[] students; //배열 변수 선언
students = new int[4]; //배열의 크기를 4로 초기화
//변수 값 대입
students[0] = 90;
students[1] = 80;
students[2] = 70;
students[3] = 60;
//변수 값 사용
for(int i=0; i < students.length; i++){
System.out.println("학생" + (i+1) + " 점수 : " + students[i]);
}
}
}
출력은 똑같지만 간단하게 코드가 개선되었다.
students.length
: 배열의 길이를 제공해줌
⬇️
public class Array1 {
public static void main(String[] args) {
int[] students = new int[]{90, 80, 70, 60};
//int[] students = {90, 80, 70, 60}; 윗줄과 같은 코드임
//변수 값 사용
for(int i=0; i < students.length; i++){
System.out.println("학생" + (i+1) + " 점수 : " + students[i]);
}
}
}
배열 선언과 동시에 초기화 진행
오류
int[] students;
students = {90, 80, 70, 60};
이렇게 나눠서 적을 때에 new int[]
는 생략하면 안됨
이제 배열의 값을 추가해도 나머지 코드를 변경할 필요가 없다. 알아서 크기가 늘어난다~!
2차원 배열
생성
int[][] arr = new int[크기][크기];
행(row), 열(column)
public class ArrayDi0 {
public static void main(String[] args) {
int[][] arr = new int[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
System.out.print(arr[0][0] + " ");
System.out.print(arr[0][1] + " ");
System.out.print(arr[0][2] + " ");
System.out.println();
System.out.print(arr[1][0] + " ");
System.out.print(arr[1][1] + " ");
System.out.print(arr[1][2] + " ");
}
}
⬇️리펙토링
public class ArrayDi0 {
public static void main(String[] args) {
int[][] arr = new int[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
for(int row = 0; row < 2; row++){ //행 출력
for(int col = 0; col < 3; col++) { //열 출력
System.out.print(arr[row][col] + " ");
}
System.out.println();
}
}
}
⬇️
2차원 배열 선언 부분 수정
public class ArrayDi0 {
public static void main(String[] args) {
int[][] arr = new int[][]{
{1,2,3},
{4,5,6}
}; //행: 2, 열: 3
for(int row = 0; row < 2; row++){
for(int col = 0; col < 3; col++) {
System.out.print(arr[row][col] + " ");
}
System.out.println();
}
}
}
new int[][]
생략 가능
⬇️
반복할 때 배열의 크기만큼 반복되도록 length
사용
public class ArrayDi0 {
public static void main(String[] args) {
int[][] arr = new int[][]{
{1,2,3},
{4,5,6}
}; //행: 2, 열: 3
for(int row = 0; row< arr.length; row++){
for(int col = 0; col< arr[row].length; col++) {
System.out.print(arr[row][col] + " ");
}
System.out.println();
}
}
}
for-each문
public class EnhancedFor1 {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
//일반 for문
for(int i=0; i < numbers.length; i++){
int number = numbers[i];
System.out.println(number);
}
//for-each문
for(int number : numbers){
System.out.println(number);
}
}
}
iter
단축키 : for-each문 만들어주는 단축키
for-each문을 사용할 수 없는 경우
: 인덱스 값이 필요할 때는 사용X
for(int i=0; i<number.length; i++){
System.out.println("number" + i + "번의 결과는 " + number[i]);
}
이런 식으로 i값(인덱스값)이 필요한 경우에는 for-each를 사용할 수 없다.
예제
배열을 사용해서 개선하자.
public class ArrayEx1 {
public static void main(String[] args) {
int student1 = 90;
int student2 = 80;
int student3 = 70;
int student4 = 60;
int student5 = 50;
int total = student1 + student2 + student3 + student4 + student5;
double average = (double) total / 5;
System.out.println("점수 총합: " + total);
System.out.println("점수 평균: " + average);
}
}
⬇️
public class ex {
public static void main(String[] args) {
int[] students = {90, 80, 70, 60, 50};
int total = 0;
for (int student : students) {
total += student;
}
double avg = (double) total/students.length;
System.out.println("점수 총합 : " + total);
System.out.println("점수 평균 : " + avg);
}
}
입력 받은 값 배열에 넣고 출력
import java.util.Scanner;
public class ex {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] students= new int[5];
System.out.println("5개의 정수를 입력하세요: ");
for(int i=0; i<5; i++) {
students[i] = scanner.nextInt();
}
System.out.println("출력");
for(int i=0; i<students.length; i++){
System.out.print(students[i]);
if(i < students.length-1){
System.out.print(", ");
}
}
}
}
배열 역순 출력
import java.util.Scanner;
public class ex {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] students= new int[5];
System.out.println("5개의 정수를 입력하세요: ");
for(int i=0; i<5; i++) {
students[i] = scanner.nextInt();
}
System.out.println("입력한 정수 역순으로 출력");
for(int i = students.length - 1; i >= 0; i--){
System.out.print(students[i]);
if(i > 0){
System.out.print(", ");
}
}
}
}
입력 받은 개수만큼 수를 입력받고 합계와 평균 구하기
import java.util.Scanner;
public class ex {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("입력받을 숫자의 개수를 입력하세요: ");
int cnt = scanner.nextInt();
int[] students= new int[cnt];
System.out.println(cnt + "개의 정수를 입력하세요: ");
for(int i=0; i<cnt; i++) {
students[i] = scanner.nextInt();
}
int sum = 0;
for(int output : students){
sum += output;
}
System.out.println("입력한 정수의 합계: " + sum);
System.out.println("입력한 정수의 평균: " + (double)sum/students.length);
}
}
2차원 배열 학생들 점수 합계, 평균 구하기
import java.util.Scanner;
public class ex {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] students = new int[4][3];
String[] subject = {"국어", "수학", "영어"};
int[] sum = new int[4];
double avg = 0;
for(int i=0; i < students.length; i++) {
System.out.println((i+1) + "번 학생의 성적을 입력하세요: ");
for(int j=0; j < students[i].length; j++){
System.out.print(subject[j] +" 성적: ");
students[i][j] = scanner.nextInt();
sum[i] += students[i][j];
}
}
for(int i=0; i < students.length; i++){
System.out.println((i+1) + "번 학생의 총점: " + sum[i] + ", 평균: " + (double)sum[i]/3);
}
}
}
'Java를 자바' 카테고리의 다른 글
JDK 설치하기, 환경변수 설정 (0) | 2024.06.19 |
---|---|
메서드(Method) (0) | 2024.05.06 |
[Java] Scanner(사용자 입력받기) (0) | 2024.04.30 |
[Java] 형변환 (0) | 2024.04.11 |
[Java] 스코프 (2) | 2024.04.11 |