명품자바에센셜 p.101
배열이란 인덱스와 인텍스에 대응하는 데이터들로 이루어진 연속적인 자료구조로, 배열에는 같은 종류의 데이터들이 순차적으로 저장된다.
int intArray[];
intArray = new int[5];
위에 것은 배열 선언, 아래 것은 배열생성이다.
주의해야 할 점은 배열선언을 할 때 배열의 크기를 지정하면 안 된다.
int intArray[] = {4,3,2,1,0};
double intArray[] = {0.01, 0.02, 0.03, 0.04}
배열의 크기는 { } 사이에 나열된 값의 개수로 정해진다.
배열의 인덱스는 정수만 가능하다. 인덱스는 0부터 시작하며 마지막 원소의 인덱스는 (배열크기-1)이다. (음수 사용 불가, 인덱스 범위는 0-5이다.)
자바에서는 배열 공간과 레퍼런스의 변수가 분리되어 있기 때문에 생성된 배열에 대한 공유가 쉽게 이루어진다.
int intArray = new int[5];
int myArray = intArray;
이렇게 하면 myArray와 intArray가 같은 배열을 공유하게 된다.
만약 myArray에서 값을 수정하게 되면 intArray도 수정된 값을 사용하게 된다.
package test;
import java.util.Scanner;
public class array {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int intArray[]; //레퍼런스 선언
intArray = new int[5]; //배열 생성
int max=0; //max 초기화
System.out.println("양수 5개를 입력하세요");
for (int i =0; i<5; i++) {
intArray[i]=scanner.nextInt();
if(intArray[i]>max)
max = intArray[i];
}
System.out.println("가장 큰 수는 "+max+"입니다.");
scanner.close();
}
}
자바는 배열을 객체로 다룬다. length필드를 이용하면 프로그램에서 배열의 크기를 따로 관리할 필요가 없다. length필드를 이용하여 배열의 모든 값을 출력하는 코드는 다음과 같다.
for (int i =0; i<intArray.length; i++) //intArray배열크기만큼 루프돈다
System.out.println(intArray[i]);
package test;
import java.util.Scanner;
public class ArrayLength {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("5개의 정수를 입력하세요");
int intArray[] = new int[5]; //배열 선언&생성
double sum = 0.0;
for (int i=0; i<intArray.length; i++)
intArray[i] = scanner.nextInt(); //키보드에 입력받은 정수입력
for(int i=0; i<intArray.length; i++)
sum+=intArray[i]; //배열에 저장된 정수 값 더하기
System.out.println("평균은 "+ sum/intArray.length);
scanner.close();
}
}
for (변수 : 배열레퍼런스){
.. 반복작업문..
}
int[ ]배열의 합, String[ ] 문자열 출력
int [] n = {1,2,3,4,5};
int sum = 0;
for(int k :n) {
System.out.print(k+"");
sum += k;
}
System.out.println("합은 "+sum);
String f[] = {"사과","배","바나나","체리","딸기","포도"};
for(String s:f)
System.out.print(s+"");
}
}
예외(expection)란 실행 중 오동작이나 결과에 악영향을 미치는 예상치 못한 상황 발생을 말한다. 예외는 주로 사용자의 잘못된 입력이나 배열의 인덱스가 배열의 크기를 넘어가는 등의 사건에 의해 프로그램 시행 중 발생한다.
실행중 예외가 생겼다면 자바 플랫폼이 가장 먼저 알아채 자바 응용프로그램에 전달해 대응하게 한다. 만약 응용프로그램에 예외를 처리하는 코드가 작성되어있지 않다면 자바 플랫폼이 응용 프로그램을 강제로 종료 시킨다.
package test;
import java.util.Scanner;
public class DivideByZero {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dividend; // 나뉨수
int divisor; // 나눗수
System.out.print("나뉨수를 입력하세요:");
dividend = scanner.nextInt();
System.out.print("나눗수를 입력하세요:");
divisor = scanner.nextInt();
System.out.println(dividend+"를 "+divisor+"로 나누면 몫은 "
+dividend/divisor + "입니다" ); //만약 0으로 나뉜다면 예외 발생한다.
}
}
이렇게 빨간 글씨가 나타나는 것이 싫다면 방법이 있다.
package test;
import java.util.Scanner;
public class DivideByZero {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dividend;
int divisor;
System.out.print("나뉨수를 입력하세요:");
dividend = scanner.nextInt();
System.out.print("나눗수를 입력하세요:");
divisor = scanner.nextInt();
try {
System.out.println(dividend+"를 "+divisor+"로 나누면 몫은 "
+dividend/divisor + "입니다" );
}
catch(ArithmeticException e) { //ArithmeticException예외 처리 코드
System.out.println("0으로 나눌 수 없습니다.");
}
finally {
scanner.close();
}
}
}
ArithmeticException 예외가 발생하더라도 프로그램이 강제 종료되지 않고 정상 실행된다.