Presentation is loading. Please wait.

Presentation is loading. Please wait.

어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수.

Similar presentations


Presentation on theme: "어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수."— Presentation transcript:

1 어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수

2 배열이 필요한 이유 예를 들어서 학생이 10명이 있고 이들의 성적의 평균을 계산한다고 가정하자. 학생이 10명이므로 10개의 변수가 필요하다. 하지만 만약 학생이 100명이라면 어떻게 해야 하는가? int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9,…,s99;

3 배열의 개념 배열(array): 동일한 타입의 변수들의 모임

4 배열을 만드는 절차 먼저 배열 참조 변수부터 선언 배열을 new 연산자를 사용하여서 생성

5 배열의 인덱스 다음과 같은 배열을 가정하자. 배열 요소에는 번호가 붙어 있는데 이것을 인덱스(index)라고 부른다.
첫 번째 요소의 번호는 0이고, 마지막 요소의 번호는 9가 된다.

6 인덱스를 통한 요소의 접근 배열은 변수들이 모인 것이니, 배열을 이루고 있는 배열 요소는 하나의 변수로 생각하면 된다.
배열의 첫 번째 요소에 80을 저장하려면 다음과 같이 한다.

7 예제: 반복문과 배열 크기가 10인 정수형 배열을 생성하고 여기에 0부터 9까지의 값으로 배열을 채우는 프로그램을 살펴보자.
public class ArrayTest1 { public static void main(String[] args) { int[] s = new int[10]; for (int i = 0; i < s.length; i++) { s[i] = i; } System.out.print(s[i] + " ");

8 LAB: 성적 평균 계산하기

9 SOLUTION import java.util.Scanner; public class ArrayTest2 {
public static void main(String[] args) { final int STUDENTS = 5; int total = 0; Scanner scan = new Scanner(System.in); int[] scores = new int[STUDENTS]; for (int i = 0; i < scores.length; i++) { System.out.print("성적을 입력하시오:"); scores[i] = scan.nextInt(); } for (int i = 0; i < scores.length; i++) total += scores[i]; System.out.println("평균 성적은" + total / STUDENTS + "입니다");

10 배열의 인덱스 범위 프로그래머가 인덱스가 범위를 벗어나지 않았는지를 확인하고 책임을 져야 한다.

11 배열의 초기화

12 LAB: 문자열 배열

13 SOLUTION public class PizzaTopping {
public static void main(String[] args) { String[] toppings = { "Pepperoni", "Mushrooms", "Onions", "Sausage", "Bacon" }; for (int i = 0; i < toppings.length; i++) { System.out.print(toppings[i] + " "); }

14 LAB: 최대값과 최소값 구하기 인터넷에서 특정한 상품(예를 들어서 TV)을 구입하고자 한다. 인터넷에서 판매되는 가격이 1차원 배열 prices[]에 저장되어 있다고 가정했을 때, 어떻게 하면 최소가격으로 상품을 구입할 수 있을까?

15 LAB:최소값 알고리즘 최소값을 구할 때는 일단 배열의 첫 번째 요소를 최소값으로 가정

16 SOLUTION public class GetMin {
public static void main(String[] args) { int s[] = { 12, 3, 19, 6, 18, 8, 12, 4, 1, 19 }; int minimum; minimum = s[0]; for (int i = 1; i < s.length; i++) { if (s[i] < minimum) minimum = s[i]; } System.out.print("최소값은 " + minimum);

17 LAB: 특정한 값 찾기 순차 탐색(sequential search)은 탐색 방법 중에서 가장 간단하고 직접적인 탐색 방법이다. 순차 탐색은 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하는 값을 찾아가는 방법이다.

18 LAB: 순차탐색 알고리즘 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하는 값을 찾아가는 방법

19 SOLUTION import java.util.Scanner; public class SeqSearch {
public static void main(String[] args) { int s[] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; int value, index = -1; Scanner scan = new Scanner(System.in); System.out.print("탐색할 값을 입력하시오: "); value = scan.nextInt(); for (int i = 0; i < s.length; i++) { if (s[i] == value) index = i; } if (index < s.length && index >= 0) System.out.println("" + value + "값은 " + index + "위치에 있습니다.");

20 LAB: 주사위 던지기

21 SOLUTION public class RollDice {
public static void main(String[] args) { final int SIZE = 6; int freq[] = new int[SIZE]; for (int i = 0; i < 10000; i++) ++freq[(int) (Math.random() * SIZE)]; System.out.println("===================="); System.out.println("면빈도"); for (int i = 0; i < SIZE; i++) System.out.println("" + (i + 1) + "\t" + freq[i]); }

22 LAB: 극장 예약 시스템

23 SOLUTION import java.util.Scanner; public class TheaterReserve {
public static void main(String args[]) { final int size = 10; int[] seats = new int[size]; while (true) { System.out.println(" "); for (int i = 0; i < size; i++) System.out.print(i+1 + " "); System.out.println("\n "); System.out.print(seats[i] + " ");

24 SOLUTION System.out.print("원하시는 좌석번호를 입력하세요(종료는 -1): ");
Scanner scan = new Scanner(System.in); int s = scan.nextInt(); if (s == -1) break; if (seats[s-1] == 0) { seats[s-1] = 1; System.out.println("예약되었습니다."); } else { System.out.println("이미 예약된 자리입니다.");

25 무명 배열 자바에서는 배열의 이름을 지정하지 않고 단순히 초기값만으로 배열을 생성시킬 수있다.
무명 배열(anonymous arrays)은 즉시 배열을 만들어서 함수의 인수로 전달하고자 할 때 많이 사용된다. 교재 참조 P.166

26 무명 배열의 예

27 for-each 루프 향상된 루프 구조

28 for-each 루프의 예

29 배열의 복사 배열 참조 변수의 복사

30 배열의 복사 한 배열의 모든 값을 다른 배열로 복사하고 싶다면 Arrays 클래스의 copyOf() 메소드를 사용
(예) int [] list_copy = Arrays.copyOf(list, list.length);

31 main() 매개 변수

32 명령어 프롬프트

33 배열 정렬 배열에 저장된 숫자를 크기 순으로 정렬하려면 Arrays.sort() 사용

34 배열 정렬

35 배열 정렬

36 2차원 배열

37 2차원 배열의 초기화

38 2차원 배열 예제

39 LAB: TIC-TAC-TOE 게임

40 SOLUTION import java.util.Scanner; public class Tic_Tac_Toe {
public static void main(String[] args) { char[][] board = new char[3][3]; int x, y; Scanner scan = new Scanner(System.in); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) board[i][j] = ' ';

41 SOLUTION do { for (int i = 0; i < 3; i++) {
System.out.println(" " + board[i][0] + "| " + board[i][1] + "| " + board[i][2]); if (i != 2) System.out.println("---|---|---"); } System.out.print("다음 수의 좌표를 입력하시오: "); x = scan.nextInt(); y = scan.nextInt(); if (board[x][y] != ' ') { System.out.println("잘못된 위치입니다. "); continue; } else board[x][y] = 'X';

42 SOLUTION int i = 0, j = 0; for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) if (board[i][j] == ' ') break; } if (i < 3 && j < 3) board[i][j] = 'O'; } while (true);

43 LAB: 지뢰찾기 게임

44 LAB: 지뢰찾기 게임

45 SOLUTION public class MineSweeper {
public static void main(String[] args) { boolean[][] board = new boolean[10][10]; for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) if( Math.random() < 0.3 ) board[i][j] = true; for (int i = 0; i < 10; i++) { if (board[i][j]) System.out.print("# "); else System.out.print(". "); System.out.println(); }

46 LAB: 랜덤 워크 술에 취한 딱정벌레가 크기의 타일로 구성된 방안에 있다. 딱정벌레는 임의의(랜덤) 위치를 선택하여 여기저기 걸어 다닌다. 딱정 벌레가 지나간 경로를 화면에 표시하여 보자.

47 LAB: 랜덤 워크

48 SOLUTION public class RandomWalk {
public static void main(String[] args) { int x = 5, y = 5; boolean tile[][] = new boolean[10][10]; int steps; tile[5][5] = true; for (steps = 0; steps < 10; steps++) { int direction = (int) (Math.random() * 4); if (direction == 0 && x > 0) x--; else if (direction == 1 && x < 9) x++; else if (direction == 2 && y > 0) y--; else if (y < 9) y++; tile[y][x] = true;

49 SOLUTION System.out.println("--------------------------");
for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (tile[i][j] == true) System.out.print("# "); else System.out.print(". "); } System.out.println(); System.out.println("전체 이동 수는 = " + steps);

50 Q & A


Download ppt "어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수."

Similar presentations


Ads by Google