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

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
제 7주 2015년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
배열, 포인터 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
7장 배열 ②.
어서와 Java는 처음이지! 제4장 배열.
Java Seminar 6.
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
[INA470] Java Programming Youn-Hee Han
명품 JAVA Programming 제 7 장 제네릭과 컬렉션.
명품 JAVA Essential.
제7장 제어구조 I – 식과 문장.
명품 JAVA Essential.
명품 JAVA Essential.
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
Lesson 3. 입출력과 제어문.
7장 배열 ②.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
7 스택.
Power Java 제10장 배열.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
컴퓨터 시뮬레이션 학과 지도교수 : 이광세 교수님 최창현 한규진
명품 JAVA Essential.
명품 Java Programming.
최용술 장 Thread 최용술
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
DataScience Lab. 박사과정 김희찬 (월)
5장 조건과 반복 ①.
주소록 프로그램.
7장 배열 ①.
6장 객체-지향 설계 ①.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
12 검색.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
5장 조건과 반복 ②.
제2장 데이터 및 수식.
6장 객체-지향 설계 ①.
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
[CPA340] Algorithms and Practice Youn-Hee Han
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
DataScience Lab. 박사과정 김희찬 (화)
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
자바 5.0 프로그래밍.
5장 조건과 반복 ①.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
DataScience Lab. 박사과정 김희찬 (화)
Choi Younghwan CSE HUFS
자바 암호 프로그래밍 Java Cryptography Programming
Presentation transcript:

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

배열이 필요한 이유 예를 들어서 학생이 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;

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

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

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

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

예제: 반복문과 배열 크기가 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] + " "); 0 1 2 3 4 5 6 7 8 9

LAB: 성적 평균 계산하기

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 + "입니다");

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

배열의 초기화

LAB: 문자열 배열

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] + " "); }

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

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

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);

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

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

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 + "위치에 있습니다.");

LAB: 주사위 던지기

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]); }

LAB: 극장 예약 시스템

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] + " ");

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("이미 예약된 자리입니다.");

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

무명 배열의 예

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

for-each 루프의 예

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

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

main() 매개 변수

명령어 프롬프트

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

배열 정렬

배열 정렬

2차원 배열

2차원 배열의 초기화

2차원 배열 예제

LAB: TIC-TAC-TOE 게임

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] = ' ';

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';

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);

LAB: 지뢰찾기 게임

LAB: 지뢰찾기 게임

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(); }

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

LAB: 랜덤 워크

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;

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);

Q & A