배열
같은 타입의 변수들의 모임
변수를 개별적으로 선언해서 데이터를 처리할 수도 있지만 효율적이지 않다.
따라서 복수의 데이터를 모아서 취급할 때는 배열을 사용하면 데이터를 일괄적으로 처리할 수 있다.
*주의*
배열의 인덱스는 무조건 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 |
댓글