Fondasi Pemrograman & Struktur Data Stack & Queue with java API Random Generators, Simulation AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF Tujuan Pertemuan Memahami Java API untuk Stack Mampu membuat program stack dengan java API Memahami Java API untuk Queue Memahami Java API untuk LinkedList dan LinkedList Method() Mampu membuat program queue dengan java API Mampu membuat angka random dengan memanfaatkan java API. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF Stack dengan Java API Kita sudah mengetahui algoritma stack (tumpukan). Algoritma stack tersebut perlu diketahui terkait kebutuhan akses data yang sifatnya berupa tumpukan. Java library telah memiliki method yang efisien, general, dan tepat untuk digunakan pada stack. Method stack pada java library tersebut adalah: java.util.Stack; AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Stack dengan Java API Penggunaan Sebelum menggunakan method Stack java API, lakukan import dengan menuliskan: import java.util.Stack; Method Summary boolean empty() Tests if this stack is empty. E peek() Looks at the object at the top of this stack without removing it from the stack. pop() Removes the object at the top of this stack and returns that object as the value of this function. push(E item) Pushes an item onto the top of this stack. int search(Object o) Returns the 1-based position where an object is on this stack. Selanjutnya buat object dengan type Stack: Stack tumpukanBuku = new Stack(); Selanjutnya gunakan method sesuai fungsinya AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Stack dengan Java API Penggunaan import java.util.Stack; public class stackOfStringsAPI { public static void main(String[] args) { Stack tumpukanBuku = new Stack(); tumpukanBuku.push("buku1"); tumpukanBuku.push("buku2"); tumpukanBuku.push("buku3"); System.out.println(tumpukanBuku.search("buku3")); System.out.println("Posisi teratas: " + tumpukanBuku.peek()); System.out.println(tumpukanBuku.pop() + " diangkat"); } Untuk menambahkan item pada tumpukan Untuk mencari posisi suatu item pada tumpukan Untuk mengeluarkan item pada tumpukan teratas dari tumpukan Untuk mengeluarkan item pada tumpukan teratas dari tumpukan AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Stack dengan Java API Latihan Penggunaan Buat program dengan menggunakan stack, dengan ketentuan sbb: Program menumpukkan buku dengan urutan Buku Disain Buku HTML Buku Java Buku Algoritma Buku Database Tumpukan sekarang: Buku Disain Buku HTML Buku Java Buku Algoritma Buku Database Masukkan judul buku yang ingin diambil: Program menampilkan tumbukan buku sesuai urutan tumpukan (buku yg pertama diletakkan berada paling bawah, seperti contoh di atas ) Program memfasilitasi user untuk mengambil salah satu buku dengan menuliskan judul buku yang akan diambil Program menampilkan tumpukan buku setelah salah satu buku diambil user import java.util.Stack; import java.util.Scanner; public class aplikasiDgnStackAPI { private static Stack tumpukanBuku = new Stack(); private static Stack tumpukanBukuSementara = new Stack(); public static void bacaTumpukan() { while(!(tumpukanBuku.empty())) { tumpukanBukuSementara.push(tumpukanBuku.pop()); System.out.println(tumpukanBukuSementara.peek()); } while(!(tumpukanBukuSementara.empty())) { tumpukanBuku.push(tumpukanBukuSementara.pop()); public static void main(String[] args) { Scanner in = new Scanner( System.in ); tumpukanBuku.push("Buku Database"); tumpukanBuku.push("Buku Algoritma"); tumpukanBuku.push("Buku Java"); tumpukanBuku.push("Buku HTML"); tumpukanBuku.push("Buku Disain"); System.out.println("Tumpukan sekarang:"); bacaTumpukan(); System.out.print("\nMasukkan judul buku yang ingin diambil: "); String cari = in.nextLine(); int x = tumpukanBuku.search(cari); if(tumpukanBuku.search(cari)>0) { for(int i=1; i<x; i++) { System.out.println(tumpukanBuku.pop() + " sudah diambil"); while(!(tumpukanBukuSementara.empty())) { System.out.println("\n Tumpukan sekarang:"); AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF Queue dengan Java API Kita sudah mengetahui algoritma queue (antrian). Algoritma atrian tersebut perlu diketahui terkait kebutuhan akses data yang sifatnya berupa antrian. Java library telah memiliki method yang efisien, general, dan tepat untuk digunakan pada queue. Method queue pada java library tersebut adalah: java.util.Queue; Untuk menggunakan method Queue juga diperlukan LinkedList, mengingat queue menggunakan LinkedList sebagai node dalam antrian. java.util.LinkedList; AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Queue dengan Java API Penggunaan Sebelum menggunakan method Queue java API, lakukan import dengan menuliskan: Method Summary boolean add(E e) Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions, returning true upon success and throwing an IllegalStateException if no space is currently available. E element() Retrieves, but does not remove, the head of this queue. boolean offer(E e) Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions. peek() Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty. poll() Retrieves and removes the head of this queue, or returns null if this queue is empty. E remove() Retrieves and removes the head of this queue. import java.util.Queue; import java.util.LinkedList Selanjutnya buat object dengan type Queue: Queue tumpukanBuku = new LinkedList(); Selanjutnya gunakan method sesuai fungsinya AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Queue dengan Java API Penggunaan import java.util.Queue; import java.util.LinkedList; public class queueAPI { public static void main(String[] args) { Queue antrian = new LinkedList(); System.out.println(antrian.add("budi")); antrian.add("ani"); antrian.add("Rani"); antrian.add("Stella"); antrian.add("Martha"); System.out.println("Posisi Depan: " + antrian.element()); System.out.println(antrian.remove() + " Selesai."); } Untuk menambahkan item pada antrian Untuk membaca item head pada antrian. Untuk mengeluarkan item head dari antrian. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF LinkedList API Sebelum menggunakan method LinkedList java API, lakukan import dengan menuliskan: import java.util.LinkedList Selanjutnya buat object dengan type Queue: LinkedList<Integer> theList = new LinkedList<Integer>( ); Selanjutnya gunakan method sesuai fungsinya AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF LinkedList Method() Method Summary void add(int index, Object element) Inserts the specified element at the specified position in this list. boolean add(Object o) Appends the specified element to the end of this list. addAll(Collection c) Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator. addAll(int index, Collection c) Inserts all of the elements in the specified collection into this list, starting at the specified position. addFirst(Object o) Inserts the given element at the beginning of this list. addLast(Object o) Appends the given element to the end of this list. clear() Removes all of the elements from this list. Object clone() Returns a shallow copy of this LinkedList. contains(Object o) Returns true if this list contains the specified element. get(int index) Returns the element at the specified position in this list. getFirst() Returns the first element in this list. getLast() Returns the last element in this list. Method Summary int indexOf(Object o) Returns the index in this list of the first occurrence of the specified element, or -1 if the List does not contain this element. lastIndexOf(Object o) Returns the index in this list of the last occurrence of the specified element, or -1 if the list does not contain this element. ListIterator listIterator(int index) Returns a list-iterator of the elements in this list (in proper sequence), starting at the specified position in the list. Object remove(int index) Removes the element at the specified position in this list. boolean remove(Object o) Removes the first occurrence of the specified element in this list. removeFirst() Removes and returns the first element from this list. removeLast() Removes and returns the last element from this list. set(int index, Object element) Replaces the element at the specified position in this list with the specified element. size() Returns the number of elements in this list. Object[] toArray() Returns an array containing all of the elements in this list in the correct order. toArray(Object[] a) Returns an array containing all of the elements in this list in the correct order; the runtime type of the returned array is that of the specified array. /* * Penggunaan API LinkedList */ import java.util.Scanner; import java.util.LinkedList; public class cobaLinkedList { public static void main(String[] args) { LinkedList<String> peserta = new LinkedList<String>(); Scanner masukan = new Scanner(System.in); System.out.println("Jumlah peserta:"); int n = masukan.nextInt(); for(int i=0; i<n;i++){ System.out.println("peserta: "); Scanner orang = new Scanner(System.in); peserta.add(orang.nextLine()); } System.out.print("Peserta: "); for(int i=0; i<n; i++){ System.out.print(peserta.get(i) + ", "); System.out.println("\n \n Pemanfaatan method lainnya pada LinkedList"); LinkedList<String> theList = new LinkedList<String>( ); theList.addFirst("Item"); theList.add("item1"); theList.addFirst("item2"); theList.addLast("Item3"); System.out.println(theList.getFirst()); System.out.println(theList.getLast()); System.out.println(theList.contains("item2")); AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF Random Numbers Random numbers digunakan dan sangat diperlukan dalam beberapa penggunaan, diantaranya: cryptography, simulation, and program testing. Angka yang dihasilkan oleh proses random oleh komputer sangat tergantung pada algoritma yang digunakan untuk menghasilkan angka-angka tersebut dan tidak random secara penuh (pseudorandom). AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Random Numbers Methods Method Summary protected int next(int bits) Generates the next pseudorandom number. boolean nextBoolean() Returns the next pseudorandom, uniformly distributed boolean value from this random number generator's sequence. void nextBytes(byte[] bytes) Generates random bytes and places them into a user-supplied byte array. double nextDouble() Returns the next pseudorandom, uniformly distributed double value between 0.0 and 1.0 from this random number generator's sequence. float nextFloat() Returns the next pseudorandom, uniformly distributed float value between 0.0 and 1.0 from this random number generator's sequence. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Random Numbers Methods Method Summary double nextGaussian() Returns the next pseudorandom, Gaussian ("normally") distributed double value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence. int nextInt() Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence. nextInt(int n) Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. long nextLong() Returns the next pseudorandom, uniformly distributed long value from this random number generator's sequence. void setSeed(long seed) Sets the seed of this random number generator using a single long seed. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF Random Numbers Contoh import java.util.Random; public class random1 { public static void main(String[] args) { byte[] angka=new byte[5]; Random rand = new Random(); System.out.print("Random Integer: "); for(int i=1; i<=5; i++) { System.out.print(rand.nextInt(100) + " "); } System.out.print("\nRandom byte isi ke array: "); rand.nextBytes(angka); for(int i=0; i<=4; i++) { System.out.print(angka[i] + " "); Membuat object random dengan nama rand Generate angka random dengan tipe integer Random Integer: 78 76 36 59 94 Generate angkat random dengan type byte dan menyimpannya dalam array dengan nama angka Random byte isi ke array: 73 115 -5 -98 -87 Mencetak isi array AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Simulation Josephus Problem Game simulation dengan The Josephus problem : n orang duduk membentuk lingkaran; Dimulai dari orang nomor 1 memegang benda, kemudian benda tersebut pindah ke orang nomor berikutnya dan seterusnya; Setelah beberapa kali (m) pindah, apabila m sesuai dengan angka eliminasi maka orang yg memegang benda tersebut tereliminasi. Selanjutnya dimulai lagi dari orang yang berada disebelah orang yg tereliminasi tersebut dengan hitungan m reset dari awal. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Simulation Josephus Problem Terdapat sejumlah n orang dalam suatu lingkaran dengan kesepakatan (ketentuan), bahwa setiap mth orang akan di-eksekusi dari lingkaran dan seterusnya sampai hanya tinggal 1 orang, cari posisi L(n, m) dimana posisi yang aman agar menjadi orang terakhir dalam lingkaran (pemenang). (Ball and Coxeter 1987). Gambar di bawah mencerminkan sequence (aliran) dari proses Josephus Problem. Misal: n=4 men dengan nomer 1 to 4 Dan setiap setiap m=2 langkah terjadi eksekusi. 1 2 3 4 AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Josephus Problem Code dengan LinkedList Code Josephus Problem dengan arrayList Code Josephus Problem dengan LinkedList AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Josephus Problem Code dengan LinkedList import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; public class josephusDariBuku_main { public static void main(String[] args) { int theLastMen = josephus(7,4); System.out.print(theLastMen); } public static int josephus( int people, int passes ) { Collection<Integer> theList = new LinkedList<Integer>( ); // Construct the list for( int i = 1; i <= people; i++ ) theList.add( i ); // Play the game; Iterator<Integer> itr = theList.iterator( ); while( people-- != 1 ) { for( int i = 1; i <= passes; i++ ) { if( !itr.hasNext( ) ) itr = theList.iterator( ); itr.next( ); } System.out.println(theList.toString()); itr.remove( ); return itr.next( ); AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Simulation Josephus Problem Winner K = 4, 3, 5, 4 1 M = 5 2 1 4 3 5 2 4 3 AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Simulation Event Driven Simulation Untuk simulasi event driven ini kita misalkan simulasi operasi perbankan dengan k tellers untuk menghitung jumlah minimum k (teller) untuk mendapatkan waktu pelayanan yang layak. Dengan menggunakan komputer untuk simulasi ini ada beberapa manfaat yang didapatkan: Informasi yang diharapkan bisa didapat tanpa melibatkan pelanggan sesungguhnya. Simulasi dengan komputer lebih cepat dari implementasi aktual, karena kecepatan dari proses perhitungan komputer. Simulasi dengan komputer mudah di replikasi, untuk keperluan uji coba dengan beberapa sample dan struktur data untuk mendapatkan. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Simulation Event Driven Simulation Misal; untuk menghitung secara statistik tentang berapa lama rata-rata seorang pelanggan harus menunggu dan seberapa persen waktu aktual yang terpakai oleh tellers dalam melayani pelanggan. Terkait hal tersebut terdapat 2 events: Pelanggan datang ke teller. Pelanggan meninggalkan teller dan teller bebas. AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF
Universitas Pembangunan Jaya – SIF_TIF See You Next Session Thank’s AER – 2011/2012 Universitas Pembangunan Jaya – SIF_TIF