Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

Podobne dokumenty
Programowanie w Javie - wykład 4

JAVA- wykład 3 Wprowadzanie danych Typ wyliczeniowy Tablice

Definiowanie własnych klas

Podstawy i języki programowania

Programowanie obiektowe

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Wykład 4: Klasy i Metody

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Komentarze. W Javie istnieją dwa rodzaje komentarze:

2 Tablice Tablice jednowymiarowe Tablice wielowymiarowe... 4

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Wykład 8: Obsługa Wyjątków

Programowanie w Javie wykład 5

Dokumentacja do API Javy.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Definiowanie własnych klas

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Metody Metody, parametry, zwracanie wartości

Programowanie Komputerów

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Podejście obiektowe. Tablice (1) obiektów

Wykład 3 Składnia języka C# (cz. 2)

Stałe oznaczane są słowem kluczowym final. Do stałej wartość można przypisać tylko raz. Dobrą konwencją jest nazywanie stałych wielkimi literami

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

JAVA- wykład 4 Wyjątki Operacje na napisach (klasy String, StringTokenizer, StringBuffer, StringBuilder )

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Podstawowe części projektu w Javie

Klasy: String, Random, Math. Korzystanie z dokumentacji.

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie w języku Java

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Programowanie obiektowe

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Podstawy programowania obiektowego

Wykład 5: Więcej o Klasach i Metodach

Programowanie obiektowe

Platformy Programistyczne Podstawy języka Java

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Programowanie, algorytmy i struktury danych

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie w Internecie. Java

Zaawansowane aplikacje WWW - laboratorium

Java EE produkcja oprogramowania

Wstęp do ruby dla programistów javy

Java Podstawy. Michał Bereta

Definicje klas i obiektów. Tomasz Borzyszkowski

Wykład 7: Pakiety i Interfejsy

Wybrane algorytmy tablicowe

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Podstawy Programowania C++

Wykład 2: Podstawy Języka

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wprowadzenie do języka Java

Tablice. Jones Stygar na tropie zmiennych

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

11.6 Klasa do obsługi liczb wymiernych

Wykład 02. Programowanie obiektowe. Maciej Wołoszyn 10 marca Spis treści.

tablica: dane_liczbowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Aplikacje w środowisku Java

Programowanie obiektowe

Język C, tablice i funkcje (laboratorium)

Języki programowania obiektowego Nieobiektowe elementy języka C++

Podstawy i języki programowania

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wykład 6: Dziedziczenie

Programowanie obiektowe

Programowanie obiektowe

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Funkcje. Wprowadzenie. Mirosław Ochodek

Dziedziczenie. dr Jarosław Skaruz

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie 2 - Tablice i łańcuchy

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe

Podstawy Java. Część II. mgr inż.marcin Borkowski

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Programowanie obiektowe

Podstawy Języka Java

Języki i metody programowania Java. Wykład 2 (część 2)

Transkrypt:

Tablice i łańcuchy znakowe jako obiektowe typy danych dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com

O czym będzie? Klasy String, StringBuffer, StringBuilder Tablice jednowymiarowe Tablice wielowymiarowe

Klasa String Pewną zaskakującą może właściwością klasy String jest to, że jej obiekty są niemodyfikowalne - to znaczy utworzonych za pomocą klasy String napisów nie możemy zmieniać (np. do napisu dodać inny). String s = "Ala"; s = s + " ma kota"; Modyfikowalne obiekty-łańcuchy znakowe definiują klasy StringBuffer i StringBuilder. StringBuffer sb = new StringBuffer(); sb.append("jakiś napis 1"); sb.append("jakiś napis 2"); sb.append(10); sb.append('\n'); sb.append (new Para(1,2));

Klasa StringBuffer import javax.swing.*; class Qtimer { private final long start; public QTimer() { System.gc(); start = System.currentTimeMillis(); public long getelapsed() { return System.currentTimeMillis() - start;

Klasa StringBuffer public class Test { public static void main(string args[]) throws InterruptedException { int n = Integer.parseInt(JOptionPane.showInputDialog("Liczba operacji")); // String QTimer t = new QTimer(); String stra = ""; for (int i = 1; i <= n; i++) stra += "A"; long eta = t.getelapsed(); System.out.println("String operator +; Czas: " + eta + " ms"); t = new QTimer(); StringBuffer sb = new StringBuffer(); for (int i = 1; i <= n; i++) sb.append("b"); sb.tostring(); long etb = t.getelapsed(); System.out.println("StringBuffer append. Czas: " + etb + " ms"); System.out.println("Wykonano " + n + " operacji."); System.out.println("Relacja String/StringBuffer = " + (double) eta/etb);

API klasy String charat(int index) compareto(string anotherstring) comparetoignorecase(string str) endswith(string suffix) equals(object anobject) indexof(string str) indexof(string str, int fromindex) lastindexof(string str) lastindexof(string str, int fromindex) length() tolowercase(), touppercase() trim() valueof(boolean b), valueof(char c), valueof(char[] data), valueof(double d)

API klasy String public class Toc { private String doc; private String toc = ""; private final String ls = System.getProperty("line.separator"); public Toc(String doc) { this.doc = doc; public String gettoc() throws IllegalStateException { int p = 0; while ((p = doc.indexof("<h2>", p))!= -1) { int end = doc.indexof("</h2>", p+4); if (end == -1) throw new IllegalStateException("Invalid document structure"); toc += doc.substring(p+4, end) + ls; p = end + 5; return toc;

Klasa StringTokenizer String expr = "21 + 21"; StringTokenizer st = new StringTokenizer(expr); int n = st.counttokens(); // n = 3 String s1 = st.nexttoken(); // napis "21 String s2 = st.nexttoken(); // napis "+ String s3 = st.nexttoken(); // napis "21" while (st.hasmoretokens()) { Sring s = st.nexttoken(); //... tu coś robimy z s String s1 = st.nexttoken(); // napis "21 String s2 = st.nexttoken(); // napis "+ String s3 = st.nexttoken(); // napis "21"

Tablice Tablice są zestawami elementów (wartości) tego samego typu, ułożonych na określonych pozycjach. Do każdego z tych elementów mamy bezpośredni (swobodny - nie wymagający przeglądania innych elementów zestawu) dostęp poprzez nazwę tablicy i pozycję elementu w zestawie, określaną przez indeks lub indeksy tablicy. W Javie tablice są obiektami, a nazwa tablicy jest nazwą zmiennej, będącej referencją do obiektu-tablicy. Obiekt-tablica zawiera elementy tego samego typu. Może to być dowolny z typów prostych lub referencyjnych. Zatem, w szczególności elementami tablic mogą być referencje do innych tablic. Mamy wtedy do czynienia z odpowiednikiem tablic wielowymiarowych.

Tablice Deklaracja tablicy składa się z: nazwy typu elementów tablicy, pewnej liczby par nawiasów kwadratowych nazwy zmiennej, która identyfikuje tablicę. int[] arr; // jest deklaracją tablicy liczb całkowitych (typu int), String[] s; // jest deklarację tablicy referencji do obiektów klasy String JButton[] b; // jest deklarację tablicy referencji do obiektów klasy JButton double[][] d; // jest deklaracją dwuwymiarowej tablicy liczb rzeczywistych Deklaracja tablicy z inicjacją za pomocą nawiasów klamrowych ma postać: typ[] zm_tab = { wart_1, wart_2,... wart_n typ - typ elementów tablicy, zm_tab - nazwa zmiennej tablicowej, wart_i - wartość i-go elementu tablicy int[] arr = { 1, 2, 7, 21 ;

Tablice Tworzenie tablicy za pomocą wyrażenia new (bez inicjacji elementów) ma postać new T[n]; T - typ elementów tablicy n - rozmiar tablicy (liczba elementów tablicy) int[] arr; // deklaracja tablicy arr = new int[4]; // utworzenie tablicy 4 elementów typu int // lub int[] arr = new int[4];

Odwoływanie się do elementów tablic Indeksy tablicy mogą być wyłącznie wartościami typu int. Mogą być dowolnymi wyrażeniami, których wyliczenie daje wartość typu int. Tablice zawsze indeksowane są poczynając od 0. Pierwszy element n-elementowej tablicy ma indeks 0, a ostatni - indeks n-1. public class Test { public static void main(string[] args) { int[] a = {1, 2, 3, 4 ; System.out.println(a[4]); System.out.println(a[3]); System.out.println(a[2]); System.out.println(a[1]); public class Test { public static void main(string[] args) { int[] a = {1, 2, 3, 4 ; for (int i=3; i>=0; i--) System.out.println(a[i]);

Tablice jako wyniki i argumenty metod Ponieważ zmienna oznaczająca tablicę zawiera referencje do tablicy, to - pod pewnymi warunkami - możemy jej przypisać referencję do innej tablicy. Zmiennej tablicowej typu typa[] można przypisać wartość zmiennej tablicowej typu typb[] pod warunkiem, że dopuszczalne jest przypisanie wartości typu B zmiennej typu A. Każdej zmiennej tablicowej - jak każdej zmiennej zawierającej referencję - można przypisać wartość null W bardzo naturalny sposób możemy przypisywać referencje w przypadku gdy mamy do czynienia z tym samym typem tablic (a zatem - z tym samym typem elementów oraz z tą samą liczbą wymiarów). Tak samo jak w przypadku innych obiektów - nie należy mylić przypisania zmiennych tablicowych (czyli referencji) z kopiowaniem zawartości tablic.

Tablice jako wyniki i argumenty metod public class Test { public static void main(string[] args) { byte[] b1 = {1, 2, 3 ; byte[] b2 = {1, 2, 3, 5, 5 ; byte[] b = b2; b2 = b1; b2[0] = 77; b[0] = 99; System.out.print("\nTablica \"b1\":"); for (int i=0; i < b1.length; i++) System.out.print(" " + b1[i]); System.out.print("\nTablica \"b2\":"); for (int i=0; i < b2.length; i++) System.out.print(" " + b2[i]); System.out.print("\nTablica \"b\":"); for (int i=0; i < b.length; i++) System.out.print(" " + b[i]);

Tablice jako wyniki i argumenty metod public class Test { Test() { int[] a = {1, 2, 3, 4 ; int[] wynik = dblval(a); for (int i=0; i < wynik.length; i++) System.out.print(" " + wynik[i]); int[] dblval(int[] tab) { int[] w = new int[tab.length]; for (int i=0; i < w.length; i++) w[i] = tab[i]*2; return w; public static void main(string[] args) { new Test();

Tablice jako wyniki i argumenty metod

Tablice jako wyniki i argumenty metod public class Test3 { public static void main(string[] args) { new Test3(); Test3() { int[] tab = { 2, 5, 7 ; chgtab1(tab); showtab("po wywołaniu metody chgtab1 tablica oznaczana przez tab", tab); chgtab2(tab); showtab("po wywołaniu metody chgtab2 tablica oznaczana przez tab", tab); void chgtab1(int[] tab) { int[] nowa = { 3, 6, 8 ; tab = nowa; showtab("w metodzie chgtab1 tablica oznaczana przez tab", tab); void chgtab2(int[] tab) { for (int i=0; i < tab.length; i++) tab[i]++; void showtab(string s, int[] tab) { System.out.println(s); for (int i=0; i < tab.length; i++) System.out.print(" " + tab[i]); System.out.print('\n');

Rozszerzona instrukcja FOR dla tablic Składnia gdzie: for ( Typ id : expr ) stmt expr - wyrażenie, którego typem jest (m.in.) typ tablicowy, Typ - nazwa typu elementów zestawu danych (np. int albo String) id - identyfikator zmiennej, na którą będzie podstawiany kolejny element zestawu danych; do tej zmiennej mamy dostęp w stmt (czyli instrukcji wykonywanej w każdym kroku for). double[] nums = { 1, 2, 3 ; for (double d : nums) System.out.println(d + 1); String[] names = { "A", "B", "C" for (String s : names) System.out.println(s);

Argumenty wiersza poleceń public class Program { //... public static void main(string[] args) { //... java Program arg1 arg2 public class Test { public static void main(string[] args) { if (args.length!= 2) syntax(); System.out.println(args[0] + " " + args[1]); static void syntax() { System.out.println("Syntax:... "); System.exit(1);

Tablice obiektowe String[] town = { "Warszawa", "Poznań", "Kraków", "Gdańsk" ; for (int i=0; i<town.length; i++) System.out.println(town[i]); przestawienie miejscami pierwszy i ostatni element: String last = town[town.length -1]; town[town.length -1] = town[0]; town[0] = last; public class TabPar { public static void main(string[] args) { Para[] tabpar = new Para[10]; for (int i=0; i < tabpar.length; i++) tabpar[i].show("para " + (i+1));

Tablice obiektowe public class TabPar { public static void main(string[] args) { Para[] tabpar = new Para[10]; for (int i=0; i < tabpar.length; i++) tabpar[i] = new Para(i+1, i+2); for (int i=0; i < tabpar.length; i++) tabpar[i].show("para " + (i+1)); Para 1 ( 1, 2 ) Para 2 ( 2, 3 ) Para 3 ( 3, 4 ) Para 4 ( 4, 5 ) Para 5 ( 5, 6 ) Para 6 ( 6, 7 ) Para 7 ( 7, 8 ) Para 8 ( 8, 9 ) Para 9 ( 9, 10 ) Para 10 ( 10, 11 )

Tablice wielowymiarowe Tablice wielowymiarowe w Javie realizowane są jako tablice elementów, będących referencjami do tablic. Przykładowe sposoby deklaracji i inicjacji: a. inicjacja w nawiasach klamrowych int[][] mac1 = { { 1, 2, 3,, { 4, 5, 6, ; b. dynamicznie int[][] mac2 = new int[n][m];

Tak, to już KONIEC Dziękuję za uwagę!