[2020 모각코] 8회차(2020.08.04.)
# 8회차 목표: 컴프 12주차 때 했던 배열 복습 및 극장 예약 시스템 작성 과제 다시 하고 전에 했던 것과 비교
배열
: 같은 타입의 변수들의 모임
자바에서 배열은 객체이므로 다른 객체를 생성하는 것과 동일하게 참조변수를 선언하고 객체를 생성해야 한다.
배열은 변수들의 모임이기 때문에 참조형 변수로 이루어진 배열도 생성가능하다.
반복 루프를 사용하면 한번에 모든 객체 생성이 가능하다.
자료형[] 참조변수 = new 자료형[배열 객체의 수]
+) 배열 객체의 수에 변수를 사용하여 사용자의 입력에 따라 배열의 크기를 지정할 수 있다.
++) Arrays.fill(배열, 초기화 할 인덱스 값)
import java.util.Arrays를 통해 한번에 모든 객체의 인덱스 값을 초기화 할 수도 있다.
for-each 루프
: 배열의 값을 참조변수에 대입하면서 for문을 수행한다.
아래와 같이 사용하며 보통의 for문처럼 반복횟수를 지정하는 것은 불가능하다.
for(자료형 : 배열 등) {
반복문의 몸체
}
public class WEEK12 {
public static void main(String[] args) {
final int NUM_CARS = 5;
Car[] cars = new Car[NUM_CARS];
for(int i = 0; i < cars.length; i++)
cars[i] = new Car();
for(int i = 0; i < cars.length; i++)
cars[i].speedUp();
for(int i = 0; i < cars.length; i++)
System.out.println(cars[i]);
}
}
class Car{
public int speed;
public int gear;
public String color;
public Car() {
speed = 0;
gear = 1;
color = "red";
}
public void speedUp() {
speed += 10;
}
public String toString() {
return "속도: " + speed + " 기어: " + gear +" 색상: " + color;
}
}
배열 예시코드
다차원 배열
: 아래와 같이 대괄호가 두 개일 때는 2차원 배열, 그 이상일 때는 다차원 배열을 나타낸다.
자료형[][] 참조변수 = new 자료형[행의 개수][열의 개수]
2차원 배열의 초기화도 중괄호를 이용해서 할 수 있다.
ex) int[][] testArray = { {1,2,3}, {4,5,6}, {7,8,9} };
array.length; // 전체 행의 개수를 나타낸다.
array[행].length; //각 행이 가지는 열의 개수를 나타낸다.
12주차 과제: 극장 예약 시스템 작성
(사용자가 예약을 하려고 하면 좌석 배치표를 보여준다.)
(예약이 끝난 좌석은 1로, 예약이 안된 좌석은 0으로 표시한다.)
(사용자가 예약을 종료하려고 할 시에는 최종 좌석 배치표를 보여주고 종료한다.)
(문자열의 비교는 equals를 사용하며 Y또는 N이외의 값일 때는 경고를 표시한다.)
(예약하려는 자리가 범위 밖일 때, 예약하려는 자리가 이미 예약된 좌석일 때 경고를 표시한다.)
import java.util.Scanner;
import java.util.Arrays;
public class WEEK12 {
public static void main(String[] args) {
int[] seats = new int[10];
int[] rests = new int[10];
for (int i=0; i<seats.length; i++) {
seats[i] = i+1;
}
Arrays.fill(rests,0);
do {
Scanner sc = new Scanner(System.in);
System.out.print("좌석을 예약하시겠습니까?(예약:Y 종료:N) : ");
String ans = sc.next();
if (ans.equals("Y")) {
System.out.println("현재의 예약 상태는 다음과 같습니다.");
System.out.println("--------------------------------");
for(int i=0; i<seats.length; i++) {
System.out.print(seats[i]+" ");
}
System.out.println("\n--------------------------------");
for(int j=0; j<rests.length; j++) {
System.out.print(rests[j]+" ");
}
System.out.print("\n몇번째 좌석을 예약하시겠습니까? : ");
int num = sc.nextInt();
if(num>10|num<1) {
System.out.println("정확한 범위를 입력해주세요.\n");
}
else if(rests[num-1]==1) {
System.out.println("이미 예약되어있는 자리입니다.\n");
}
else {
rests[num-1] = 1;
System.out.println("예약되었습니다.\n");
}
}
else if(ans.equals("N")) {
System.out.println("최종 예약 상태는 다음과 같습니다.");
System.out.println("--------------------------------");
for(int i=0; i<seats.length; i++) {
System.out.print(seats[i]+" ");
}
System.out.println("\n--------------------------------");
for(int j=0; j<rests.length; j++) {
System.out.print(rests[j]+" ");
}
System.out.println("");
break;
}
else {
System.out.println("대답은 Y나 N으로 해주세요.\n");
}
}while(true);
System.out.println("좌석예약시스템을 종료합니다.");
}
}
학기 중 제출했던 과제와 실행 결과
import java.util.Scanner;
public class theater {
public static void main(String[] args) {
final int SEATS = 10;
final int REST = 10;
int[] seats = new int[SEATS];
int[] rests = new int[REST];
for(int i=0; i<seats.length; i++) {
seats[i] = i+1;
}
for(int j=0; j<rests.length; j++) {
rests[j] = 0;
}
do {
System.out.print("좌석을 예약하시겠습니까?(예약:Y 종료:N) : ");
Scanner input = new Scanner(System.in);
String answer = input.next();
if(answer.equals("Y")) {
System.out.println("현재의 예약 상태는 다음과 같습니다.");
System.out.println("--------------------------------");
for(int i=0; i<seats.length; i++) {
System.out.print(seats[i]+" ");
}
System.out.println("\n--------------------------------");
for(int j=0; j<rests.length; j++) {
System.out.print(rests[j]+" ");
}
System.out.print("\n몇번째 좌석을 예약하시겠습니까? : ");
Scanner input1 = new Scanner(System.in);
int num = input1.nextInt();
if(num>10|num<1) {
System.out.println("정확한 범위를 입력해주세요.\n");
}
else if(rests[num-1]==1) {
System.out.println("이미 예약되어있는 자리입니다.\n");
}
else {
rests[num-1] = 1;
System.out.println("예약되었습니다.\n");
}
}
else if(answer.equals("N")) {
System.out.println("최종 예약 상태는 다음과 같습니다.");
System.out.println("--------------------------------");
for(int i=0; i<seats.length; i++) {
System.out.print(seats[i]+" ");
}
System.out.println("\n--------------------------------");
for(int j=0; j<rests.length; j++) {
System.out.print(rests[j]+" ");
}
System.out.println("");
break;
}
else {
System.out.println("대답은 Y나 N으로 해주세요.\n");
}
}while(true);
System.out.print("좌석예약시스템을 종료합니다.");
}
}
: 좌석 예약 상태 배열의 값을 모두 0으로 초기화 할 때 이번에 배열 부분을 복습하면서 새로 알게된 Arrays.fill을 사용하였고, 학기 중 제출했던 과제에서는 스캐너를 두번 사용했던 것을 한번만 사용하도록 수정하였다. 학기 중에 이 코드를 제출 할 때도 코드의 길이가 길다고 느꼈던 과제여서 길이를 줄이는 것을 목표로 두긴했으나 눈에 띄게 줄이지는 못했다는 것에 아쉬움이 남는다.
8회차 회고록
: 이번 회차에서도 배열을 복습하면서 새로운 java.util 패키지를 알게 되었고 어느새 가물가물해진 개념들을 다시 바로잡을 수 있었다. 오늘을 포함해 지금까지 예전에 했던 과제들과 비교를 해오면서 커다란 변화가 생기거나 많은 것을 알게 된 것은 아니지만 학기 중에 급하게 하느라 놓친 부분들을 제대로 정리할 수 있는 시간을 가질 수 있어 좋았다. 오늘은 정말 모각코의 마지막 회차를 하고 있다는 게 실감이 안날정도로 시간이 빨리 지나간 것 같다. 혼자 했으면 이렇게까지는 못하지 않았을까라는 생각에 모각코 활동의 감사함을 느낄 수 있었다.