Study Web Development

11월 2일

이전으로

자바

5. 배열

5-1 1차원 배열

  1. 프로젝트 ch04-array에 새 클래스 ArrayMain03 생성
public class ArrayMain03 {
	public static void main(String[] args) {
		// 배열의 선언 및 생성, 초기화
		int[] score = {79, 88, 91, 33, 100, 55, 95};
		
		// 비교의 기준값은 배열 안의 값을 사용함; 배열에 포함되어 있지 않은 임의의 값 사용시 최댓값, 최솟값 비교가 제대로 동작하지 않을 수 있음
		int max = score[0]; // 배열의 첫 번째 값으로 최댓값을 초기화
		int min = score[0]; // 배열의 첫 번째 값으로 최솟값을 초기화
		
		for(int i=1;i<score.length;i++) { // 기준값이 배열의 첫 번째 값이므로 자기 자신과의 비교는 생략
			if(score[i] > max) {
				max = score[i];
			}
			if(score[i] < min) {
				min = score[i];
			}
		}
		
		System.out.println("최댓값 : " + max);
		System.out.println("최솟값 : " + min);
	}
}
  1. 새 클래스 ArrayMain04 생성
public class ArrayMain04 {
	public static void main(String[] args) {
		// 배열의 선언, 생성 및 초기화
		int[] array = {10, 20, 30, 40, 50};
		
		// 일반 for문; 배열 외에도 사용 가능
		for(int i=0;i<array.length;i++) {
			System.out.println("array[" + i + "] : " + array[i]);
		}
		
		// 확장 for문(=개선된 루프); 배열에만 사용
		for(int num : array) { // 배열 array의 요소를 변수 num에 저장; 인덱스를 사용하지 않고 직접 배열의 각 데이터에 접근
			System.out.print(num + "\t");
		}
	}
}
  1. 새 클래스 ArrayMain05 생성
public class ArrayMain05 {
	public static void main(String[] args) {
		// 배열의 선언 및 생성
		String[] array = new String[3];
		// 배열의 초기화
		array[0] = "Java";
		array[1] = "JSP";
		array[2] = "Servlet";
		
		// 일반 for문
		for(int i=0;i<array.length;i++) {
			System.out.println(array[i]);
		}
		
		System.out.println();
		
		// 확장 for문
		for(String s : array) {
			System.out.println(s);
		}
	}
}
  1. 새 클래스 ArrayMain06 생성
public class ArrayMain06 {
	public static void main(String[] args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		String[] course = {"국어", "영어", "수학"};
		int[] score = new int[course.length];
		
		int sum = 0;
		float avg = 0.0f;
		
		for(int i=0;i<course.length;i++) {
			do { // 점수를 올바르게 입력하도록 강제
				System.out.print(course[i] + " > "); // 가이드 문자열로 과목명 출력
				score[i] = input.nextInt();
			} while(score[i]<0 || score[i]>100);
			sum += score[i]; // 별도의 반복문을 만들지 않기 위해 입력받으면서 총점도 구함
		}
		
		input.close();
		
		avg = sum / (float)course.length;
		
		System.out.printf("총점 : %d\n", sum);
		System.out.printf("평균 : %.2f", avg);
	}
}
  1. 새 클래스 ArrayMain09 생성
public class ArrayMain09 {
	public static void main(String[] args) {
		/*
		 * [실습]
		 * 1) 10, 20, 30, 40, 50을 초기값으로 갖는 1차원 배열을 test 이름으로 선언, 생성, 초기화하시오.
		 * 2) 반복문을 이용하여 출력하시오.
		 * 3) 확장 for문을 이용하여 출력하시오.
		 * 4) 인덱스 3의 데이터를 100으로 변경하시오.
		 * 5) 마지막 요소의 값을 200으로 변경하시오.
		 * 6) 반복문을 사용하여 모든 요소의 값을 0으로 초기화하시오.
		 * 7) 홀수 인덱스에 10, 짝수 인덱스에 20을 저장하시오.
		 * 8) 모든 요소의 총합과 평균(총합을 요소의 수로 나눔) 구하고 출력하시오.
		 */
		// 1
		int[] test={10, 20, 30, 40, 50};
		// 2
		for(int i=0;i<test.length;i++) {
			System.out.println(test[i]);
		}
		System.out.println("========");
		// 3
		for(int num:test) {
			System.out.print(num+"\t");
		}
		System.out.println("\n========");
		// 4
		test[3]=100;
		// 5
		test[test.length-1]=200;
		for(int num:test) {
			System.out.print(num+"\t");
		}
		System.out.println("\n========");
		// 6
		for(int i=0;i<test.length;i++) {
			test[i]=0;
			System.out.println(test[i]);
		}
		System.out.println("========");
		// 7
		for(int i=0;i<test.length;i++) {
			if(i%2==0) {
				test[i]=20;
			}
			else {
				test[i]=10;
			}
			System.out.println(test[i]);
		}
		System.out.println("========");
		// 8
		int sum=0;
		float avg=0.0f;
		for(int num:test) {
			sum+=num;
		}
		avg=sum/(float)test.length;
		System.out.printf("총합 = %d\n평균 = %.2f", sum, avg);
	}
}
  1. 새 클래스 ArrayMain10 생성
public class ArrayMain10 {
	public static void main(String[] args) {
		/*
		 * [실습] 
		 * 단을 입력받아서 1부터 9까지 곱해서 결과값을 구하고 배열에 그 값을 저장한 후, 구구단 출력 형식(2 * 1 = 2)으로 배열에서 값을 불러와 출력하시오.
		 */
		java.util.Scanner input = new java.util.Scanner(System.in);
		int[] array = new int[9];
		int dan;
		while(true) {
			System.out.print("단을 입력하세요 > ");
			dan = input.nextInt();
			if(dan>=1&&dan<=9) {
				break;
			}
			System.out.println("단은 1부터 9까지만 가능합니다.");
		}
		for(int i=0;i<array.length;i++) {
			array[i] = dan*(i+1); // 배열의 인덱스와 구구단의 곱하는 수가 같지 않음 유의
			System.out.printf("%d * %d = %d\n", dan, i+1, array[i]);
		}
		input.close();
	}
}

5-2 2차원 배열

  1. 새 클래스 ArrayMain11 생성
public class ArrayMain11 {
	public static void main(String[] args) {
		// 2차원 배열 선언
		int test[][];
		
		// 2차원 배열 생성
		test = new int[2][3]; // 2행 3열
		
		// 2차원 배열의 초기화
		test[0][0] = 100;
		test[0][1] = 200;
		test[0][2] = 300;
		
		test[1][0] = 400;
		test[1][1] = 500;
		test[1][2] = 600;
		
		// 배열의 요소 출력
		System.out.println(test[0][0]);
		System.out.println(test[0][1]);
		System.out.println(test[0][2]);
		System.out.println(test[1][0]);
		System.out.println(test[1][1]);
		System.out.println(test[1][2]);
		
		System.out.println("========");
		
		// 이중 반복문을 이용해서 2차원 배열 요소 읽기
		for(int i=0;i<test.length;i++) { // 행
			for(int j=0;j<test[i].length;j++) { // 열
				System.out.println("test[" + i + "][" + j + "]: " + test[i][j]);
			}
		}
		
		// 2차원 배열 선언 및 생성
		int[][] test2 = new int[3][5]; // 3행 5
		
		// 2차원 배열 선언 및 생성(명시적 배열 생성), 초기화
		int[][] test3 = new int[][] { {100, 200, 300}, {400, 500, 600} };
		int[][] test3a = new int[][] { // 가독성을 위해
			{100, 200, 300}, 
			{400, 500, 600}
		};
		
		// 2차원 배열 선언 및 생성(암시적 배열 생성), 초기화
		int[][] test4 = { {10, 20, 30}, {20, 30, 40}, {50, 60, 70} }; // 2행 3열
	}
}
  1. 새 클래스 ArrayMain12 생성
public class ArrayMain12 {
	public static void main(String[] args) {
		// 2차원 배열 선언 및 생성, 초기화
		int[][] array = { {10, 20, 30, 40}, {20, 30, 40, 50} }; // 2행 4열
		
		// 반복문을 이용한 출력
		for(int i=0;i<array.length;i++) { // 행
			for(int j=0;j<array[i].length;j++) { // 열
				System.out.print(array[i][j] + "\t");
			}
			System.out.println(); // 단순 줄바꿈(배열의 행이 바뀌었음을 나타내기 위해)
		}
	}
}
  1. 새 클래스 ArrayMain13 생성
public class ArrayMain13 {
	public static void main(String[] args) {
		// 2차원 배열 선언 및 생성
		int[][] score = {
			{98, 99, 80}, 
			{97, 85, 70}, 
			{84, 88, 95},
			{79, 95, 90},
			{88, 85, 80},
		};
		
		System.out.println("번호\t국어\t영어\t수학\t총점\t평균");
		for(int i=0;i<score.length;i++) { // 행
			int sum = 0; // 총점을 각 행마다 초기화 후 누적시키기 위해
			System.out.print(i + 1 + "\t"); // 번호 출력
			for(int j=0;j<score[i].length;j++) { // 열
				sum += score[i][j]; // 총점
				System.out.print(score[i][j] + "\t"); // 과목 성적 출력
			}
			System.out.println(sum + "\t" + sum / score[i].length); // 총점, 평균 출력
		}
	}
}

5-3 클래스 main 메서드

  1. 새 클래스 ArrayMain07 생성
    • 이클립스에서 오른쪽 클릭 후 Run As-Run Configurations... 선택하여 Arguments 탭의 Program arguments에 데이터를 입력(구분자는 공백)
      • Main 탭에서 Main class가 현재 실행하려는 클래스인지 확인 필요
public class ArrayMain07 {
	public static void main(String[] args) { // main 함수가 동작하면 Program arguments에 입력된 데이터를 배열 args에 전달
		if(args.length>0) { // Program arguments에 데이터 입력하지 않은 경우 main 함수가 동작하면서 배열은 생성되나 배열의 length는 0이 됨
			for(int i=0;i<args.length;i++) {
				System.out.print(args[i]+"\t");
			}
		}
		else {
			System.out.println("args.length = " + args.length);
			System.out.println("입력한 내용이 없습니다!");
		}
	}
}
  1. 새 클래스 ArrayMain08 생성
public class ArrayMain08 {
	public static void main(String[] args) {
		// 클래스를 실행할 때 main의 인자인 args가 가리키는 배열에 데이터를 전달해서 활용할 수 있음
		System.out.println(args[0] + args[1]);

		// args의 자료형이 String이라 숫자를 전달해도 문자열로 변환해 저장하기 때문에 연산에 활용하려면 별도의 변환 작업이 필요함
		int num = Integer.parseInt(args[0]);
		int num2 = Integer.parseInt(args[1]);
		
		System.out.println("합계 : " + (num + num2));
	}
}

6. 클래스와 객체

6-2 객체의 생성 및 멤버 접근법

  1. 새 자바 프로젝트 ch05-object 생성하고 새 클래스 Student 생성
public class Student {
	// 필드
	String name;
	int age;
	
	public static void main(String[] args) {
		// 객체 선언; 자료형을 클래스명으로 사용하여 변수를 선언
		Student s;
		
		// 객체 생성; 메모리에 객체를 생성하고 객체의 주소를 s에 저장; 객체에는 멤버 변수 name과 age가 포함됨
		s = new Student(); // new 연산자는 객체를 생성하는 역할; 자바에서는 배열 역시 객체로 취급되어 new 연산자로 생성
		
		// 객체의 필드에 데이터를 저장
		s.name = "홍길동";
		s.age = 20;
		
		// 객체의 필드에 저장된 데이터 읽기
		System.out.println(s.name + ", " + s.age);
	}
}
  1. 새 클래스 Student02 생성
public class Student02 {
	// 필드
	// 멤버 변수
	String name;
	int age;
	String hobby;
	
	public static void main(String[] args) {
		// 객체의 선언 및 생성
		Student02 student = new Student02();
		
		student.name = "홍길동";
		student.age = 20;
		student.hobby = "축구";
		
		System.out.println(student.name + ", " + student.age + ", " + student.hobby);
		
		// 객체는 무한히 생성 가능함; 하나의 설계도면으로 주소(와 저장된 데이터)가 다른 여러 건물을 짓는 것
		Student02 student2 = new Student02();
		
		student2.name = "박문수";
		student2.age = 45;
		student2.hobby = "야구";
		
		System.out.println(student2.name + ", " + student2.age + ", " + student2.hobby);	
	}
}
  1. 새 클래스 Student03 생성
public class Student03 {
	// 필드
	// 멤버 변수
	String name;
	int korean;
	int english;
	int math;
	int sum;
	double avg;
	
	public static void main(String[] args) {
		// 객체 선언 및 생성
		Student03 student = new Student03();
		
		// 객체의 필드에 데이터를 저장
		student.name = "홍길동"; // .(dot) 연산자는 상위요소(객체, 배열 등)에서 하위요소(멤버 변수, 길이 등)에 접근할 때 사용
		student.korean = 98;
		student.english = 97;
		student.math = 95;
		student.sum = student.korean + student.english + student.math;
		student.avg = student.sum / 3.0;
		
		// 객체의 필드에 저장된 데이터 읽기
		System.out.println("이름 : " + student.name);
		System.out.println("국어 : " + student.korean);
		System.out.println("영어 : " + student.english);
		System.out.println("수학 : " + student.math);
		System.out.println("총점 : " + student.sum);
		System.out.printf("평균 : %.2f", student.avg);
	}
}
  1. 새 클래스 CarMain 생성
    • 자바에서는 하나의 .java 파일에 여러 클래스를 담을 수 있지만, 주 클래스(public class)는 하나만 담을 수 있고, 각 클래스는 개별 .class 파일로 컴파일됨
class Car { // 부 클래스
	// 멤버 변수 역시 초기값을 지정해줄 수 있음
	String company = "현대자동차";
	String model = "아이오닉 5";
	String color = "은색";
	int maxSpeed = 350;
	int speed;
}

public class CarMain { // 주 클래스
	public static void main(String[] args) {
		// 객체 선언 및 생성
		Car myCar = new Car();
		
		// 객체의 멤버 변수에 저장된 데이터 읽기
		System.out.println("제작회사 : " + myCar.company);
		System.out.println("모델명 : " + myCar.model);
		System.out.println("색상 : " + myCar.color);
		System.out.println("최대속력 : " + myCar.maxSpeed);
		System.out.println("현재속력 : " + myCar.speed); // 멤버 변수에 초기값을 지정해주지 않은 경우, 자료형의 기본값으로 초기화됨; 정수의 경우 0, String의 경우 null(객체를 만들지 않아 주소가 없다는 의미)
		
		// 멤버 변수의 값 변경
		myCar.speed = 60;
		System.out.println("수정된 현재속력 : " + myCar.speed);
	}
}

다음으로