Rabu, 19 Desember 2012

Java Array


Java Array

1.       Tujuan
Dalam bab ini, kita akan mendiskusikan mengenai array dalam Java. Pertama, kita akan mendefinisikan apa yang dimaksud dengan array, kemudian kita juga akan mendiskusikan bagaimana mendeklarasikannya dan menggunakannya dalam Java.

Pada akhir pembahasan, diharapkan pembaca dapat :

- Mendeklarasikan dan membuat array
- Mengakses elemen-elemen didalam array
- Menentukan jumlah element didalam sebuah array
- Mendeklarasikan dan membuat array multidimensi

2.         Pengenalan Array
Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam pendeklarasian variabel, kita sering menggunakan sebuah tipe data beserta nama variabel atau identifier yang unik. Apabila kita ingin menggunakan variabel tersebut, kita akan memanggil dengan nama identifier-nya.

Sebagai contoh, kita memiliki tiga variabel dengan tipe data int yang memiliki identifier berbeda untuk tiap variabel.

int number1;
int number2;
int number3;

number1 = 1;
number2 = 2;
number3 = 3;

Seperti yang dapat Anda perhatikan pada contoh diatas, kode tersebut akan sia-sia karena harus menginisialisasi dan menggunakan setiap variabel padahal sebenarnya variabel-variabel tersebut digunakan untuk tujuan yang sama. Pada bahasa pemrograman Java maupun di bahasa pemrograman yang lain, terdapat sebuah kemampuan untuk menggunakan satu variabel yang dapat menyimpan beberapa data dan memanipulasinya dengan lebih efektif. Tipe variabel inilah yang disebut sebagai array.



Sebuah array akan menyimpan beberapa item data yang memiliki tipe data
sama didalam sebuah blok memori yang berdekatan yang kemudian dibagai menjadi beberapa ruang. Array adalah sebuah variabel/sebuah lokasi tertentu yang memiliki satu nama sebagai identifier, namun identifier ini dapat menyimpan lebih dari sebuah nilai.


3.         Pendeklarasian Array
Array harus dideklarasikan seperti layaknya sebuah variabel. Pada saat
mendeklarasikan array, anda harus membuat sebuah daftar dari tipe data, yang diikuti oleh sepasang tanda kurung [], lalu diikuti oleh nama identifier-nya. Sebagai contoh,

int []ages;

atau Anda dapat menempatkan sepasang tanda kurung [] sesudah nama identifier. Sebagai contoh,

int ages[];

Setelah pendeklarasian array , kita harus membuat array dan menentukan berapa panjangnya dengan sebuah konstruktor. Proses ini di Java disebut sebagai instantiation (istilah dalam Java yang berarti membuat). Untuk meng-instantiate sebuah obyek, kita membutuhkan sebuah konstruktor. Kita akan membicarakan lagi mengenai instantiate obyek dan pembuatan konstruktor pada bagian selanjutnya. Sebagai catatan bahwa ukuran dari array tidak dapat diubah setelah anda menginisialisasinya.

Sebagai contoh,

//deklarasi
int ages[];

//instantiate obyek
ages = new int[100];

atau bisa juga ditulis dengan,

//deklarasi dan instantiate obyek
int ages[] = new
int[100];

Pada contoh diatas, pendeklarasian tersebut akan memberitahukan kepada compiler Java, bahwa identifier ages akan digunakan sebagai nama array yang berisi data bertipe integer, dan dilanjutkan dengan membuat atau meng-instantiate sebuah array baru yang terdiri dari 100 elemen. Selain menggunakan sebuah pernyataan new untuk meng-instantiate array, Anda
juga dapat mendeklarasikan, membangun, kemudian memberikan sebuah nilai pada array sekaligus dalam sebuah pernyataan.

Sebagai contoh,
Gambar 2: Inisialisasi Arrays
//membuat sebuah array yang berisi variabel-variabel
//boolean pada sebuah identifier. Array ini terdiri dari 4
//elemen yang diinisilisasikan sebagai value
//{true,false,true,false}
boolean results[] ={ true, false, true, false };

//Membuat sebuah array yang terdiri dari penginisialisasian  
//4variabel double bagi value {100,90,80,75}
double []grades = {100, 90, 80, 75};

//Membuat sebuah array String dengan identifier days. Array
//ini terdiri dari 7 elemen.
String days[] = { “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”,
“Sun”};


4.         Pengaksesan sebuah elemen array
Untuk mengakses sebuah elemen dalam array, atau mengakses sebagian dari array, Anda harus menggunakan sebuah angka atau yang disebut sebagai indeks atau subscript.

Pada saat memasukkan nilai ke dalam array, sebuah nomor indeks atau subscript telah diberikan kepada tiap anggota array, sehingga program dan programmer dapat mengakses setiap nilai pada array apabila dibutuhkan. Nilai indeks selalu dalam tipe integer, dimulai dari angka nol dan dilanjutkan ke angka berikutnya sampai akhir array. Sebagai catatan bahwa indeks didalam array dimulai dari 0 sampai dengan (ukuranArray-1).

Sebagai contoh, pada array yang kita deklarasikan tadi, kita mempunyai,

//memberikan nilai 10 kepada elemen pertama array
ages[0] = 10;

//mencetak elemen array yang terakhir
System.out.print(ages[99]);

Perlu diperhatikan bahwa sekali array dideklarasikan dan dikonstruksi, nilai
yang disimpan dalam setiap anggota array akan diinisialisasi sebagai nol. Oleh karena itu, apabila Anda menggunakan tipe data seperti String, array tidak akan diinisalisasi menjadi string kosong “”. Untuk itu Anda tetap harus membuat String array secara eksplisit.

Berikut ini adalah contoh kode untuk mencetak seluruh elemen didalam array. Dalam contoh ini digunakanlah pernyataan for loop, sehingga kode kita menjadi lebih pendek.

public class ArraySample{
public static void main( String[] args ){

int[] ages = new int[100];

for( int i=0; i<100; i++ ){
System.out.print( ages[i] );
}
}
}

Petunjuk penulisan program:
1.   Biasanya, lebih baik menginisialisasi atau meng-instantiate array setelah Anda mendeklarasikannya. Sebagai contoh pendeklarasiannya

int []arr = new int[100];
lebih disarankan daripada,
int []arr;
arr = new int[100];

2.    Elemen-elemen dalam n-elemen array memiliki indeks dari 0 sampai n-1. Perhatikan disini bahwa tidak ada elemen array arr[n]. Hal ini akan menyebabkan array-index out-of-bounds exception.

3.    Anda tidak dapat mengubah ukuran dari sebuah array




5.         Panjang Array
Untuk mengetahui berapa banyak elemen didalam sebuah array, Anda dapat
menggunakan atribut length dari array. Atribut ini akan mengembalikan ukuran dari array itu sendiri. Sebagai contoh,

arrayName.length

Pada contoh sebelumnya, kita dapat menuliskannya kembali seperti berikut ini,

public class ArraySample
{
public static void main( String[] args ){

int[] ages = new int[100];

for( int i=0; i<ages.length; i++ ){
System.out.print( ages[i] );
}
}
}


Petunjuk penulisan program:
1.   Pada saat pembuatan for loop untuk memproses elemen-elemen dalam array, gunakanlah at r i but length yang di l etakkan di dalam bag ian pengkondisian dar i fo r loop. Hal ini akan menyebabkan loop secara otomatis menyesuaikan diri terhada ukuran array yang berbeda-beda.
2.    Pendeklarasian ukuran array di program Java, biasanya menggunakan sebuah konstanta untuk mempermudah. Sebagai contoh,

final int ARRAY_SIZE = 1000;        //pendeklarasian constant
. . .
int[] ages = new int[ARRAY_SIZE];



6.          Array Multidimensi
Array multidimensi diimplementasikan sebagai array yang terl etak di dalam array. Array multidimensi dideklarasikan dengan menambahkan jumlah tanda kurung setelah nama array. Sebagai contoh,

// Elemen 512 x 128 dari integer array
int[][] twoD = new int[512][128];

// karakter array 8 x 16 x 24
char[][][] threeD = new char[8][16][24];

// String array 4 baris x 2 kolom
String[][] dogs = {{ "terry", "brown" },
{ "Kristin", "white" },
{ "toby", "gray"},
{ "fido", "black"}
};

Untuk mengakses sebuah elemen didalam array multidimensi, sama saja dengan mengakses array satu dimensi. Misalnya saja, untuk mengakses elemen pertama dari baris pertama didalam array dogs, kita akan menulis,

System.out.print( dogs[0][0] );
Kode diatas akan mencetak String “terry” di layar.

Sabtu, 15 Desember 2012

Pengurutan Data


PENGURUTAN DATA

Peroses pengurutan banyak ditemuan dalam komputer. Hal ini karena data yang sudah urut akan lebih cepat untuk dicari. Untuk membentuk data yang tidak urut menjadi data yang urut terdapat berbagai algoritma yang bisa digunakan.
Perlu diketahui bahwa pengurutan sendiri dapat dilakukan terhadap data yang secara keseluruhan diletakan dalam memori ataupun terhadap data yang tersimpan pada pengingat eksternal.
Di dalam pengurutan data terdapat istilah ascending dan descending. Pengurutan dengan dasar dari nilai yang kecil menuju ke nilai yang besar disebut ascending (urut naik), sedangkan yang disusun atas dasar nilai besar ke kecil disebut descanding (urut turun).
1. Metode Bubble Sort
Metode bubble sort merupakan metode tersederhana untuk melakukan pengurutan data, tetapi memiliki kinerja terburuk untuk data yang besar. Pengurutan dilakukan dengan membandingkan sebuah bilangan dengan seluruh biangan yang terletak sesudah bilangan tersebut. penukaran kalau satu kriteria terpenuhi.

2. Metode Pengurutan Seleksi
Pengurutan Seleksi (selection sort) mempunyai mekanisme seperti berikut:
Mula-mula suatu penujuk (diberi nama posAwal), yang menujuk kelokasi awal pengurutan data, diatur agar berisi indeks pertama dalam larik. Selajutnya, dicari bilangan terkecil yang terletak antara posisi sesudah yang ditujuk oleh petunjuk tersebut hingga elemen yang terakhir dalam larik. Lokasi bilangan ini ditunjuk oleh posMin. Lalu, tukarkan nilai bilangan terkecil tersebut dengan nilai yang ditunjuk oleh posAwal. Proses seperti ini diulang dari posAwal bernilai 0 hingga n-1, dengan n menyatakan jumlah elemen dalam larik.

3. Pengurutan dengan Penyisipan
   Pengurutan dengan penyisipan (insertion sort) adalah suatu metode yang melakukan pengurutan dengan cara menyisipkan data yang belum urut ke dalam baagian data yang telah diurutkan. Konsep seperti ini biasa dilakukan pada permainan kartu. Ketika sebuah kartu didapatkan (hasil pembagian dari pengocokan kartu) kartu akan disisipkan oleh pemain pada posisi yang tepat sehingga penambahan kartu tersebut membuat kartu terurutkan. 


Pencarian Data


PENCARIAN DATA

Pencarian (searching) merupakan tindakan untuk mendapatkan suatu data dalam kumpulan data. Dalam kehidupan sehari-hari, seringkali kita berurusan dengan pencarian; misalnya untuk menentukan nomor telepon seseorang pada buku telpon atau mencari suatu istilah dalam kamus. Pada aplikasi komputer, pencarian kerap dilakukan; misalnya untuk mendapatkan informasi suatu kata dalam kamus digital, mendapatkan nomor telepon berdasarkan suatu alamat atau nama perusahaan.

Untuk keperluan mencari data, terdapat beragam algoritma pencarian (search alorithm). Yang dimaksud dengan algoritma pencarian adalah “algoritma yang menerima sebuah argumen a dan mencoba untuk menentukan sebuah rekaman yang memiliki kunci a”. Sebagai contoh, dikehendaki untuk mendapatkan mahasiswa dengan nomor 9834567. Hasilny adalah rekaman yang berisi data mahasiswa tersebut; yang barang kali berisi nama, alamat, tanggal lahir, dan nama program studi. Dalam implementasinya, algoritma bisa jadi memeberikan nilai balik berupa sebuah rekaman yang diperoleh tetapi bisa pula hanya meme  rikan pointer yang menunjuk kesebuah rekaman.

Pencariaan dapat dilakukan terhadap data yang secra keseluruhan berada dalam memori komputer atau pun terhadap data  yang berada dalm penyimpanan eksternal (hard disk). Pencarian yang dilakukan terhadap data yang berada dalam memori komputer dikenel dengan sebutan pencarian internal, sedangakan pencarian yang dilakukan pada media penyimpanan eksternal disebut pencarian eksternal.

Catatan:
Selain itu, pencarian dapat dilakukan terhadap data yang tidak urut ataupunterhadap data yang sudah urut. Kedua model pencarian seperti itu akan dibahas.

1. Pencarian Sekuensial
Pencarian sekuensial (pencarian linear) merupak model pencarian yang paling sederhana yang dilakukan terhadap suatu kumpulan data.

Secara konsep, penjelasannya adalah seperti berikut: Terdapat L yang merupakan larik yang berisi n buah data(L[0], L[1], L[2], …, L[n-1]) dan k adalah data yang hendak dicari. Pencarian dilakukan untuk menemukan
L[i] = k
dengan i adalah bilangan indeks trkecil yang memenuhi kondisi 0<k<n-1. Tentu saja ada kemungkinan bahwa data yang dicari tidak ditemukan.
Contoh:
     Lß[10, 9, 4, 6, 4, 3, 2, 5]
Di manakah posisi 4 yang pertama? Dalam hal ini k adalah 4 dan k ditemukan pada posisi dengan indeks berupa 2.

2. Pencarian Terhadap Data Urut
Apabila kumpulan data dalam keadaan urut, pencarian data dengan menggunakan pencarian sekuensial akan memakan waktu yang lama jika jumlah data dalam kumpulan data kumpulan data tersebut sangat banyak. Untuk mengatasi hal itu terdapat algoritma yang dirancang agar pencarian data dapat dilakukan secara efesien. Metode yang digunakan dikenal dengan sebutan pencarian biner (binary search).

Pencarian biner dilakukan dengan membagi larik menjadi dua bagian dengan jumlah ynag sama atau berbeda 1 jika jumlah data semua ganjil. Data yang dicari kemudian dibandingkan dengan data terakhir pada bagian utama. Dalam hal ini ada tiga kemungkinan yang terjadi.
1.   Data yang dicari sama dengan elemen terakhir pada bagian pertama dalam larik. Jika kondisi ini terpenuhi, data yang dicari berarti ditemukan.
2.   Data yang dicari bernilai kurang dari nilai elemen terakhir pada bagian pertama dalam larik. Pada keadaan ini, pencarian diteruskan pada bagian pertama.
3.   data yang dicari bernilai lebih dari elemen terakhir pada bagian pertama dalam larik. Pada keadaan ini, pencarian diteruskan pada bagian kedua.

Rekursi


REKURSI
1. Mengenal Rekursi
Reukrsi dalam kemampuan subrutin untuk memanggil dirinya sendiri. adapun suatu subrutin yang memenggil dirinya sendiri sepeti itu dinamakan subrutin rekursif. Pada beberapa persoalan, kemampuan seperti itu sangat berguna karena memepermudah solusi. Namun demikian, rekursi rekursi juga memiiki kelemahan, yaitu memungkinkan terjadinya overflow pada stack (stack tidak mampu lagi menangani permintaan pemanggilan subrutin karana kehabisan memeori). Itulah sebabnya harus ada jaminan bahwa proses rekursi akan berhenti pada suatu waktu tertentu, yang menyebabkan pemanggilan fungsi terakhir.


Catatan:
Stack adalah area memori yang dipakai untuk variabel lokal dan untuk mengalokasikan memori ketika suatu fungsi dipanggil.   
   

Subrutin


SUBRUTIN

1. Penulisan Algoritma Untuk Subrutin
Subrutin adalah kumpulan perintah yang ditunjukan untuk menangani sesuatu tindakan dengan tunju untuk memudahkan pembuatan program mengingat subrutin bisa dipanggil berkali-kali dalam suatu program. Subrutin melibatkan argumen yang dipakai sebagai upaya untuk menyertakan suatu nilai dari luar.

Dalam bentuk algoritma, suatu subrutin ditulis dengan bentuk sebagai berikut:

   SUBRUTIN namaSubrutin(daftarParameter)
      pernyataan1
      pernyataan2
      …
      pernyataanN
   AKHIRI-SUBRUTIN

Dalam hal ini, bagian
   SUBRUTIN namaSubrutin(daftarParameter)
disebut dengan judul subrutin.

Sebuah subrutin dapat memberikan nilai baik ataupun tidak. Nilai balik adalah nilai yang diberikan kepemanggilnya. Nilai ini ditentukan melalui notasi seperti berikut:
   NILAI-BALIK nilai
Contoh:
   SUBRUTIN perolehKelilingKotak(panjang, lebar)
   kelilingß2x(panjang+lebar)

      NILAI-BALIK keliling
   AKHIRI-SUBRUTIN

Pada contoh diatas, perolehKelilingKotak adalah nama subrutin. Adapun panjang serta lebar disebut parameter. Parameter menyatakan bagian untuk berkomonikasi dengan pemanggilan subrutin. Pada bagian pemanggilan subrutin. Pada bagian subrutin, bagian in akn diisi dengan argumen. Contoh:
          hasilß perolehanKelilingKotak(10, 5)
Pada pemanggilan subrutin di atas, 10 dan 5 berkedudukan sebagai argument.

2. Subrutin pada Java
Subrutin pada Java ditulis dalam bentuk mitode, yangmerupkan bagian dari kelas. Penggunaan metode pada Java membuat program menjadi sederhana. kode tidak perlu ditulis berkali-kali jika terdapat keperluan yang sudah dicakup dalam metode tersebut. Sebagi contoh untuk menghitung akar kuadrat suatu bilangan maka kita cukup memenggil, misalnya seperti erikut:
  
   Mart.sqrt(25)
   Mart.sqrt(15)
Andai tidk ada metode sqrt() seperti itu, kode program akan menjadi panjng dan komplek sekiranya terjadi oprasi untuk memperoleh akar kuadrat beberapa kali.

3. Dasar Pembuatan Metode
Bentuk dasar pembuatan metode yang mengunkan nam kelas dalam pemanggilannya ditunjukan berikut ini:

             class NamaKelas {
           public static tipe namaMtode(tipe argumen,
                tipe argumen) {
                …
          
                return nilai; // Nilai balik metode
          }
       }

Bagian yang ditulis … berisi pernyataan-pernyataan yang menyusun metode. Dalam hal ini, tipe menyatakan tipe nilai balik metode. 
         
4. Metode Tanpa Nilai Balik
Sebuah metode bisa tidak memiliki nilai balik. Pada keadaan seperti ini, tipe nilai balik ditulis dengan kata void. Contoh ditunjukan pada kelas berikut:
Contoh

Setelah program ditulis, jangan lupa untuk mengompliasinya. Selanjutnya, Anda bisa menguji dengan menuliskan program seperti berikut:

contoh

Pada program di atas, pemanggilan
          Perusahaan.info();
digunakan untuk memanggil metode info() yang terdapat pada kelas Perusahaan.

Contoh hasil pengeksekusian program:


5. Contoh Subrutin
Contoh:
Buatlah subrutin untuk menghitung bilangan terkecil dari dua buah bilangan. Implementasikan dalam bentuk algoritma maupun program.

Algoritma:
   SUBRUTIN terkecil(x, y)
      JIKA x < y MAKA
          min ß x
      SEBALIKNYA
          min ß y
      AKHIR-JIKA
         
      NILAI-BALIK min
   AKHIR-SUBRUTIN

Program:
contoh

Pada kode di atas, metode perolehanTerkecil() dibuat dua kali. Yang pertama digunakan untuk menangaani bilangan yang bertipe real. Hal seperti ini digunakan pada Java. Fitur seperti ini dinamakan overloading terhadap metode. 
Setelah program Bilangan. Java ditulis, jangan lupa untuk mengompilasinya. Selanjutnya, Anda bisa menguji dengan menuliskan program seperti berikut:
Contoh


6. Mengubah Nilai Argumen
Beberapa bahasa pemrograman seperti C ataupun C++ memungkinkan pengubahan nilai argumen dari sebuah subrutin, Java tidak memungkinkan hal ini. Nah, lalu bagaimana kalau diperlukan senuah subrutin yang mengubah nilai argumen pada Java? Sebuah trik dijelaskan pada sub bab ini.

7. OUT OF TOPIC [OOT]: Kelas yang sesungguhnya pada Java
Contoh yang diberikandi depanlebih menekankan pda bagaimana suatu subrutin diterjemahakan ke program Java. dalam praktek, kemampuan sebuah kelas jauh dari sekedar contoh yang telah diberikan.
Sebagi contoh, sebuah kelas bisa memiliki sejumlh metode. Sebut saja terdapat kelas bernama PersegiPanjang. Kelas ini bisa memiliki metode bernama luas untuk memperoleh luas kotak dan keliling. Implementasinya seperti berikut:
Contoh: