어서와 Java는 처음이지! 제4장 배열.

Slides:



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

5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
제 3 장 반복문, 배열, 예외처리 1 명품 JAVA Programming. for( 초기문 ; 조건식 ; 반 복후작업 ) {.. 작업문.. }  for 키 워드    for 문의 구성 초기문 조건 식 작업문 반복 후작업 true false for 문이 실행한.
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
제 7주 2015년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
7장 배열 ②.
명품 JAVA Essential.
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
어서와 Java는 처음이지! 제15장 제네릭과 컬렉션. 어서와 Java는 처음이지! 제15장 제네릭과 컬렉션.
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
[INA470] Java Programming Youn-Hee Han
명품 JAVA Programming 제 7 장 제네릭과 컬렉션.
명품 JAVA Essential.
제7장 제어구조 I – 식과 문장.
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
명품 JAVA Essential.
명품 JAVA Essential.
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
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 자바 응용 프로그램과 애플릿 프로그램
5장 조건과 반복 ①.
주소록 프로그램.
7장 배열 ①.
6장 객체-지향 설계 ①.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
12 검색.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
23강 API - II - 약방의 감초 Random 클래스 - Scanner 및 Sysout - Wrapper 클래스의 이해
5장 조건과 반복 ②.
제2장 데이터 및 수식.
6장 객체-지향 설계 ①.
어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수.
컴퓨터의 기초 제 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
4장 - PHP의 표현식과 흐름 제어-.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
DataScience Lab. 박사과정 김희찬 (화)
자바 5.0 프로그래밍.
5장 조건과 반복 ①.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
어서와 C언어는 처음이지 제16장.
Lecture 05 문자열, 배열, 디버깅 Kwang-Man Ko
DataScience Lab. 박사과정 김희찬 (화)
Choi Younghwan CSE HUFS
Presentation transcript:

어서와 Java는 처음이지! 제4장 배열

배열이 필요한 이유 예를 들어서 학생이 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 연산자를 사용하여서 생성 int intArray [5]; // 크기 지정 안됨 먼저 배열 참조 변수부터 선언 배열을 new 연산자를 사용하여서 생성

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

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

배열은 객체로 관리 int intArray []; intArray = new int[5]; 5 7 int intArray []; intArray = new int[5]; int size = intArray.length; // size는 5 intArray[0] int length 5 intArray 배열객체 length 필드를 이용하여 배열의 모든 값을 출력하는 사례 for(int i=0; i<intArray.length; i++) // intArray 배열 크기만큼 루프를 돈다. System.out.println(intArray[i]);

함수 호출시 C/C++와 자바 배열 전달 비교 C/C++ 경우, 배열과 크기를 각각 전달 받음 자바 경우, 배열만 전달받음 8 C/C++ 경우, 배열과 크기를 각각 전달 받음 자바 경우, 배열만 전달받음 int sum(int x[], int size) { int n, s=0; for(n=0; n<size; n++) s += x[n]; return s; } int sum(int x[]) { int n, s=0; for(n=0; n<x.length; n++) s += x[n]; return s; } int a[] ={1,2,3,4,5}; int n = sum(a, 5); int a[] ={1,2,3,4,5}; int n = sum(a); 자바가 C/C++에 비해 배열을 다루기 편한 구조임

예제: 반복문과 배열 크기가 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);

실습 최대값 구하기(GetMax)

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

실습 {1.0, 2.0, 3.0, 4.0} 과 같은 초기값을 가지는 double형의 배열을 생성한다. 모든 배열 요소를 출력한 후에 모든 요소를 더하여 합을 출력하고 요소 중에서 가장 큰 값을 찾아서 출력하는 프로그램을 작성하라. 1.0 2.0 3.0 4.0 합은 10.0 최대값은 4.0

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

무명 배열의 예

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

for-each 루프의 예

for-each 루프:예제 String 배열 s

for-each 루프 // AS-IS : for (int i = 0; i < a.length; i++) {     doSomething(a[i]); } // TO-BE : for (Element e : elements) {     doSomething(e); }

for-each 루프

for-each 루프 for each 루프를 사용할 수 없는 경우 배열 원소의 값을 변경하는 경우 역순으로 배열을 처리하는 경우 일부 원소만을 처리하는 경우 하나의 반복문에서 두 개 이상의 배열을 처리하는 경우  전통적인 for 문 사용!!

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

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

main() 매개 변수

명령어 프롬프트

main() 메소드 public static void main(String [] args) { } main()의 메소드 특징 41 public static void main(String [] args) { } 다른 클래스에서 메소드 접근 허용 객체 생성전부터 호출 가능 리턴 값 없음 문자열 배열 인자 main()의 메소드 특징 자바 응용프로그램은 main()에서 부터 시작 public 속성 static 속성 리턴 타입은 void 인자는 문자열 배열(String [])로 전달

main(string [] args) 메소드의 인자 전달 42 C:\>java Hello abc 3 % 5.7 생성 “abc” “3” “%” “5.7” class Hello args public static void main(String[] args) { String a = args[0]; // a는 "abc" String b = args[1]; // b는 "3" String c = args[2]; // c는 "%" String d = args[3]; // d는 "5.7" } args.length => 4 args[0] => “abc” args[1] => “3 args[2] => “%” args[3] => “5.7”

이클립스에서 main() 메소드 인자전달 43 Run 메뉴의 Run Configurations 항목에서 main() 메소드의 인자를 나열

main()의 인자 이용 예 public class Calc { 44 public class Calc { public static void main(String[] args) { int sum = 0; for(int i=0; i<args.length; i++) { // 명령행 인자의 개수만큼 반복 int n = Integer.parseInt(args[i]); // 명령행 인자인 문자열을 정수로 변환 sum += n; // 숫자를 합한다. } System.out.println("sum = " + sum);

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

배열 정렬

배열 정렬

2차원 배열

2차원 배열의 초기화 int [][] intArray = {{0,1,2},{3,4,5},{6,7,8}}; char [][] charArray = {{'a', 'b', 'c'},{‘d'.'e','f'}}; float [][] floatArray = {{0.01, 0.02}, {0.03, 0.04}};

2차원 배열의 length 필드 2차원 배열의 length i.length -> 2차원 배열의 행의 개수로서 2 50 length 5 i[0] int[][] i = new int[2][5]; int size1 = i.length; //2 int size2 = i[0].length; //5 i[0][0] i[0][1] i[0][2] i[0][3] i[0][4] i length 2 i[1] i[1][0] i[1][1] i[1][2] i[1][3] i[1][4] 2차원 배열의 length i.length -> 2차원 배열의 행의 개수로서 2 i[n].length는 n번째 행의 열의 개수 i[0].length -> 0번째 행의 열의 개수로서 5 i[1].length -> 1번째 행의 열의 개수로서 역시 5

2차원 배열 예제

예제 : 3년간 매출 총액과 평균 구하기 52 한 회사의 지난 3년간 분기별 매출 총액과 연평균 매출을 구하는 프로그램을 작성하시오. public class SalesRevenue { public static void main (String[] args) { int intArray[][] = {{90, 90, 110, 110}, // 1사분기, 2사분기, 3사분기, 4사분기 {120, 110, 100, 110}, {120, 140, 130, 150}} ; double sum = 0; for (int i = 0; i < intArray.length; i++) for (int j = 0; j < intArray[i].length; j++) sum += intArray[i][j]; System.out.println("지난 3년간 매출 총액은 " + sum + "이며 연평균 매출은 " + sum/intArray.length + "입니다."); } 지난 3년간 매출 총액은 1380.0이며 연평균 매출은 460.0입니다.

LAB: TIC-TAC-TOE 게임 1 2 1 2

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

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: 지뢰찾기 게임 10 지뢰 10

SOLUTION 1/3만큼 true public class MineSweeper { public static void main(String[] args) { boolean[][] board = new boolean[10][10]; // 초기값 false 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(); } 1/3만큼 true

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

LAB: 랜덤 워크

SOLUTION public class RandomWalk { public static void main(String[] args) { int x = 5, y = 5; boolean tile[][] = new boolean[10][10]; // 초기화 false 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);

실습 Random Walk 프로그램을 작성하고 분석해 보자…

06 ArrayList 동적배열: 실행 중에 배열 크기가 바뀐다. ArrayList<String> = new ArrayList<String>(); java.util.ArrayList

ArrayList<E> ArrayList<E>의 특성 Collection List 66 ArrayList<E>의 특성 java.util.ArrayList, 가변 크기 배열을 구현한 클래스 <E>에서 E 대신 요소로 사용할 특정 타입으로 구체화 ArrayList에 삽입 가능한 것 객체, null 기본 타입은 박싱/언박싱으로 Wrapper 객체로 만들어 저장 ArrayList에 객체 삽입/삭제 리스트의 맨 뒤에 객체 추가  add(E) 리스트의 중간에 객체 삽입  add(index, E) 임의의 위치에 있는 객체 삭제 가능  remove(index) 벡터와 달리 스레드 동기화 기능 없음 다수 스레드가 동시에 ArrayList에 접근할 때 동기화되지 않음 개발자가 스레드 동기화 코드 작성 ArrayList

ArrayList<String>컬렉션의 내부구성 67 ArrayList<String> = new ArrayList<String>(); add()를 이용하여 요소를 삽입하고 get()을 이용하 여 요소를 검색합니다

ArrayList<E> 클래스의 주요 메소드 68

69 69

비정방형 배열 정방형 배열 비정방병 배열(Ragged Array) 각 행의 열의 개수가 같은 배열 70 정방형 배열 각 행의 열의 개수가 같은 배열 비정방병 배열(Ragged Array) 각 행의 열의 개수가 다른 배열 비정방형 배열의 생성 i[0][0] i[0][3] 정방형 i i[3][0] i[3][3] int i[][]; i = new int[4][4]; int i[][]; // 2차원 배열의 레퍼런스 선언 i = new int [4][]; // 각 행의 레퍼런스 배열 생성 i[0] = new int [1]; // 첫 행의 1개 정수 배열 생성 i[1] = new int [2]; // 둘째 행의 2개 정수 배열 생성 i[2] = new int [3]; // 셋째 행의 3개 정수 배열 생성 i[3] = new int [4]; // 네째 행의 4개 정수 배열 생성 비정방형 i i=new int [4][]; i[0] = new int[1]; i[3] = new int[4]; i[0][0] i[1][0] i[1][1] i[3][0] i[3][1] i[3][2] i[3][3]

비정방형 배열의 length 비정방형 배열의 length i.length -> 2차원 배열의 행의 개수로서 4 71 i=new int [4][]; i[0] = new int[1]; i[3] = new int[4]; i[0][0] i[1][0] i[1][1] i[3][0] i[3][1] i[3][2] i[3][3] 비정방형 배열의 length i.length -> 2차원 배열의 행의 개수로서 4 i[n].length는 n번째 행의 열의 개수 i[0].length -> 0번째 행의 열의 개수로서 1 i[1].length -> 1번째 행의 열의 개수로서 2 i[2].length -> 2번째 행의 열의 개수로서 3 i[3].length -> 3번째 행의 열의 개수로서 4

예제 : 비 정방형 배열의 생성과 접근 다음 그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하시오. 72 다음 그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하시오. public class IrregularArray { public static void main (String[] args) { int a = 0; int intArray[][] = new int[4][]; intArray[0] = new int[3]; intArray[1] = new int[2]; intArray[2] = new int[3]; intArray[3] = new int[2]; for (int i = 0; i < intArray.length; i++) for (int j = 0; j < intArray[i].length; j++) intArray[i][j] = (i+1)*10 + j; for (int i = 0; i < intArray.length; i++) { System.out.print(intArray[i][j]+" "); System.out.println(); } 10 11 12 20 21 30 31 32 40 41

Q & A