//10, 20, 30, 50, 3, 60, -1값을 배열에 저장하고 아래 문제를 풀어보세요
int[] arr = {10, 20, 30, 50, 3, 60, -3};
문제1. arr 배열 중에서 인덱스가 1인 곳의 값을 출력해보자.
문제2. arr 배열 중에서 값이 60인 곳의 인덱스를 출력해보자.
문제3. arr 배열의 인덱스가 3인곳은 출력하지 말고, 나머지만 출력해보자.
package ch05;
public class Prac_arr {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 50, 3, 60, -3}; //방법 1
/ int[] arr = new int[7]; 방법2
arr[0]=10;
arr[1]=20;
arr[2]=30;
arr[3]=50;
arr[4]=3;
arr[5]=60;
arr[6]=-3; /
// 문제1. arr 배열 중에서 인덱스가 1인 곳의 값을 출력해보자.
System.out.println(arr[1]);
// 문제2. arr 배열 중에서 값이 60인 곳의 인덱스를 출력해보자.
for(int i=0; i<arr.length; i++) {
if(arr[i]==60) {
System.out.println(arr[i]);
}System.out.println();
}
// 문제3. arr 배열의 인덱스가 3인곳은 출력하지 말고, 나머지만 출력해보자.
for(int i=0; i<arr.length; i++) {
if(arr[i]==arr[3]) {
continue;
}else {
System.out.println(arr[i]);
}
}
}
}
public static void main(String[] args) { }
에서 String[] args가 가지는 의미 : 위 코드에서 java 명령어로 실행하면 JVM은 길이가 0인 String 배열을 먼저 생성하고,
args는 main()메소드 호출 시 전달하는 역할을 합니다.
import ch02.IntergerLiteralExample;
public class MainStringAgument {
public static void main(String[] args) {
if(args.length !=2) {
System.out.println("값의 수가 부족합니다.");
System.exit(0);
}
String strNum1 = args[0];
String strNum2 = args[1];
int num1 = Integer.parseInt(strNum1);
int num2 = Integer.parseInt(strNum2);
int result = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + result);
}
}
Program arguments에 값 입력하고 Apply(적용) 누른뒤 Run하면 나타나는 결과
null 값을 가졌다가 arguments를 바꾸면 위와 같이 값이 들어간다.
-호출
메서드명();
package ch05;
public class ArrayCreateByVlaueList {
public static void main(String[] args) {
//int[] scores = {83,92,87}; 가능
int[] scores; //scores라는 배열을 선언
// scores = {83,92,87}; //초기화와 선언 동시에 불가능
scores = new int[] {83,90,87};
int sum1 = 0;
for(int i=0; i<scores.length;i++ ) {
//sum1 = sum1 + scores[i]);
sum1 += scores[i];
}
System.out.println("총합 : " + sum1);
//add 메소드 호출
//int sum2=add(83,92,87);
int sum2 = add(new int[] { 83, 92, 87});
System.out.println("총합 : " + sum2);
}// main 메소드 끝
// add 메소드 선언
// public static int add(int num1, int num2, int num3) {
public static int add(int[] score){
int sum = 0;
for(int i=0; i<score.length; i++) {
sum += score[i];
}
return sum; // sum값은 호출한곳으로 보냄 sum2로 보냄.
}
}
1차원인 아닌 배열 즉 2차원 이상의 배열을 다차원 배열이라고 합니다.
2차원 배열은 수학의 행렬을 떠올리면 되는데 가로 인덱스와 세로 인덱스를 사용합니다.
ex)
int[] score = new int[5]; // 1차원 배열
int score[] = new int[5]; // 1차원 배열
score1[0]=10;
score1[1]=20;
score1[2]=30;
score1[3]=40;
score1[4]=50;
int score[] = {10, 20, 30, 40, 50};
int[][] score2 = new int[5][3]; //2차원 배열 5행(가로 5줄) 3열(세로 3칸)
int score2[][] = new int[5][3]; //2차원 배열
int[] score2[] = new int[5][3]; //2차원 배열
첫번째 2차원 배열 주는법
score2[0][0] = 10; score2[0][1] = 20; score2[0][2] = 30;
score2[1][0] = 40; score2[1][1]= 50; score2[1][2] = 60;
score2[2][0] = 70; score2[2][1] = 80; score2[2][2] = 90;
score2[3][0] = 70; score2[3][1] = 80; score2[3][2] = 90;
score2[4][0] = 70; score2[4][1] = 80; score2[4][2] = 90;
두번째 2차원 배열 주는법
int score2[][] = {
{10,20,30},
{40,50,60},
{70,80,90}
{100,110,120}
{130,140,150}
}
public class ArrayInArrayExample {
public static void main(String[] args) {
// int[][] score2 = new int[5][3];
// int score2[][] = new int[5][3];
// int[] score2[] = new int[5][3];
// score2[0][0] = 10; score2[0][1] = 20; score2[0][2] = 30;
// score2[1][0] = 40; score2[1][1]= 50; score2[1][2] = 60;
// score2[2][0] = 70; score2[2][1] = 80; score2[2][2] = 90;
// score2[3][0] = 70; score2[3][1] = 80; score2[3][2] = 90;
// score2[4][0] = 70; score2[4][1] = 80; score2[4][2] = 90;
int score2[][] = {
{10,20,30},
{40,50,60},
{70,80,90},
{100,110,120},
{130,140,150}
};
for(int i=0; i<5; i++) {
for(int j=0; j<3; j++) {
System.out.println("score2["+i+"]"+"["+j+"] : "+score2[i][j]);
}System.out.println();
}
int[][] englishScores = new int[2][];
englishScores[0] = new int[2];
englishScores[1] = new int[3];
for(int i = 0; i<englishScores.length; i++) {
for(int k = 0; k <englishScores[i].length; k++) {
System.out.println("englishScores["+i+"]["+k+"]="+englishScores[i][k]);
}System.out.println();
}System.out.println();
int[][] javaScores = { {95, 80}, {92, 96, 80} };
for(int i=0; i<javaScores.length; i++) {
for(int k=0; k<javaScores[i].length; k++) {
System.out.println("javaScores["+i+"]["+k+"]="
+javaScores[i][k]);
}
}
}
}
ex) 배열 행과 열 입력해서 확인하는 예제
import java.util.Scanner;
public class ArrayInArrayExample_prac {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x, y;
System.out.println("array[x][y] x(행_가로)에 넣을 값 : ");
x = sc.nextInt();
System.out.println("array[x][y] y(열_세로)에 넣을 값 : ");
y = sc.nextInt();
int[][] array = new int[x][y];
for(x=0; x<array.length; x++) {
for(y=0; y<array[x].length; y++) {
System.out.print("array["+x+"]"+"["+y+"] | ");
}System.out.println();
}
}
}
ex)
package ch05;
import java.util.Scanner;
public class ArrayInArrayExample_prac {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x, y;
System.out.println("array[x][y] x(행_가로)에 넣을 값 : ");
x = sc.nextInt();
System.out.println("array[x][y] y(열_세로)에 넣을 값 : ");
y = sc.nextInt();
int[][] array = new int[x][y];
for(x=0; x<array.length; x++) {
for(y=0; y<array[x].length; y++) {
// array[x][y] 배열에 값을 넣어서 저장
System.out.println("배열에 저장할 값을 입력해주세요 : ");
array[x][y] = sc.nextInt();
}System.out.println();
}
for(x=0; x<array.length; x++) {
for(y=0; y<array[x].length; y++) {
System.out.print("array["+x+"]"+"["+y+"] : " + array[x][y]+ " | ");
}System.out.println();
}
}
}
기본타입(byte, char, short, int, long, float, double, boolean) 배열은 각 항목에 직접 갖고 있지만,
참조 타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 가지고 있습니다.
String은 클래스이므로 String[] 배열은 각 항목에 문자열이 아니라, String 객체의 번지를 가지고 있습니다.
즉 String[] 배열은 객체를 참조하게 됩니다.
package ch05;
public class ArrayReferenceObjectExample {
public static void main(String[] args) {
String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "Java";
strArray[2] = new String("Java");
System.out.println(strArray[0] == strArray[1]); // true (같은 객체를 참조)
System.out.println(strArray[0] == strArray[2]); // false (다른 객체를 참조)
System.out.println(strArray[0].equals(strArray[1])); // true (같은 객체를 참조)
//.equals는 배열의 내용 값을 비교해서 같으면 true 아니면 false를 출력함
}
}
배열은 한 번 생성하면 크기를 변경할 수 없기 때문에더 많은 저장 공간이 필요하다면 더 클 배열을 새로 만들고
이전 배열로부터 항목 값들을 복사해야 합니다. 배열 간의 항목 값들을 복사하려면 for문을 사용하거나 System.arraycopy() 메소드를 사용합니다.
for문으로 배열을 복사하는 코드는 다음과 같습니다.
ex)
public class ArrayCopyByForExample {
public static void main(String[] args) {
int[] oldIntArray = {1,2,3};
int[] newIntArray = new int[5];
for(int i=0; i<oldIntArray.length; i++) {
newIntArray[i] = oldIntArray[i];
}
for(int i=0; i<newIntArray.length; i++) {
System.out.print(newIntArray[i] + ", ");
}
}
}
System.arraycopy 속성
System.arraycopy(src, srcPos, dest, destPos, length);
src : 원본배열
srcPos : 원본배열 시작인덱스
dest : 복사본배열
destPos : 복사본 배열 시작 인덱스
length : 길이
public class ArrayCopyExample {
public static void main(String[] args) {
String[] oldStrArray= {"java","array","copy"};
String[] newStrArray = new String[5];
// arrayCopy 메소드를 활용해서 복사
// 원본배열, 원본배열 시작인덱스, 복사본배열 , 복사본 배열 시작 인덱스, 길이
System.arraycopy(oldStrArray, 0, newStrArray, 0, oldStrArray.length);
for(int i = 0; i<newStrArray.length; i++) {
System.out.println(newStrArray[i]);
}
}
}
사용법
for( ② 타입 변수 : ① 배열 ){
③ 실행문;
}
자바스크립트
for 변수 in 배열{
실행문;
}
public class AdvancedForExample {
package ch05;
public class AdvancedForExample {
public static void main(String[] args) {
int[] scores = {95, 71, 84, 93, 87};
int sum = 0;
// for(int i = 0; i < scores.length; i++) { //일반적인 for
// 배열의 길이만큼 반복
for(int score : scores) {
sum += score;//sum = sum + scores[i];
}
System.out.println("점수 통합 = " + sum);
double avg = (double)sum / scores.length;
System.out.println("점수 평균 = " + avg);
}
}
끝.