[배열 사용하는 방법]
1단계 : 배열 선언
형식) 자료형[] 배열명(배열이름) 또는 자료형 배열명[]
2단계 : 배열 메모리 생성(메모리 할당)
형식) 배열명 = new 자료형[배열의 크기]
3단계 : 배열 초기화 ==> 할당된 메모리 영역에 데이터를 저장
4단계 : 배열을 이용 ==> 데이터 처리(연산, 출력 등등)
[배열을 생성하는 방법 - 2가지]
- 1. new 키워드를 이용하여 배열 생성
- 2. 배열의 초기값을 이용하여 배열 생성
1. new 키워드를 이용하여 배열 생성
public class ArrayExam_01 {
public static void main(String[] args) {
// 1단계: 배열 선언 - 배열명 아무거나 가능
// 형식) 자료형[] 배열명(배열이름) 또는 자료형 배열명[]
int[] arr;
// 2단계 : 배열 메모리 생성(메모리 할당)
arr = new int[5]; // 자료형 크기가 정해지지 않아 heap 메모리(=직접적 접근X)
System.out.println("heap 메모리 주소 >>> " + arr);
// 3단계 : 배열 초기화 ==> 할당된 메모리 영역에 데이터를 저장
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
// arr[3] = "홍길동; // 자료형 오류 ==> int는 문자 선언X
arr[4] = 50;
// arr[5] = 60; // 실행 시 오류
// 배열의 연산
arr[2] += 100; // arr[2] = arr[2] + 100;
// 4단계 : 배열에 들어가 있는 데이터를 화면에 출력해 보자
System.out.println("arr[0] >>> " + arr[0]);
System.out.println("arr[1] >>> " + arr[1]);
System.out.println("arr[2] >>> " + arr[2]);
System.out.println("arr[3] >>> " + arr[3]);
System.out.println("arr[4] >>> " + arr[4]);
// 반복문 이용해서 짧게 작성 가능
System.out.println();
// 반복문을 이용하여 배열을 화면에 출력
for (int i = 0; i <= 4; i++) { // for (int i = 0; i < 5; i++)
System.out.println("arr["+i+"] >>> " + arr[i]);
}
}
}
[문제1] 5개의 정수를 저장할 배열을 만들고 키보드로 배열에 5개의 데이터를 저장한 후 해당 배열을 화면에 출력
import java.util.Scanner;
public class ArrayExam_02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 배열의 1단계 + 2단계 : 배열 선언 및 배열 메모리 생성
int[] score = new int[5];
// System.out.print("첫 번째 정수 입력 : ");
// score[0] = sc.nextInt();
//
// System.out.print("두 번째 정수 입력 : ");
// score[1] = sc.nextInt();
//
// System.out.print("세 번째 정수 입력 : ");
// score[2] = sc.nextInt();
//
// System.out.print("네 번째 정수 입력 : ");
// score[3] = sc.nextInt();
//
// System.out.print("다섯 번째 정수 입력 : ");
// score[4] = sc.nextInt();
// 반복문을 이용하여 5개의 정수를 배열에 저장
for(int i = 0; i < 5; i++) {
System.out.print((i+1) + "번째 정수 입력 : ");
score[i] = sc.nextInt();
}
// 배열에 저장된 데이터를 화면에 출력
for(int i = 0; i < 5; i++) {
System.out.println("score["+i+"] >>> " + score[i]);
}
sc.close();
}
}
단축 for문(개선된 for문, 향상된 for문)
for(자료형 변수명 : 배열명){
반복 실행 문장;
}
실행 방법
주의)
[문제2] 내가 여행 가고 싶은 5개 나라를 입력을 받아서 배열에 저장 후 배열에 저장된 나라를 화면에 보여주세요
public class ArrayExam_03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] n = new String[5];
for(int i=0; i<5; i++) {
System.out.print((i+1)+"번째 여행 가고 싶은 나라 이름 이력 : ");
n[i] = sc.next();
}
System.out.println();
for(int i=0; i<5; i++) {
System.out.println((i+1)+" : "+ n[i]);
System.out.print(n[i]+" \t"); // 옆으로 출력
}
// 단축 for문을 이용하여 배열을 출력해 보자
for(String k : n) {
System.out.println(k);
}
sc.close();
}
}
2. 배열의 초기값을 이용하여 배열 생성
public class ArrayExam_04 {
public static void main(String[] args) {
// 배열을 생성함과 동시에 초기값을 설정하여 배열 생성하는 방법
int[] arr1 = {10, 20, 30, 40, 50};
for(int k : arr1) {
System.out.print(k+"\t");
}
}
}
형식 ) 배열명.length
예) int size = arr.length;
import java.util.Scanner;
public class ArrayExam_05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[3];
System.out.println("arr 배열의 크기 >>> " + arr.length);
System.out.println();
for(int i=0; i<arr.length; i++) {
System.out.print((i+1)+"번째 정수 입력 >>> " );
arr[i] = sc.nextInt();
}
System.out.println();
for(int i=0; i<arr.length; i++) {
System.out.println("arr["+i+"] >>> "+arr[i]);
}
sc.close();
}
}
import java.util.Scanner;
public class ArrayExam_06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("배열의 크기를 입력하세요 : ");
// int size = sc.nextInt();
// String[] str = new String[size];
String[] str = new String[sc.nextInt()];
for(int i = 0; i<str.length; i++) {
System.out.print((i+1)+"번째 문자열 입력 : ");
str[i] = sc.next();
}
// 문자열 배열에 저장된 내용을 화면에 출력해 보자
for(int i = 0; i<str.length; i++) {
System.out.println("str["+i+"] >>> " + str[i]);
}
System.out.println();
// 문자열 배열에 저장된 문자열을 검색하여 보자
System.out.print("검색할 문자열을 입력해 주세요 : ");
String search = sc.next();
for(int i = 0; i<str.length; i++) {
if(search.equals(str[i])) {
System.out.println("찾은 인덱스 >>> str["+i+"]" );
System.out.println("찾은 문자열 >>> "+str[i]);
}
}
sc.close();
}
}
매우 중요한 개념임
배열의 이름은 heap 메모리 영역의 배열이 만들어진 곳의
시작 주소값을 가지고 있기 때문에 아래의 문장은 다른 배열의
배열명에 주소값을 복사해 주는 명령어
즉, 배열의 공유가 이러우짐
public class ArrayExam_07 {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print("문자열 배열 크기 입력 : ");
String[] str = new String[sc.nextInt()];
String[] strCopy = str; // 주소값 복사
// 따라서 str, strCopy 값이 같음
System.out.println("str 배열 주소값 >>> " + str);
System.out.println("strCopy 배열 주소값 >>> " + strCopy);
// strCopy 배열에 초기값을 할당
for(int i = 0; i < strCopy.length; i++) {
System.out.print((i+1)+"번째 문자열 입력 : ");
strCopy[i] = sc.next();
}
// str 배열에 있는 데이터를 출력해 보자
for(int i = 0 ; i<str.length; i++) {
System.out.println("str["+i+"] >>> " + str[i]);
}
sc.close();
}
}
문제 1. 키보드로 배열에 정수 데이터를 저장할 예정
import java.util.Scanner;
public class ArrayExam_08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수형 배열 크기 입력 : ");
int[] sort = new int[sc.nextInt()];
// 배열에 키보드로 데이터 저장
for (int i=0; i<sort.length; i++) {
System.out.print((i+1)+"번째 정수 입력 : ");
sort[i]=sc.nextInt();
}
// 내림차순으로 정렬
int temp = 0;
for (int i=0; i<sort.length; i++) {
for(int j=i+1; j<sort.length;j++) {
if(sort[j] > sort[i]){
temp = sort[i];
sort[i]=sort[j];
sort[j]=temp;
// = 기준으로 뒤의 값을 앞에 넣어줌
}
}
}
// 내림차순으로 정렬한 sort 배열을 화면에 출력
for (int i=0; i<sort.length; i++) {
System.out.print(sort[i] + "\t");
}
sc.close();
}
}
public class ArrayExam_09 {
public static void main(String[] args) {
// 다차원 배열 선언 및 메모리 생성
int[][] arr = new int[3][4]; // 3행 4열 2차원배열
int count = 10;
System.out.println("arr 배열 길이 >>> " + arr.length);
for(int i = 0; i < arr.length; i++) { // 행 (3개)
for(int j = 0; j < arr[i].length; j++) { // 열
arr[i][j] = count;
count += 10; // count = count + 10;
}
}
for(int i = 0; i < arr.length; i++) { // 행 (3개)
for(int j = 0; j < arr[i].length; j++) { // 열 (4개)
System.out.print("arr[" + i + "][" + j + "] >>> " + arr[i][j] + "\t");
}
System.out.println();
}
// for(int i = 0; i < arr.length; i++) { // 행 (3개)
//
// for(int j = 0; j < arr[i].length; j++) { // 열
//
// arr[i][j] = count;
//
// count += 10; // count = count + 10;
//
// System.out.print("arr[" + i + "][" + j + "] >>> " + arr[i][j] + "\t");
//
// }
// System.out.println();
// } --> 하나로도 축약 가능
}
}
java의 다차원 배열은 행마다 서로 다른 열을 가질 수 있음
행의 크기를 먼저 결정하고, 열의 크기는 가변적 할당을 하는 배열
가변 배열을 사용하는 이유 : 메모리 손실을 초기화하기 위함
public class ArrayExam_10 {
public static void main(String[] args) {
// 다차원 배열의 가변 배열 선언 및 메모리 생성
// 행 : 4행, 열 : 미지정
int[][] score = new int[4][];
// 가변 배열의 열 메모리 생성
score[0] = new int[3]; // 1행 3열
score[1] = new int[1]; // 2행 1열
score[2] = new int[2]; // 3행 2열
score[3] = new int[4]; // 4행 4열
int count = 10;
for(int i = 0; i < score.length; i++) {
for(int j = 0; j < score[i].length; j++) {
score[i][j] = count;
System.out.print(score[i][j] + "\t");
count += 10;
}
System.out.println();
}
}
}
최대값 / 최소값 알고리즘
[문제1] 키보드로 배열의 크기를 입력 받아서 생성된 배열요소 만큼
임의의 정 수를 키보드로 입력 받은 후 그 중 최대값과 최소값을
구하시오.
import java.util.Scanner;
public class Exam_01 {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print("배열의 크기를 입력하세요 : ");
int[] arr = new int[sc.nextInt()];
// 최대값 저장할 변수와 최소값 저장할 변수 선언
int max = 0, min = 999; //생각하는 가장 큰 값
for(int i = 0; i < arr.length; i++) {
System.out.print((i+1)+"번째 값 입력 : ");
arr[i]=sc.nextInt();
// 최대값
if(arr[i]>max) {
max = arr[i];
}
// 최소값
if(arr[i]<min) {
min = arr[i];
}
}
// int min = max;
//
// for(int i = 0; i < arr.length; i++) {
//
// if(arr[i]<min) {
// min = arr[i];
// }
// }
//
System.out.printf("max : %d, min : %d",max,min);
sc.close();
}
}

정렬 알고리즘
[문제2] 임의의 숫자 5개를 키보드로 입력 받아서 배열에 저장한 후, 내림차순으로 정렬하여 출력하시오.
import java.util.Scanner;
public class Exam_02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("다섯개 숫자 입력");
// 정부형 배열 선언 - 배열의 크기 5
int[] arr = new int[5];
// 배열에 키보드로 데이터를 입력하여 저장
for(int i = 0; i< arr.length; i++) {
arr[i]=sc.nextInt();
}
// 내림차순 정렬
int temp = 0;
for(int i = 0; i< arr.length; i++) {
for(int j = i+1; j<arr.length; j++) {
if(arr[j]>arr[i]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("****내림차순으로 정렬****");
// 내림차순으로 정렬된 arr 배열을 화면에 출력
for (int i=0; i<arr.length; i++) {
System.out.print(arr[i] + "\t");
}
sc.close();
}
}

배열 알고리즘
[문제3]) 키보드로 학생 수와 이름, 국어점수, 영어점수, 수학점수 배열에 저장 후 총점, 평균, 학점, 석차 배열에 성적을 처리한 후 화면에 아래와 같이 출력되도록 하세요.
import java.util.Scanner;
public class Exam_03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("학생 수를 입력하세요. : ");
// int studentCount = sc.nextInt();
// 학생 이름, 국어 점수, 영어 점수, 수학 점수, 총점, 평균, 학점, 순위 배열
String[] names = new String[sc.nextInt()]; // 이름 배열
int[] kor = new int[names.length]; // 국어점수 배열
int[] eng = new int[names.length]; // 영어점수 배열
int[] mat = new int[names.length]; // 수학점수 배열
int[] sum = new int[names.length]; // 총점 배열
double[] avg = new double[sum.length]; // 평균 배열
String[] grade = new String[avg.length]; // 학점 배열
int[] rank = new int[grade.length]; // 순위 배열
// 입력 받아 배열에 저장
for(int i=0; i<rank.length; i++) { // rank 아니어도 됨
System.out.print("이름 입력 : ");
names[i] = sc.next();
System.out.print("국어점수 입력 : ");
kor[i] = sc.nextInt();
System.out.print("영어점수 입력 : ");
eng[i] = sc.nextInt();
System.out.print("수학점수 입력 : ");
mat[i] = sc.nextInt();
// 총점과 평균 그리고 학점
// 총점
sum[i] = kor[i] + eng[i] + mat[i];
// 평균
avg[i] = sum[i]/3.0;
// 학점
if(avg[i]>=90) {
grade[i] = "A학점";
}else if(avg[i]>=80) {
grade[i] = "B학점";
}else if(avg[i]>=70) {
grade[i] = "C학점";
}else if(avg[i]>=70) {
grade[i] = "D학점";
}else {
grade[i] = "F학점";
}
// 석차(순위)
rank[i] = 1;
}
// 실제로 석차 구하기
for(int i = 0; i < rank.length; i++) { // rank 아니어도 됨
for(int j = 0; j < rank.length; j++) {
if(sum[j]>sum[i]) {
rank[i]++;
}
}
}
// 마지막으로 성정 출력
for(int i = 0; i < names.length; i++) { // rank 아니어도 됨
System.out.println(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
);
System.out.print("이 름 : "+names[i]+"\t");
System.out.print("총 점 : "+sum[i]+"점\t");
System.out.printf("평 균 : %.2f점\t",avg[i]);
System.out.print("학 점 : "+grade[i]+"\t");
System.out.print("순 위 : "+rank[i]+"등\t");
System.out.println();
}
sc.close();
}
}

[문제4]) 아래와 같은 결과가 나타나도록 코딩해 보세요

package exam;
public class Exam_04 {
public static void main(String[] args) {
// 1. 다차원 배열 선언 및 메모리 할당
int arr[][] = new int[5][5]; // 5행 5열
int count = 1;
// 5행 5열 다차원 배열에 데이터를 저장
for(int i = 0; i < arr.length; i++) { // 고정 - 행
for(int j=0; j<arr[i].length; j++) { // 값 변동 - 열
// arr[i][j]=count; count++;
arr[i][j]=count++;
// 한 줄로 축약 가능
// System.out.print(arr[i][j]+"\t");
// 한번에 출력하기 보단
}
//System.out.println();
}
// 저장된 다차원 배열을 화면에 출력 - 전체적으로 한번 더 출력해주면 좋음
for(int i = 0; i < arr.length; i++) { // 고정 - 행
for(int j=0; j<arr[i].length; j++) { // 값 변동 - 열
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}

1.
public class Exam_05 {
public static void main(String[] args) {
int arr[][] = new int[5][5];
int count = 1;
for(int i = 0; i<arr.length; i++) { // 고정 - 행
for(int j = 0; j<arr[i].length; j++) { // 변동 - 행
arr[i][j]= count++;
}
}
for(int i = 0; i<arr.length; i++) { // 고정 - 행
for(int j = 0; j<arr[i].length; j++) { // 변동 - 행
System.out.print(arr[i][j]+"\t");
// System.out.printf("%2df\t",arr[i][j]); - 간격 맞게 출력
}
System.out.println();
}
}
}
2.
public class Exam_05_02 {
public static void main(String[] args) {
int arr[][] = new int[5][5];
int count = 1;
for(int i = 0; i<arr.length; i++) {
count =(i+1);
for(int j = 0; j<arr[i].length; j++) {
arr[i][j]= count;
count += 5;
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}

다차원 배열의 가변배열 이용
public class Exam_06 {
public static void main(String[] args) {
int[][] arr = new int[5][];
int count = 1;
// 열 만들어주기
// arr[0]= new int[1]; // 1행 1열
// arr[1]= new int[2]; // 2행 2열
// arr[2]= new int[3]; // 3행 3열
// arr[3]= new int[4]; // 4행 4열
// arr[4]= new int[5]; // 5행 5열
// 반복문으로 만들기
for(int i = 0; i< arr.length; i++) {
arr[i] = new int[i+1];
}
// 가변배열에 데이터 저장
for(int i = 0; i<arr.length; i++) { // 행
for(int j = 0; j < arr[i].length; j++) { // 열
arr[i][j]=count++;
}
}
// 출력
for(int i = 0; i<arr.length; i++) { // 행
for(int j = 0; j < arr[i].length; j++) { // 열
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}