Iterator & for cyklus

Podobné dokumenty
Podmínky na zápočet. Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java Výjimky Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java Řetězce Java, zimní semestr

Abstraktní datové typy: zásobník

Java a XML. 10/26/09 1/7 Java a XML

Programování v Javě I. Únor 2009

boolean hasnext() Object next() void remove() Kolekce

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Programování v Javě I. Leden 2008

Java Enum Java, zimní semestr ,2017 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

JAVA. Další jazyky kompilovatelné do Java byte-code

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

1. Téma 12 - Textové soubory a výjimky

Úvod do programování v jazyce Java

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

Typický prvek kolekce pro české řazení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

7. Dynamické datové struktury

Principy objektově orientovaného programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

JAVA. Zdrojové soubory

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Datové struktury. alg12 1

5 Rekurze a zásobník. Rekurzivní volání metody

Abstraktní třída a rozhraní

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Java - výjimky. private void vstup() throws IOException {... }

JAVA V Assertions Java, zimní semestr

Generické programování

Jazyk C# (seminář 6)

20. Projekt Domácí mediotéka

typová konverze typová inference

Výčtový typ strana 67

Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy Příklad - Spojový seznam

Výčtové typy a kolekce v Javě, generické typy

Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy

GUI. Systémová integrace pro desktopové aplikace

Výčtové typy a kolekce v Javě, generické typy

JAVA Unit testing Java, zimní semestr

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

KTE / ZPE Informační technologie

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

JAVA. Java Management Extensions JMX

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Projekty pro výuku programování v jazyce Java

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Teoretické minimum z PJV

KTE / ZPE Informační technologie

Zápis programu v jazyce C#

Programování v C++ 2, 8. cvičení

Implementace abstraktních datových typů. Zásobník (Stack) Fronta (Queue) Obousměrná fronta (Dequeue) Vektor (Vector) Seznam (List)

Vláknové programování část V

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

OOPR_05. Případové studie

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

RMI Remote Method Invocation

Soubor jako posloupnost bytů

Z. Kotala, P. Toman: Java ( Obsah )

Pokročilé programování na platformě Java. Úvod

Java - řazení objektů

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Úvod do programování v jazyce Java

PŘETĚŽOVÁNÍ OPERÁTORŮ

Řídicí struktury. alg3 1

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Vytváření a použití knihoven tříd

Obsah Znovupou ˇzitelnost N avrhov e vzory Z asady programov an ı Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady... 2/ 46

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Seminář Java IV p.1/38

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

PROGRAMOVÁNÍ V C++ CVIČENÍ

Seminář Java II p.1/43

JAVA V RMI Java, letní semestr

8. přednáška: Soubory a proudy

Návrh softwarových systém. Návrh softwarových systémů

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Kolekce, cyklus foreach

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

11. Dědičnost. Dědičnost strana 103

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Objektově orientované programování v PHP 5. Martin Klíma

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

JAVA RMI Java, letní semestr 2018

Transkript:

Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator() metody interfacu Iterator boolean hasnext() Object next() void remove() iterator se typicky implementuje pomocí anonymní vnitřní třídy ve skutečnosti je Iterator generický typ, tj. Iterator<T> zatím to budeme ignorovat... 1

iterator příklad public class MyArrayWithIterator implements Iterable { private Object[] arr = new Object [5]; private int s = 0; public int size() { return s; public void add(object o) {... arr[s++] = o;... od Java 8 je remove() default implementace vyhazuje tuto výjimku public Iterator iterator() { return new Iterator() { private int index = 0; public boolean hasnext() { return index < s; public Object next() { return arr[index++]; public void remove() { throw new UnsupportedOperationException(); ; 2

Úkol 1 vytvořte interface MyCollection s metodami void add(object o) Object get(int i) void remove(object o) void remove(int i) int size() vytvořte implementaci interfacu MyCollection použijte pole, které se podle potřeby realokuje chybové stavy ošetřete výjimkami při přístupu mimo rozsah pole přidejte k implementaci iterator (viz předchozí 2 slidy) 3

Úkol 2 napište třídu která reprezentuje vyvážený binární vyhledávací strom (třeba AVL, RB, nebo jakýkoliv jiný) pro typ int přidejte ke třídě iterator, který projde strom od nejmenšího prvku k největšímu napište program který strom používá a data do něj načte z parametrů příkazové řádky použite Integer.parseInt(String s) pro převod z Stringu do intu nezapomeňte ošetřit případné výjimky, které metoda vyhodí, pokud řetězec nelze převést na int zamyslete jak upravit strom, aby nebylo nutné ho napsat pro konkretní typ, ale obecně pro Object tj. jak zařídit, aby vkládané prvky šly porovnávat naimplementujte 4

Testy... 5

Test 1 Co program vypíše true nebo false public class Test01 { public static void main(string[] argv) { System.out.println(test()); public static boolean test() { try { return true; finally { return false; Příklad založen na příkladu z J. Bloch, N. Gafter: Java Puzzlers 6

Test 2 Co program vypíše? public class Test02 { public static void main(string[] argv) { try { System.out.println("Hello world!"); System.exit(0); finally { System.out.println("Goodbye"); Příklad založen na příkladu z J. Bloch, N. Gafter: Java Puzzlers 7

Test 3 Co se vypíše public class ParamsTest { public ParamsTest(Object o) { System.out.println("ParamsTest(Object o)"); public ParamsTest(long[] a) { System.out.println("ParamsTest(long[] a)"); public static void main(string[] argv) { new ParamsTest(null); A nelze přeložit B ParamsTest(Object o) C ParamsTest(long[] a) Příklad založen na příkladu z J. Bloch, N. Gafter: Java Puzzlers 8

Test 3 C je správně Proč? Postup hledání metody/konstruktoru podle skutečných parametrů se vybere, co je použitelné z vybraných metod/konstruktorů se podle typů formálních parametrů vybere nejspecifičtější metoda/konstruktor ParamsTest(long[] a) je specifičtější než ParamTest(Object o) vše, co lze předat do long[] a, lze předat i do Object obraceně to ale neplatí 9

Test 4 Co se vypíše class A { public static void foo() { System.out.println("foo"); class B extends A { public static void foo() { System.out.println("bar"); A foo bar B foo foo C bar bar D něco jiného ZKOUŠKOVÝ PŘÍKLAD public class OverloadTest { public static void main(string[] argv) { A a = new A(); A b = new B(); a.foo(); b.foo(); 10

Test 4 B je správně statické metody nejsou virtuální 11

Java, zimní semestr Verze prezentace 2017 PJ03.cz.2017.01 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 12