Array



  • Array basic
  • 정렬(버블정렬)
  • 동적배열


1. 배열 선언과 초기화

배열의 선언

  int []arr = new int[5];  // int타입 배열의 선언  // 배열의 크기는 미리 선언해 두지 않아도 무방
  int []arr = new int{1,2,3,4,5}; // 배열의 선언과 초기화를 동시에


1.1 배열의 크기와 기본값

배열의 크기를 선언하고 값을 입력하지 않는것은 문제가 되지 않지만 배열의 크기를 넘어서는 값 입력은 불가능하다

  int []arr2 = new int[5];
  arr2 = {1,2,3,4,5,6}; // int형 5 크기의 배열에 값 6개 입력은 불가능


1.2 배열을 활용한 기본예제

배열을 활용한 성적 합산 입력받은 점수를 배열에 저장한 후 합산 배열에서 값을 하나씩 꺼내오는 방법

public static void main(String[] args) {

  // 성적 입력, 합산 출력
  // 학생수 입력받음

  int stu = 0;    // 학생수
  String score;   // 입력받은 점수 "/" 토큰으로 구분
  int[] score_arr = new int[3];   // 토큰으로 구분한 점수받음
  int total = 0;  
  Scanner input = new Scanner(System.in);

  System.out.println("학생수 입력 :");
  stu = input.nextInt();

  for (int i = 0; i < stu; i++) {   //입력한 학생수 만큼 반복
    System.out.println("점수 입력 :( / / )");
    score = input.next(); // 입력받은 점수를 score타입으로 전체받음
    StringTokenizer st = new StringTokenizer(score, "/");
    for (int j = 0; st.hasMoreTokens(); j++) {  //token이 false일 경우까지 반복
      score_arr[j] = Integer.parseInt(st.nextToken());
      total += score_arr[j];
    }
    System.out.println("total :" + total);
    System.out.println();
  }

}


추가

class를 활용한 성적합산 업그레이드


public class Student {

	private String name; // 접근성을 위한 private 지정, setter 생성
	private int kor, eng, math;
	private int total;  
	private double avg;

	public int calTotal() {  //메서드
		total = kor+eng+math;   //전역변수 // setter접근 필요
		return total;
	}

	public double calAverage() {
		avg = (double)total/3;
		return avg;
	}

	// 멤버변수 출력하기 위한 메서드
	public String toString() {
		return name+"학생 총점:" + total + "/평균 :" + avg;
	}

	// setter
	// this.name => this 를 통해 class내의 전역변수 name에 대입된다.
	//=======================================================================================================================


	public void setName(String name) {
		this.name = name;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public void setMath(int math) {
		this.math = math;
	}
}

import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) {

		// 배열 선언 + 객체 생성코드 각각 만들어줘야

		Scanner input = new Scanner(System.in);

		System.out.println("입력할 학생 수: ");
		int insert = input.nextInt();

		Student s[] = new Student[insert]; // 이 코드는 배열을 만든 코드일 뿐 class 객체를 만든것이 아니다. 따라서 객체생성 코드 만들어줘야함.
                                       // Student class 자료형의 배열이다 따라서, Student의 field를 사용한다 ??

		for (int i = 0; i < insert; i++) {
			s[i] = new Student(); // 객체 생성 코드 ******

			System.out.println(i+1 + "번 째 학생의 정보 입력 :(이름/kor/eng/math)");
			String str = input.next(); //여기서 nextLine 해버리면 첫번째 실행시 마지막 엔터값이 다음 실행의 첫번째로 넘어오기 때문에 next
			StringTokenizer st = new StringTokenizer(str,"/");


			while(st.hasMoreTokens()) {
				s[i].setName(st.nextToken());
				int a1 = Integer.parseInt(st.nextToken());
				s[i].setKor(a1);
        // 한줄로 축약 s[i].setKor(Integer.parseInt(st.nextToken());
				int a2 = Integer.parseInt(st.nextToken());
				s[i].setEng(a2);
				int a3 = Integer.parseInt(st.nextToken());
				s[i].setMath(a3);
			}

			s[i].calTotal();
			s[i].calAverage();

		}

		for (int i=0; i<insert; i++) {
			System.out.println(s[i].toString());
		}
	}
}


배열에서 가장 큰 값 구하기 알고리즘

public static void main(String[] args) {

  //가장 큰 값 구하기

  int arr[] = new int[] {22,50,50,7,25,35}; //

  int max = arr[0];   // 첫번째 값 기준

  for (int i = 1; i < arr.length; i++) {  // 배열의 크기만큼 반복  //단, 첫번째값이 기준값이므로 두번째 값부터 시작
    if (max <= arr[i]) {  
      max = arr[i];   // 기준값이 그 다음 값보다 작거나 같은 경우 다음 값을 기준값으로 변경
    }
  }System.out.println(max);
}


2. 정렬(버블정렬)


버블정렬 알고리즘을 활용하여 배열값 정렬 시키기 동적 배열 활용한 합계 출력

public static void main(String[] args) {

		// 버블정렬

		int arr[] = {22,15,13,7,35,25};

		for(int i=arr.length-1; i>0; i--) {
			for (int j = 0; j < i; j++) {  
				if (arr[j] > arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1]; // 맞바
					arr[j+1]=temp;  // 꾸기
				}
			}
		}

		for(int i=0; i < arr.length; i++) {
			System.out.print(arr[i]+"/");
		}
	}


3. 동적배열


배열이름.length와 배열이름[i].length의 차이를 구별

char[][] star = new char[4][]; // 동적 배열 선언

		// 값 지정
		for (int i = 0; i < star.length; i++) {
			star[i] = new char[i+1]; // 동적배열 star[i]의 크기 지정
			for (int j = 0; j < i+1; j++) { //star[i].length = 4
				star[i][j] = '*';
			}
		}

		// 출력
		for (int i = 0; i < star.length; i++) {
			for (int j = 0; j < star[i].length; j++) {
				System.out.print(star[i][j]);
			}
			System.out.println();
		}

//==============================================================================

// 동적 배열 합계 출력
int a[][] = new int[][] { { 3, -5, 12 }, { -2, 11, 2, -7 }, { 21, -21, -35, -93, -11 }, { 9, 14, 39, -98 } };

		int sum = 0;
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				sum+= a[i][j];
			}System.out.println(sum);
		}