본문 바로가기
자바 Java

배열

by MEHAVING 2019. 9. 23.
반응형

배열

같은 타입의 변수들의 모임

변수를 개별적으로 선언해서 데이터를 처리할 수도 있지만 효율적이지 않다.

따라서 복수의 데이터를 모아서 취급할 때는 배열을 사용하면 데이터를 일괄적으로 처리할 수 있다.

 

 

*주의*

배열의 인덱스는 무조건 0 이상의 양수 파이썬의 리스트는 되는 -1로 불러오기 불가능

 

 

배열의 종류

1. 기본 타입

변수에 저장될 값이 실제  데이터 값 인 타입

 

ex)

1) int[] x = new int[10]; 배열 변수 선언과 동시에 배열 생성

배열 형식명 : 기존 자료형식에 대괄호만 붙힌 것 int[] / 자바에서 배열은 객체이기 때문에 new 연산자 이용하고 배열 객체에 이름을 부여해야 함

2) int[] x 배열 변수 선언

    x = new int[10]; int자료형 10개를 보관할 수 있는 배열 생성

 

3) int[] x = {1,2,3,4}; 배열 생성과 동시에 값 초기화

 

배열을 new 연산자로 생성하면 요소의 형에 대응한 초기값 ex) int =>0 String=>null으로 초기화 됨

 

학생 수 index를 가진 배열을 만들어 학생 성적 점수 입력하여 대입 후 평균 구하기

package 정보출력;
import java.util.Scanner; //입력받아오는 Scanner 사용할 것 import

public class Multipleof3 {
	public static void main(String[] args) {
		int total = 0; //total은 0으로 초기화
		
		System.out.print("학생 수를 입력하시오:");
        //Scanner객체 타입의 변수 sc에 System.in으로 받아올 새로운 Scanner객체 생성 후 대입
		Scanner sc = new Scanner(System.in);
        //sc객체의 System.in으로 받아올 학생수 int형 studentNum에 대입 
		int studentNum = sc.nextInt(); 
        //int형 배열 scores에 int[학생수]만큼의 새로운 배열 형성 후 대입
		int[] scores = new int[studentNum]; 
		
        //학생들 성적 입력하고 한줄 띄기
		System.out.println("학생들의 성적을 차례로 입력하시오"); 
		for (int i=0; i<studentNum; i++) {
        	//0부터 총 학생수-1만큼 반복 = 총 학생 수
			System.out.printf("학생[%d] 성적:", i);
            //입력한 점수를 scores[학생index]에 대입
			scores[i] = sc.nextInt(); 
		}
		
		for(int i=0; i<studentNum; i++)
			// 모든 scores를 total에 대입하면 총 점수
            total +=scores[i]; 
		
        //평균 성적은 전체 점수 / 학생수, %d 정수형
		System.out.printf("%d명 학생의 평균 성적은 %d입니다\n", studentNum, total/studentNum); 

	}

}

 

정수 입력받아 배열에 저장 후 3의 배수만 출력

package 실습1_1;
import java.util.Scanner;

public class ArrayEx {
		
	public static void main(String[] args) {
		//10개 index가진 정수형 배열 x 생성, main함수 안에 있어야 밑 반복문에서 x배열 사용 가능
		int[] x = new int[10]; 
		
		System.out.println("10개의 정수를 입력하시오>>");
		Scanner sc = new Scanner(System.in); // 새로운 Scanner객체 sc 생성
		for(int i=0; i<10; i++) { // i<x.length 라고 해줘도 됨
			x[i] = sc.nextInt(); 
			//nextInt는 띄어쓰기나 한칸 띄운 것 등을 기준으로 나눠 x[i]에 대입함
		}
		
		for(int i=0; i<10; i++) {
			if(x[i] % 3 == 0 ) {
				System.out.print(x[i]+" "); 
				//배열에 다시 넣어서 배열을 출력하려그랬는데 그게 아니라 print를 사용해 숫자를 가로로 쭉 나열해도 됨
			}
		}
		sc.close();
		}
	}

 

정수 5개 입력받아 저장, 배열 오름차순 정렬 후 출력

package 실습1_1;
import java.util.Scanner;
//예외처리
import java.util.InputMismatchException;

public class Practice3_3 {
    public static void main(String[] args) {
        int[] numbers = inputNumbers();
        sortNumbers(numbers);
        printNumbers(numbers);
    }
    private static int[] inputNumbers() {
        int[] nums = new int[5];
        Scanner scanner = new Scanner(System.in);
        System.out.println("5개의 정수를 입력하시오");
        for (int i = 0; i < 5; i++) {
            System.out.print((i+1)+"번째 정수=");
            try {
            	nums[i] = scanner.nextInt();
            } catch (InputMismatchException e) {
				System.out.println("정수가 아닙니다. 다시 입력하세요!");
				scanner.next(); // 입력 스트림에 있는 정수가 아닌 토큰을 버린다.
				i--; // 인덱스가 증가하지 않도록 미리 감소
				continue; // 다음 루프
			}
            
        }
        return nums;
    }
    private static void sortNumbers(int[] array) {
        // private 접근제어자를 사용하기 때문에 다른 곳에서 함수나 변수를 쓸 수 없다
    	//매개변수가 array라 array로 작성
        int tmp; // 순서를 정렬할 때마다 잠시 보관해둘 대체 변수
        for(int i=0; i<array.length; i++) {
        	for(int j=0; j<array.length; j++) {
        		if(array[i] < array[j]) {
        			tmp = array[j];
        			array[j] = array[i];
        			array[i] = tmp;
        		} 
        	}
        }
        
    }
    private static void printNumbers(int[] array) {
        //  배열 array를 출력한다 
    	System.out.println();
    	System.out.printf("정수의 배열순서\n");
    	for(int i=0; i<array.length; i++) {
    	System.out.printf("array[%d] = %d\n", i, array[i]);
    }
}
}

 

2. 레퍼런스 타입

변수에 저장될 값이 실제 데이터의 주소값인 타입

 

 

값 치환

int x = 100;

int y;

y = x; 고냥 값을 치환하는 것

 

레퍼런스 치환

int[] x = {1,2,3,4}; int형 배열 x 선언과 동시에 초기화, x가 가지고 있는 값은 결국 {1,2,3,4}의 주소값

int[] y; y라는 배열 선언은 되어있지만 생성되서 배열의 주소를 가르키는 일은 하지 않는 상태

y = x; 

 

 

배열 출력

System.out.println(배열) // 배열의 주소값 출력

주소값 형태로 출력

 

import java.util.Arrays; // toString 메소드 사용하기 위해 Arrays를 import 

System.out.println(Arrays.toString(배열));

[ 123, 456, 789 ] 배열 형태로 출력

반응형

'자바 Java' 카테고리의 다른 글

Static 키워드  (0) 2019.09.25
출력  (0) 2019.09.23
클래스 / 필드, 메서드, 객체-인스턴스 / getter-setter  (0) 2019.09.23
Main 함수의 매개변수 ( argc, argv)  (0) 2019.09.19
JS 웹프로그래밍 / window 객체  (0) 2019.09.18

댓글