Month: August 2012

  • Belajar Java – Array

    Array adalah kumpulan data yang memiliki tipe data dan jumlah elemen yang tetap (tidak bisa ditambah/dikurangi). Array pada Java adalah sebuah object, maka harus dideklarasikan menggunakan kata kunci new. Tiap data pada array disebut element, dan masing-masing element dapat diakses menggunakan index yang berupa angka. Index dimulai dari 0 sampai jumlah element – 1.

    Array Java

    Contoh untuk mendeklarasikan array sesuai gambar di atas adalah

    char [] arrayHuruf = new char[10];
    

    Sedangkan cara untuk menginisialisasinya adalah sebagai berikut

    arrayHuruf[0] = 'A';
    arrayHuruf[1] = 'B';
    //dst
    

    Bisa menggunakan perulangan untuk menginisialisasi array

    for (int i = 0; i < 10; i ++) {
    
      arrayHuruf[i] = (char) ('A' + i);
    }
    

    Array arrayHuruf akan berisi 10 karakter, yaitu ‘A’ sampai ‘J’ secara berurutan. Alternatif lain untuk menginisialisasi array, dapat menggunakan syntax sebagai berikut

    char[] arrayHuruf = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
    

    Jumlah element diketahui dari banyaknya nilai di antara tanda ‘{‘ dan ‘}’.

    Kita juga dapat mendeklarasikan array dari array atau lebih dikenal sebagai array multidimensi dengan cara seperti berikut char[][] namaArray = new char[10][2] atau char[][] namaArray = new char[10][], tapi tidak boleh seperti ini char[][] namaArray = new char[][2]. Dalam bahasa Java, pengertian array lebih sederhana daripada pada bahasa C, jadi jumlah element pada baris berikutnya jumlahnya boleh bervariasi (tidak harus sama dengan baris pertama).

    char[][] hurufAngka = new char[2][];
    hurufAngka[0] = new char[2]; // array index [0][0] sampai [0][1]
    hurufAngka[1] = new char[1]; // hanya ada array index [1][0]
    

    Array multidimensi juga dapat langsung dideklarasikan dan diinisialisasi seperti berikut

    char[][] hurufAngka = {
      { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' },
      { '1', '2', '3', '4', '5'}
    };
    

    Pada contoh untuk menginisialisasi di atas, kita menggunakan bentuk perulangan for (nilai_awal; nilai_akhir; penambahan/pengurangan), jadi jumlah element-nya harus diketahui. Bagaimana jika jumlah element tidak diketahui? Misalkan kita ingin mencetak array yang berisi huruf-huruf yang tidak diketahui secara pasti jumlahnya. Gunakan enhanced for yang penggunaannya mirip dengan foreach pada PHP.

    char[] arrayHuruf = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
    
    for ( char huruf : arrayHuruf ) {
      System.out.println( huruf );
    }
    

    Kita juga bisa menggunakan built-in property length untuk mengetahui jumlah element-nya.

    for (int i=0; i<arrayHuruf.length; i++)
      System.out.println( arrayHuruf[i] );
    

    Untuk menyalin array yang satu ke yang lainnya, bisa menggunakan method arraycopy yang ada pada class System.

    public static void arraycopy(Object arraySumber, int indexSumber, Object arraytujuan, int indexTujuan, int panjangElement)
    

    Contoh penggunaannya adalah seperti berikut

    int[] arraySumber = { 1, 2, 3, 4, 5 };
    int[] arrayTujuan = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    
    System.arraycopy (arraySumber, 0, arrayTujuan, 0, arraySumber.length);
    		
    for (int item : arrayTujuan)
      System.out.println ( item );
    

    Tambahan:
    Meskipun jumlah element pada array tidak bisa ditambah/dikurangi, kita bisa menciptakan array baru dari array yang sudah ada. Namun tentu saja, nilai yang sudah ada akan hilang.

    int [] array = new int[5];
    array = new int[10];
    
  • Belajar Tipe Data Primitif pada Java

    Tipe data adalah salah satu konsep dasar pemrograman. Sebagai seorang programer, seharusnya menguasai hal ini dengan baik. Untuk mempelajari tipe data, sebaiknya menggunakan bahasa pemrograman yang strongly typed, misalnya Java.

    Tidak seperti pada bahasa PHP, Java adalah bahasa pemrograman yang strongly typed. Kita tidak bisa tidak acuh terhadap tipe data. Kita harus mengetahui data seperti apa yang disimpan ke dalam variabel. Misalnya untuk menyimpan umur kita gunakan variabel yang bertipe Integral, karena umur hanya berupa angka bulat tanpa pecahan.

    Selain itu, Java juga bersifat statically typed. Maksudnya adalah setiap variabel harus dideklarasikan sebelum digunakan. Java akan mengecek tipe data pada compile-time.

    int i = 0;
    

    Tipe data primitif adalah tipe data standar yang tidak diturunkan dari objek manapun. Java memiliki 8 tipe data primitif, yaitu: byte, short, int, long, float, double, boolean, char. Berikut ini adalah pembahasan untuk masing-masing tipe data.

    1. boolean. Tipe data boolean adalah tipe data Logical, yang hanya memiliki 2 nilai literal, yaitu true dan false.

    boolean nilai = true;
    

    2. char. Tipe data char adalah tipe data Textual, yang merepresentasikan karakter unicode 16-bit. Nilai literalnya harus diapit dengan tanda petik tunggal (‘).

    char huruf = 'a';
    

    3. byte. Tipe data byte adalah tipe data Integral 8-bit. Memiliki rentang nilai antara -27 sampai 27 – 1 atau dari -128 sampai 127.

    byte angka = 100;
    

    4. short. Tipe data short adalah tipe data Integral 16-bit. Memiliki rentang nilai antara -215 sampai 215 – 1 atau dari -32768 sampai 32768.

    short angka = 1000;
    

    5. int. Tipe data int adalah tipe data Integral 32-bit. Memiliki rentang nilai antara -231 sampai 231 – 1 atau dari -2,147,483,648 sampai 2,147,483,647.

    int angka = 1000000;
    

    6. long. Tipe data long adalah tipe data Integral 64-bit. Memiliki rentang nilai antara -263 sampai 263 – 1 atau dari -9,223,372,036,854,775,808 sampai 9,223,372,036,854,775,807.
    Tipe data Integral (byte, short, int, long) memiliki default nilai literal int, kecuali diberi akhiran L yang berarti bertipe long. Tipe data Integral dapat menggunakan sistem bilangan desimal, oktal, atau heksadesimal.

    int desimal = 26; // angka 26 dalam desimal
    int oktal = 032; // angka 26 dalam oktal (diberi awalan 0)
    int heksa = 0x1a; // angka 26 dalam heksadesimal (diberi awalan 0x)
    long angkaBesar = 1000000000000L; // angka desimal bertipe long
    

    7. float. Tipe data float adalah tipe data Floating Point 32-bit. Nilai literalnya mengandung pecahan (dipisahkan dengan tanda titik ‘.’)

    float pi = 3.14F;
    

    8. double. Tipe data double adalah tipe data Floating Point 64-bit. Nilai literal default untuk float dan double adalah double, kecuali diberi akhiran F seperti pada contoh nomor 7 di atas.

    float pecahan = 7.65F;
    double pecahanDouble = 1.2345;
    

    Jika variabel float yang diinisialisasi dengan suatu nilai tanpa akhiran F, akan muncul pesan kesalahan: “possible loss of precision“.

    Nilai literal untuk Floating Point juga bisa menggunakan notasi E (10n).

    // ketiga variabel di bawah ini memiliki nilai yang sama 123.4
    float f1 = 123.4F;
    double d1 = 123.4;
    double d2 = 1.234E2;
    

    Sebenarnya tipe data primitif sudah memiliki nilai default pada saat dideklarasikan (meskipun tanpa inisialisasi), kecuali untuk variabel lokal. Nilai default untuk masing-masing tipe data adalah sebagai berikut:

    Tipe Data   Nilai Default
    --------------------------------------------------
    boolean     false
    char        '\u0000' (merepresentasikan ASCII null)
    byte        0
    short       0
    int         0
    long        0L
    float       0.0F
    double      0.0
    

    Pada variabel lokal, deklarasi tipe data harus disertai dengan inisialisasi. Jika tidak, pastikan untuk memberikan nilai kepada variabel tersebut sebelum digunakan. Mengakses lokal variabel tanpa inisialisasi akan menghasilkan pesan kesalahan pada saat meng-compile (compile-time error).

  • Mencari Nilai Maksimum Per Kategori SQL

    Salah satu masalah paling umum yang melibatkan query database adalah mencari nilai terbesar/terkecil pada tiap kategori/tipe. Sebagai contoh adalah mencari pencetak gol terbanyak pada masing-masing dari 4 klub teratas sepak bola Liga Inggris berikut ini.

    Nama                    Klub           Gol
    ------------------------------------------
    Sergio Agüero           Man City       23
    Edin Džeko              Man City       14
    Mario Balotelli         Man City       13
    Wayne Rooney	        Man United     27
    Javier Hernández        Man United     10
    Robin Van Persie        Arsenal        30
    Emmanuel Adebayor       Tottenham      17
    Jermain Defoe           Tottenham      11
    Rafael Van der Vaart    Tottenham      11
    

    Berikut ini adalah hasil yang diinginkan.

    Nama                    Klub           Gol
    ------------------------------------------
    Robin Van Persie        Arsenal        30
    Wayne Rooney	        Man United     27
    Sergio Agüero           Man City       23
    Emmanuel Adebayor       Tottenham      17
    

    Untuk menghasilkan keluaran seperti di atas, paling tidak kita membutuhkan dua langkah. Mencari jumlah gol yang diinginkan, kemudian tampilkan field lainnya berdasarkan gol yang sudah dicari tadi.

    Langkah pertama adalah mencari gol terbanyak pada masing-masing klub tanpa melihat siapa pencetak golnya.

    SELECT Klub, MAX(Gol) as maxGol 
    FROM `skorer` 
    GROUP BY Klub
    
    Klub           maxGol
    ---------------------
    Arsenal        30
    Man City       23
    Man United     27
    Tottenham      17
    

    Hasil bisa berbeda tergantung teknik penyortingan yang digunakan. Pada contoh di atas penyortingan menaik (ascending) berdasarkan field “Klub”.

    Langkah kedua adalah menampilkan field sisanya (Nama) dengan cara menggabungkan table hasil query pertama dengan table mula-mula (skorer).

    SELECT b.Nama, b.Klub, b.Gol
    FROM (
      SELECT Klub, MAX(Gol) AS maxGol
      FROM `skorer` 
      GROUP BY Klub
    ) AS a
    INNER JOIN `skorer` AS b ON 
      a.Klub = b.Klub AND a.maxGol = b.Gol
    
    Nama                    Klub           Gol
    ------------------------------------------
    Sergio Agüero           Man City       23
    Wayne Rooney	        Man United     27
    Robin Van Persie        Arsenal        30
    Emmanuel Adebayor       Tottenham      17
    

    Jika ingin diurutkan sesuai contoh, tinggal tambahkan ORDER BY Gol DESC pada akhir query.

    Sebenarnya ada query yang lebih singkat untuk menampilkan hasil seperti di atas, yaitu dengan menggunakan sub-query untuk mencari gol terbanyak pada masing-masing klub.

    SELECT * 
    FROM `skorer`
    WHERE Gol = (
      SELECT MAX(Gol) 
      FROM `skorer` AS a 
      WHERE a.Klub = skorer.Klub
    )