Tag: Pemrograman

  • Pembagian dengan Nol dan Kesalahan Kalkulator Google

    Ketika duduk di bangku sekolah (baik dasar ataupun menengah), kita diajarkan bahwa pembagian dengan angka nol adalah tak hingga, atau infinity, dan biasanya ditulis dengan lambang ∞. Dengan menggunakan logika sederhana saja, kita dapat membuktikan bahwa pernyataan tersebut salah.

    Satu dibagi empat dapat dianalogikan dengan membagi sepotong kue kepada 4 orang, artinya adalah masing-masing orang mendapatkan 1/4 bagian. Sekarang jika satu kue dibagi 0 orang, bagaimana mungkin masing-masing mendapat tak hingga bagian? Orang yang menerima kue saja tidak ada.

    Lalu bagaimana jika 0/0? Biasanya setiap bilangan yang dibagi dengan dirinya sendiri hasilnya adalah 1. Namun itu tidak berlaku untuk angka 0. Bagaimana mungkin membagi 0 kue kepada 0 orang dan masing-masing mendapat 1 bagian? Kue dan orang yang menerima sama-sama tidak ada, jadi mustahil bisa muncul angka 1. Dalam matematika kemustahilan dari pembagian dengan angka nol disebut tak terdefinisi (undefined).

    Jika dihitung menggunakan kalkulator, pembagian dengan nol akan menghasilkan error. Namun, hasil yang mengejutkan diperoleh dari kalkulator Google. Menurut Google, 1 dibagi 0 adalah Infinity. Programer aplikasi kalkulator Google melakukan kesalahan! Lain halnya jika 0 dibagi 0, kalkulator Google menghasilkan Error.

    kalkulator google

    Analogi di atas mungkin berguna jika kita ingin menjelaskan pembagian dengan nol kepada orang awam atau anak kecil. Konsep matematika tidak bisa hanya dijelaskan dengan analogi, namun membutuhkan definisi atau aksioma.

  • 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).