Wednesday, December 14, 2016

Bab 6. Visual Basic .NET Untuk Pemula



Array





Bab ini akan mendiskusikan array, yang merupakan grup yang memuat variabel-variabel yang bisa dipakai untuk menyimpan sekumpulan data. Array satu-dimensi berguna untuk menyimpan dan bekerja dengan satu himpunan data, sedangkan array dua-dimensi dapat dipakai untuk menyimpan dan bekerja dengan sejumlah himpunan data. Bab ini menyajikan sejumlah teknik pemrograman array, seperti penjumlahan dan pererataan elemen-elemen di dalam sebuah array, penjumlahan semua kolom pada suatu array dua-dimensi, pencarian suatu nilai spesifik pada sebuah array, dan penggunaan array-array paralel. Properti Enabled, Anchor, dan Dock, dan kontrol Timer juga akan dibahas. 


6.1 Array
KONSEP: Array adalah sekelompok variabel yang memiliki satu nama. Anda menyimpan dan bekerja dengan nilai-nilai di dalam sebuah array menggunakan subskript.

Kadangkala diperlukan bagi sebuah aplikasi untuk menyimpan sejumlah nilai dengan tipe sama. Seringkali lebih baik untuk melakukannya dengan menciptakan sebuah array daripada menggunakan beberapa variabel individu. Array seperti sekelompok variabel yang memiliki nama sama. Setiap nilai yang disimpan di dalam sebuah array disebut dengan elemen. Anda dapat mengakses elemen-elemen di dalam sebuah array melalui subskript. Subskript, yang juga dikenal dengan indeks, adalah sebuah nomor yang mengidentifikasi elemen tertentu di dalam sebuah array.

Penomoran subskript diawali dari 9, jadi subskript dari elemen pertama di dalam sebuah array adalah 0 dan subskript dari elemen terakhir adalah jumlah elemen total array dikurangi dengan satu. Sebagai contoh, perhatikan sebuah array dengan tujuh integer. Subskript dari elemen pertamanya adalah 0 dan subskript dari elemen terakhirnya adalah 6.

Mendeklarasikan Array
Anda mendeklarasikan sebuah array dengan cara yang hampir sama dengan ketika Anda mendeklarasikan variabel biasa. Berikut adalah bentuk umum dari pendeklarasian array:

Dim NamaArray (SubskriptAtas) As TipeData

Amati sintaksis itu lebih dekat:
  • NamaArray adalah nama dari array.
  • SubskriptAtas adalah nilai dari subskript tertinggi dari array. Ini harus berupa integer positif, konstanta, atau variabel integer yang memuat nilai positif.
  • TipeData adalah sebuah tipe data Visual Basic.


Lihat contoh-contoh berikut.

Dim intJam(6) As Integer

Statemen ini mendeklarasikan intJam sebagai sebuah array yang memuat integer-integer. Nomor atau nilai yang ada di dalam kurung, 6, mengindikasikan subskript tertinggi dari array. Gambar 6.1 menunjukkan bahwa array ini memuat tuju elemen dengan subskript 0 sampai 6. Gambar itu menunjukkan bahwa setiap elemen array diinisialisasi dengan nilai 0.



Gambar 6.1 Array intJam


Berikut adalah contoh lain dari sebuah deklarasi array:

Dim decGaji(4) As Decimal

Statemen ini mendeklarasikan decGaji sebagai sebuah array dengan lima nilai Decimal, seperti ditunjukan pada Gambar 6.2 dengan subskript 0 sampai 4. Contoh berikut menggunakan isi dari sebuah variabel Integer untuk menetapkan ukuran array:

Dim intUkuran As Integer = 4
Dim decGaji(intUkuran) As Decimal


Gambar 6.2 Array decGaji


Penetapan Ukuran Array Secara Implisit dan Inisialisasi Array
Anda dapat menetapkan ukuran array secara implisit dengan mengabaikan subskript atas pada deklarasi array dan menyediakan sebuah daftar inisialisasi. Daftar inisialisasi array adalah suatu himpunan nilai yang diapit oleh kurung kurawal, dengan nilai-nilai dipisahkan dengan koma. Berikut adalah sebuah contoh dari pendeklarasian array yang menggunakan daftar inisialisasi:

Dim intNilai() As Integer = { 2, 4, 6, 8, 10, 12 }

Statemen ini mendeklarasikan intNilai sebagai sebuah array yang memuat integer-integer. Nilai 2, 4, 6, 8, 10, dan 12 disimpan di dalam array. Nilai 2 disimpan pada elemen nol, 4 disimpan pada elemen satu, dan seterusnya. Perhatikan bahwa tidak ada subskript atas yang disediakan di dalam kurung. Pada kasus ini, array memiliki enam elemen, seperti ditunjukkan pada Gambar 6.3.

Gambar 6.3 Array intNilai


Kode berikut mendeklarasikan ukuran array string secara implisit:

Dim strTeman() As String = { "Joe", "Geri", "Bili", "Rosi" }

Anda dapat menginisialisasi sebuah array dengan string-string kosong, seperti ditunjukkan di sini:

Dim strTeman() As String = { "", "", "", "" }

Adalah ide yang baik untuk menginisialisasi sebuah array string, khususnya jika ada peluang bahwa program Anda akan mengakses elemen-elemennya sebelum ada data disimpan di dalamnya. Penerapan sebuah operasi pada suatu array string akan menyebabkan error runtime jika tidak ada data yang disimpan di dalam array tersebut.

Menggunakan Konstanta Bernama Sebagai Subskript Pada Deklarasi Array
Untuk membuat program lebih mudah untuk dikembangkan, programer biasanya menggunakan konstanta bernama sebagai subskript atas pada sebuah deklarasi array, seperti ditunjukkan pada kode berikut:

Const intSUBSKRIPT_MAKS As Integer = 100
Dim intArray(intSUBSKRIPT_MAKS) As Integer

Cukup sering, ketika Anda menuliskan kode yang memproses array, Anda perlu mengakses nilai dari subskript atas dari array. Anda akan melihat contoh seperti ini nanti pada bab ini. Ketika Anda mendeklarasikan sebuah konstanta bernama untuk merepresentasikan subskript atas dari array, Anda dapat menggunakan konstanta itu kapan saja ketika Anda perlu mengakses subskript terakhir pada array. Kemudian, jika Anda perlu memodifikasi program sehingga array berukuran berbeda, Anda hanya perlu mengubah nilai dari konstanta bernama itu.

Bekerja dengan Elemen-Elemen Array
Anda dapat menyimpan sebuah nilai di dalam suatu elemen array menggunakan statemen penugasan. Di sisi kiri dari operator =, Anda menggunakan nama array dengan subskript dari elemen yang ingin Anda tugaskan. Sebagai contoh, dimisalkan bahwa intNilai adalah sebuah array integer dengan subskript 0 sampai 5. Statemen-statemen berikut menyimpan nilai pada tiap elemen array:

intNilai(0) = 100
intNilai(1) = 200
intNilai(2) = 300
intNilai(3) = 400
intNilai(4) = 500
intNilai(5) = 600

Gambar 6.4 menunjukkan nilai-nilai yang ditugaskan kepada elemen-elemen array setelah statemen-statemen ini dieksekusi.


Gambar 6.4 Array intNilai dengan nilai-nilai yang ditugasi


Mengakses Elemen-Elemen Array dengan Loop
Anda dapat menugaskan sebuah integer kepada suatu variabel dan kemudian menggunakan variabel itu sebagai subskript. Ini memungkinkan penggunaan loop dalam mengakses array secara menyeluruh, melakukan operasi yang sama pada setiap elemen. Ini berguna ketika Anda ingin memproses elemen-elemen di dalam sebuah array besar karena penulisan statemen-statemen secara individual memerlukan penulisan kode yang panjang.

Sebagai contoh, kode berikut mendeklarasikan intDeret sebagai sebuah array dengan 10 integer. Subskript array mulai dari 0 sampai 9. Loop For…Next menyimpan nilai 100 pada tiap elemen array, diawali dari subskript 0:

Const intSUBSKRIPT_MAKS As Integer = 9
Dim intDeret(intSUBSKRIPT_MAKS) As Integer
Dim intHitung As Integer

For intHitung = 0 To intSUBSKRIPT_MAKS
    intDeret(intHitung) = 100
Next

Variabel intHitung, yang digunakan sebagai kounter atau pencacah loop, mengambil nilai 0 sampai 0 ketika loop beriterasi. Iterasi pertama pada loop, intHitung sama dengan 0, sehingga statemen intDeret(intHitung) = 100 menugaskan 100 kepada intDeret(0). Ketika iterasi kedua loop dieksekusi, statemen menyimpan 100 di dalam intDeret(1), dan seterusnya. Gambar 6.5 mengilustrasikan bagaimana loop dibangun sehingga variabel kounter diawali dari subskript array pertama dan berakhir pada subskript array terakhir.


Gambar 6.5 Sebuah loop For…Next menggunakan sebuah variabel pencacah untuk menjelajah array


Contoh berikut menggunakan sebuah loop Do While untuk melakukan operasi yang sama:

Const intSUBSKRIPT_MAKS As Integer = 9
Dim intDeret(intSUBSKRIPT_MAKS) As Integer
Dim intHitung As Integer = 0

Do While intHitung <= intSUBSKRIPT_MAKS
    intDeret(intHitung) = 100
    intHitung += 1
Loop

Telah disebutkan sebelumnya bahwa adalah hal baik untuk menginisialisasi sebuah array string ketika ada peluang bahwa program Anda akan mengakses elemen-elemennya sebelum data disimpan. Akan melelahkan bila menyediakan penginisialisasi terpisah untuk setiap elemen array. Untuk mengatasinya, Anda bisa menggunakan sebuah loop untuk menginisialisasi elemen-elemen array. Sebagai contoh, kode berikut menyimpan string kosong ke dalam setiap elemen dari array strNama, sebuah array string dengan 1000-elemen:

Const intSUBSKRIPT_MAKS As Integer = 999
Dim strNama(intSUBSKRIPT_MAKS) As String
Dim intHitung As Integer

For intHitung = 0 To intSUBSKRIPT_MAKS
    strNama (intHitung) = String.Empty
Next


Pemeriksaan Batas Array
Sistem runtime Visual Basic melakukan pemeriksaan batas array, yang berarti bahwa ia tidak membolehkan sebuah statemen untuk menggunakan subskript di luar rentang valid untuk array. Sebagai contoh, pada deklarasi berikut, array dengan nama intNilai memiliki rentang subskript 0 sampai 10:

Const intSUBSKRIPT_MAKS As Integer = 10
Dim intNilai(intSUBSKRIPT_MAKS) As Integer

Jika sebuah statemen menggunakan subskript yang kurang dari 0 dan lebih besar dari 10 dengan array ini, maka program akan melemparkan eksepsi.

Gambar 6.6 Jendela eksepsi yang melaporkan bahwa indeks berada di luar rentang array

Kompiler tidak akan menampilkan pesan error pada saat perancangan (design time) ketika Anda menuliskan statemen semacam itu. Sebagai contoh, loop pada kode berikut menggunakan subskript di luar rentang yang valid:

Const intSUBSKRIPT_MAKS As Integer = 10
Dim intNilai(intSUBSKRIPT_MAKS) As Integer
Dim intIndeks As Integer

For intIndeks = 0 To 20
    intNilai(intIndeks) = 99
Next

Pada saat aplikasi dijalankan, loop ini dieksekusi sampai intIndeks sama dengan 11. Pada titik itu, ketika statemen penugasan mencoba untuk menggunakan intIndeks sebagai sebuah subskript, eksepsi dilemparkan, seperti ditunjukkan pada Gambar 6.6.


Tutorial 6.1: Menggunakan Array Untuk Memuat Sejumlah Nilai Acak
Pada tutorial ini, Anda akan menciptakan sebuah aplikasi yang secara acak membangkitkan nilai-nilai lotere. Ketika sebuah tombol diklik, aplikasi akan membangkitkan lima buah integr 2-dijit dan menyimpannya ke dalam sebuah array. Isi array kemudian ditampilkan pada sejumlah label pada form.
Langkah 1: Ciptakanlah sebuah projek Windows Forms Application baru dengan nama Angka Lotere.

Langkah 2: Bangunlah form dari projek dengan sejumlah kontrol Label dan Button seperti ditunjukkan pada Gambar 6.7. Tetapkan properti-properti berikut untuk setiap kontrol Label:

  • AutoSize = False
  • BorderStyle = Fixed3D
  • TextAlign = MiddleCenter
  • Hapus properti Text

Gambar 6.7 Form Angka Lotere

Langkah 3: Sempurnakan kode untuk dua event handler pada form seperti ditunjukkan berikut. (Jangan ketika nomor baris, karena ditunjukkan hanya untuk referensi).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Class FormLotere

    Private Sub tombolBangkitkan_Click(…) Handles tombolBangkitkan.Click
        'menciptakan sebuah array untuk menampung lima angka lotere
        Const intSUBSKRIPT_MAKS As Integer = 4     'subskript maksimum
        Dim intAngka(intSUBSKRIPT_MAKS) As Integer 'deklarasi array
        Dim intHitung As Integer 'pencacah loop

        'menciptakan sebuah objek Random
        Dim rand As New Random

        'mengisi array dengan nilai-nilai acak
        'setiap nilai berada dalam rentang 0-99.
        For intHitung = 0 To intSUBSKRIPT_MAKS
            intAngka(intHitung) = rand.Next(100)
        Next

        'menampilkan elemen-elemen array pada label-label
        labelPertama.Text = intAngka(0).ToString()
        labelKedua.Text = intAngka(1).ToString()
        labelKetiga.Text = intAngka(2).ToString()
        labelKeempat.Text = intAngka(3).ToString()
        labelKelima.Text = intAngka(4).ToString()
    End Sub

    Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
        'menutup form
        Me.Close()
    End Sub
End Class

Amati kode lebih dekat untuk event handler btnBangkitkan_Click. Baris 5 mendeklarasikan konstanta intSUBSKRIPT_MAKS, yang ditetapkan dengan nilai 4, dan baris 6 mendeklarasikan sebuah array integer dengan nama intAngka. Konstanta ini dipakai sebagai subskript atas. Seperti ditunjukkan pada Gambar 6.8, array intAngka memiliki lima elemen, dan subskriptnya akan bernilai 0 sampai 4. Baris 7 mendeklarasikan sebuah variabel dengan nama intHitung yang akan dipakai sebagai pencacah loop.

Gambar 6.8 Array intAngka dan subskriptnya


Baris 10 mendeklarasikan sebuah objek Random, menggunakan nama rand untuk mengakses objek itu. Kemudian, loop For…Next pada baris 14 dieksekusi. Jika Anda mempelajari baris 14 secara hati-hati, Anda akan melihat bahwa loop akan beriterasi lima kali:
·         Pada iterasi pertama, intHitung akan ditetapkan 0.
·         Pada iterasi kedua, intHitung akan ditetapkan 1.
·         Pada iterasi ketiga, intHitung akan ditetapkan 2.
·         Pada iterasi keempat, intHitung akan ditetapkan 3.
·         Pada iterasi kelima, intHitung akan ditetapkan 4.

Statemen di dalam loop pada baris 15 membaca nilai acak dalam rentang 0 sampai 99 dan menugaskannya kepada intAngka(intHitung). Sebagai hasilnya,
·         Nilai acak pertama akan ditugaskan kepada intAngka(0).
·         Nilai acak kedua akan ditugaskan kepada intAngka(1).
·         Nilai acak ketiga akan ditugaskan kepada intAngka(2).
·         Nilai acak keempat akan ditugaskan kepada intAngka(3).
·         Nilai acak kelima akan ditugaskan kepada intAngka(4).

Statemen-statemen pada baris 19 sampai baris 23 menampilkan nilai dari tiap elemen dengan menugaskan nilai-nilai kepada kontrol-kontrol Label. Perhatikan bahw Anda memanggil metode ToString dari tiap elemen array untuk mengkonversi nilainya menjadi string, seperti ditunjukkan pada baris 19:

labelPertama.Text = intAngka(0).ToString()

Nilai yang disimpan di dalam intNilai(0) adalah sebuah integer, sehingga ekspresi intNilai(0).ToString() mengkonversi nilai itu menjadi sebuah string. String yang dihasilkan kemudian ditugaskan kepada properti Text dari kontrol labelPertama. Teknik ini dipakai untuk mengkonversi elemen-elemen array lainnya dan menugaskan nilai-nilainya kepada kontrol-kontrol Label pada baris 20 sampai baris 23.

Langkah 4: Simpan projek, dan jalankan aplikasi. Klik tombol Bangkitkan Angka. Anda akan melihat nilai-nilai acak yang ditampilkan pada tiap kontrol Label, seperti ditunjukkan pada Gambar 6.9.

Gambar 6.9 Elemen-elemen array ditampilkan pada kontrol-kontrol Label


Menggunakan Elemen-Elemen Array Untuk Menyimpan Masukan
Elemen-elemen array dapat disimpan untuk menampung data yang dimasukkan oleh user. Sebagai contoh, kode berikut membaca nilai-nilai dari user dan menyimpannya ke dalam array intDeret:

Const intSUBSKRIPT_MAKS As Integer = 9
Dim intDeret(intSUBSKRIPT_MAKS) As Integer
Dim intHitung As Integer

For intHitung = 0 To intSUBSKRIPT_MAKS
    intDeret(intHitung) = CInt(InputBox("Masukkan sebuah nilai."))
Next


Pada Tutorial 6.2, Anda akan menciptakan sebuah aplikasi yang menggunakan kotak masukan untuk membaca suatu runtun string sebagai masukan, dan menyimpan string-string tersebut ke dalam sebuah array.

Tutorial 6.2: Menggunakan Array Untuk Memuat Daftar Nama Yang Dimasukkan User
Pada tutorial ini, Anda akan menciptakan sebuah aplikasi yang menggunakan array untuk menampung lima string. Aplikasi ini akan memiliki sebuah tombol yang dapat dipakai untuk memasukkan nama dari lima teman. Nama-nama itu kemudian akan disimpan di alam array dan ditampilkan pada sebuah kotak list.

Langkah 1: Ciptakanlah sebuah projek Windows Forms Application dengan nama Daftar Teman.

Langkah 2: Bangunlah form projek dengan sebuah kontrol ListBox dan dua kontrol Button seperti ditunjukkan pada Gambar 6.10.

Gambar 6.10 Form projek Daftar Teman

Langkah 3: Sempurnakan kode untuk event handler pada form seperti ditunjukkan berikut. (Jangan ketika nomor baris, karena hanya ditujukan untuk referensi).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Class FormTeman

    Private Sub tombolMasukkanNama_Click(…) Handles tombolMasukkanNama.Click
        Const intSUBSKRIPT_MAKS As Integer = 4    'subskript maks
        Dim strNama(intSUBSKRIPT_MAKS) As String 'array menampung nama-nama
        Dim intHitung As Integer ' Loop counter

        'memberitahu user apa yang harus dilakukan
        MessageBox.Show("Saya meminta Anda untuk memasukkan nama " &
        "dari lima teman.")

        'membaca nama dan menyimpannya ke dalam array
        For intHitung = 0 To intSUBSKRIPT_MAKS
            strNama(intHitung) = InputBox("Masukkan nama teman.")
        Next

        'membersihkan kotak list
        listTeman.Items.Clear()

        'menampilkan isi array pada kotak list
        For intHitung = 0 To intSUBSKRIPT_MAKS
            listTeman.Items.Add(strNama(intHitung))
        Next
    End Sub

    Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
        'menutup
        Me.Close()
    End Sub
End Class

Amati kode lebih dekat untuk event handler tombolMasukkanNama_Click. Baris 4 mendeklarasikan konstanta intSUBSKRIPT_MAKS, yang ditetapkan dengan nilai 4, dan baris 5 mendeklarasikan sebuah array string dengan nama strNama. Konstanta intSUBSKRIPT_MAKS dipakai sebagai subskript atas. Seperti ditunjukkan pada Gambar 6.11, array strNama memiliki lima elemen, dan subskriptnya akan bernilai 0 sampai 4. Baris 6 mendeklarasikan sebuah variabel dengan nama intHitung yang akan dipakai sebagai pencacah loop.

Gambar 6.11 Array strNama dan subskriptnya


Baris 9 dan baris 10 menampilkan sebuah kotak pesan yang meminta user untuk memasukkan lima nama. Kemudian, loop For…Next pada baris 13 dieksekusi lima kali:
·         Pada iterasi pertama, intHitung ditetapkan 0.
·         Pada iterasi kedua, intHitung ditetapkan 1.
·         Pada iterasi ketiga, intHitung ditetapkan 2.
·         Pada iterasi keempat, intHitung ditetapkan 3.
·         Pada iterasi kelima, intHitung ditetapkan 4.

Statemen di dalam loop, pada baris 14, melakukan hal berikut: (1) menampilkan sebuah kotak masukan yang meminta user untuk memasukkan nama teman, dan (2) menugaskan nilai yang dimasukkan oleh user kepada strNama(intHitung). Sebagai hasilnya,
·         Nama pertama yang dimasukkan oleh user akan ditugaskan kepada strNama(0).
·         Nama kedua yang dimasukkan oleh user akan ditugaskan kepada strNama(1).
·         Nama ketiga yang dimasukkan oleh user akan ditugaskan kepada strNama(2).
·         Nama keempat yang dimasukkan oleh user akan ditugaskan kepada strNama(3).
·         Nama kelima yang dimasukkan oleh user akan ditugaskan kepada strNama(4).

Baris 18 membersihkan isi dari kotak list listTeman. Kemudian, loop For…Next lain dieksekusi pada baris 21. Sama seperti loop For…Next sebelumnya, loop ini menggunakan variabel intHitung untuk menjejak elemen-elemen dari array strNama. Ketika loop ini dieksekusi, statemen pada baris 22 menambahkan sebuah elemen array pada kotak list listTeman. Setelah loop selesai dieksekusi, setiap nama yang disimpan di dalam array strNama akan ditampilkan pada kotak list.

Langkah 4: Simpan projek, dan jalankan aplikasi. Klik tombol Masukkan Nama, dan kemudian masukkan lima nama pada kotak masukan. Setelah Anda memasukkan nama terakhir, Anda akan melihat nama-nama ditampilkan pada kotak list, seperti ditampilkan pada Gambar 6.12.

Gambar 6.12 Nama-nama ditampilkan pada kotak list


Panjang Array
Array memiliki properti Length yang menampung jumlah elemen di dalam array. Sebagai contoh, diasumsikan deklarasi berikut:

Dim strNama() As String = { "Joe", "Geri", "Rosi" }

Array strNama memiliki 3 elemen, dengan subskript atas 2. Properti Length dari array ini menghasilkan nilai 3. Berikut adalah contoh kode yang menggunakan properti Length:

For intHitung = 0 to strNama.Length – 1
    MessageBox.Show(strNama(intHitung))
Next

Kode ini menggunakan ekspresi strNama.Length-1 sebagai batas atas loop, karena nilai di dalam properti Length adalah 1 lebih besar dari subskript atas dari array. Seperti yang akan Anda pelajari nanti, adalah dimungkinkan untuk mengubah ukuran dari sebuah array ketika aplikasi sedang berjalan. Anda dapat menggunakan properti Length untuk mendapatkan nilai terkini dari ukuran array.

Memproses Isi Array
Anda dapat menggunakan elemen array sama seperti variabel biasa. Sebagai contoh, diasumsikan bahwa intJam adalah sebuah array integer. Statemen berikut mengalikan intJam(3) dengan variabel decGajiPerJam dan menyimpan hasilnya pada variabel decGajiKotor:

decGajiKotor = intJam(3) * decGajiPerJam

Diasumsikan bahwa intNilai adalah sebuah array integer. Statemen berikut menambahkan 1 pada intNilai(0):

intNilai(0) += 1

Dan, diasumsikan bahwa decGaji adalah sebuah array Decimal. Statemen berikut menampilkan decGaji(5) pada sebuah kotak pesan:

MessageBox.Show(decGaji(5).ToString())



Pada Tutorial 6.3, Anda akan menciptakan sebuah aplikasi yang melakukan perhitungan-perhitungan menggunakan elemen-elemen array.

Tutorial 6.3: Menciptakan Sebuah Aplikasi yang Menggunakan Elemen-Elemen Array Pada Perhitungan

Sebuah Rumah Pizza memiliki enam orang pekerja, masing-masing dibayar Rp. 12 ribu per jam. Pada tutorial ini, sebuah aplikasi yang menyimpan banyaknya jam kerja oleh tiap pekerja di dalam sebuah array. Aplikasi menggunakan nilai-nilai di dalam array untuk menghitung gaji kotor dari tiap pekerja.

Langkah 1: Buka projek Hitung Gaji. Gambar 6.13 menunjukkan form dari projek, yang telah disediakan untuk Anda.

Gambar 6.13 Form Hitung Gaji

Langkah 2: Sempurnakan kode untuk event handler kontrol Button seperti ditunjukkan berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Public Class Form1

    Private Sub tombolHitungGaji_Click(…) Handles tombolHitungGaji.Click
        'konstanta-konstanta
        Const decGAJI_PER_JAM As Decimal = 12000D
        Const intSUBSKRIPT_MAKS As Integer = 5

        'array dan variabel-variabel lain
        Dim dblArrayJam(intSUBSKRIPT_MAKS) As Double
        Dim intHitung As Integer = 0   'pencacah loop
        Dim decGajiPekerja As Decimal  'memuat gaji kotor

        'meminta user untuk memasukkan jam kerja tiap pekerja
        MessageBox.Show("Saya meminta Anda untuk memasukkan " &
        "banyaknya jam kerja tiap pekerja.")

        'membaca banyak jam kerja oleh karyawan
        Do While intHitung < dblArrayJam.Length
            Try
                dblArrayJam(intHitung) =
                CDbl(InputBox("Nomor pekerja " &
               (intHitung + 1).ToString()))
                intHitung += 1
            Catch
                'menampilkan pesan error untuk masukan tak valid
                MessageBox.Show("Masukkan jumlah jam kerja " &
                "yang valid untuk pekerja.")
            End Try
        Loop

        'membersihkan kotak list
        listKeluaran.Items.Clear()

        'menghitung dan menampilkan gaji kotor tiap pekerja
        For intHitung = 0 To dblArrayJam.Length - 1
            decGajiPekerja = CDec(dblArrayJam(intHitung) *
            decGAJI_PER_JAM)

            listKeluaran.Items.Add("Pekerja " &
            (intHitung + 1).ToString() &
            " bergaji Rp. " &
            decGajiPekerja.ToString())
        Next
    End Sub

    Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
        'menutup form
        Me.Close()
    End Sub
End Class

Amati kode pada event handler tombolHitungGaji_Click lebih dekat. Berikut adalah simpulan dari deklarasi-deklarasi pada baris 5 sampai baris 11:
·         Baris 5 mendeklarasikan konstanta decGAJI_PER_JAM untuk gaji pekerja per jam.
·         Baris 6 mendeklarasikan konstanta intSUBSKRIPT_MAKS untuk subskript atas pada array.
·         Baris 9 mendeklarasikan dblArrayJam, sebuah array Double, untuk memuat semua banyaknya jam kerja dari pekerja.
·         Baris 10 mendeklarasikan intHitung, yang akan dipakai sebagai pencacah loop (diinisialisasi dengan 0) dan untuk menjejak array dblArrayJam.
·         Baris 11 mendeklarasikan decGajiPekerja, sebuah variabel Decimal untuk menampung gaji kotor pekerja.

Baris 14 dan baris 15 menampilkan sebuah kotak pesan, yang memberitahu user apa yang diminta. Loop Do While yang diawali pada baris 18 menggunakan variabel intHitung untuk menjejak array dblArrayJam. Ingat bahwa intHitung diinisialisasi dengan 0. Loop dieksekusi sepanjang intHitung bernilai kurang dari dblArrayJam.Length.

Di dalam loop, sebuah statemen Try-Catch dipakai untuk menangkap sembarang eksepsi yang bisa saja terjadi jika user memasukkan nilai tak numerik. Statemen yang ada pada baris 20 sampai baris 22 melakukan hal-hal berikut:
·         Menampilkan sebuah kotak masukan yang meminta user untuk memasukkan banyaknya jam kerja untuk tiap pekerja.
·         Menggunakan fungsi CDbl untuk mengkonversi masukan user menjadi sebuah Double.
·         Menugaskan nilai yang dihasilkan kepada elemen array dblArrayJam(intHitung).

Jika user memasukkan nilai tak valid, program akan melompat ke klausa Catch pada baris 24, menampilkan pesan error pada baris 26 dan baris 27, dan kemudian loop dimulai kembali. Jika user memasukkan nilai yang valid, baris 23 akan menambahkan 1 pada variabel intHitung. Loop kemudian dimulai kembali.

Setelah user memasukkan nilai-nilai untuk elemen-elemen array, baris 32 membersihkan kotak list, dan kemudian loop For…Next pada baris 35 dimulai. Loop ini juga menggunakan variabel intHitung untuk menjejak setiap elemen array. Baris 36 dan baris 37 menggunakan sebuah elemen array untuk menghitung gaji kotor pekerja, dan baris 39 sampai baris 42 menambahkan sebuah string pada kotak list yang melaporkan gaji kotor pekerja.

Langkah 3:Simpan projek, dan jalankan aplikasi. Klik tombol Hitung Gaji. Serangkaian kotak masukan akan ditampilkan, yang meminta Anda untuk memasukkan banyaknya jam kerja untuk pekerja 1 sampai pekerja 6. Masukkan nilai-nilai berikut secara berurutan:

Pekerja 1: 10
Pekerja 2: 20
Pekerja 3: 30
Pekerja 4: 40
Pekerja 5: 50
Pekerja 6: 60

Setelah Anda memasukkan banyak jam kerja untuk pekerja 6, form akan ditampilkan, seperti pada Gambar 6.14.

Gambar 6.14 Aplikasi Hitung Gaji, setelah semua banyak jam kerja dimasukkan

Langkah 4: Klik tombol Keluar untuk mengakhiri program.


Mengakses Elemen-Elemen Array dengan Loop For Each
Visual Basic menyediakan sebuah loop spesial yang dikenal dengan loop For Each. Loop For Each dapat menyederhanakan pemrosesan ketika pekerjaan Anda hanya menjejak atau menelusuri sebuah array, membaca nilai dari tiap elemen array. Loop ini dapat membaca elemen-elemen array, tetapi ia tidak dapat memodifikasi nilai-nilainya. Loop For Each dituliskan dengan bentuk umum berikut:

For Each var As tipe In array
    statemen_statemen
Next

Pada bentuk umumnya, var adalah nama dari sebuah variabel yang akan diciptakan hanya untuk digunakan pada loop, tipe adalah tipe data dari array, dan array adalah nama dari sebuah array. Loop ini akan beriterasi satu kali untuk setiap elemen array. Setiap kali loop beriterasi, ia menyalin sebuah elemen array ke variabel var. Sebagai contoh, pertama kali loop beriterasi, variabel var akan memuat nilai dari array(0); kedua kalinya loop beriterasi, variabel var akan memuat array(1); dan seterusnya. Ini berlanjut sampai loop menjejak semua elemen di dalam array.

Sebagai contoh, dimisalkan bahwa Anda memiliki deklarasi array berikut:

Dim intArray() As Integer = {10, 20, 30, 40, 50, 60}

Berikut adalah loop For Each yang menampilkan semua elemen array pada sebuah kontrol ListBox dengan nama listTampil:

For Each intNil As Integer In intArray
    listTampil.Items.Add(intNil)
Next


Topik Opsional: Menggunakan Loop For Each dengan kontrol ListBox
Loop For Each dapat pula dipakai untuk memproses item-item di dalam sebuah koleksi. Dimisalkan bahwa Anda ingin melakukan pencarian nama kota pada koleksi Items dari sebuah kontrol ListBox dengan nama listKota. Diasumsikan pula bahwa user telah memasukkan sebuah nama kota ke dalam kontrol TextBox dengan nama teksKota. Gambar 6.15 menunjukkan sebuah contoh program. Berikut adalah statemen-statemen yang dieksekusi untuk melakukan pencarian:

For Each strKota As String In listKota.Items
    If strKota = teksKota.Text Then
        labelHasil.Text = "Kota ditemukan!"
    End If
Next

Gambar 6.15 Pencarian sebuah nama kota pada kontrol ListBox


6.2 Teknik-Teknik Pemrosesan Array
KONSEP: Ada banyak teknik pemrograman yang dapat diterapkan pada array. Anda dapat mencari nilai total dari semua elemen dan melakukan pencarian elemen tertentu. Informasi terkait dapat disimpan pada array-array paralel. Selain itu, ukuran array dapat diubah saat aplikasi dijalankan.

Bagaimana Mencari Nilai Total Dari Semua Elemen Array
Untuk mencari total dari semua elemen array, Anda bisa menggunakan loop dengan sebuah variabel akumulator. Loop tersebut menjumlahkan nilai pada tiap elemen array pada akumulator tersebut. Sebagai contoh, diasumsikan bahwa deklarasi array berikut ada pada sebuah aplikasi, dan nilai-nilai telah disimpan di dalam array:

Const intSUBSKRIPT_MAKS As Integer = 24
Dim intUnit(intSUBSKRIPT_MAKS) As Integer

Kode berikut menjumlahkan tiap elemen array pada variabel intTotal:

Dim intTotal As Integer = 0
Dim intHitung As Integer

For intHitung = 0 To (intUnit.Length – 1)
    intTotal += intUnit(intHitung)
Next

CATATAN: Statemen pertama pada contoh tersebut menentapkan intTotal menjadi 0. Ingat dari Bab 5 bahwa sebuah variabel akumulator perlu ditetapkan 0 sebelum ia digunakan untuk menjejak nilai total berjalan. Meskipun Visual Basic secara otomatis menginisialisasi variabel numerik dengan 0, statemen ini menekankan bahwa intTotal harus sama dengan 0 sebelum loop dimulai.

Contoh tersebut mendemonstrasikan bagaimana menggunakan loop For…Next untuk mencari nilai total dari semua elemen array. Anda dapat pula menggunakan loop For Each, seperti ditunjukkan pada kode berikut:

Dim intTotal As Integer = 0
    For Each intNil As Integer In intUnit
        intTotal += intNil
Next

Ketika loop selesai dieksekusi, intTotal akan memuat nilai total dari semua elemen array.


Menghitung Nilai Rerata Pada Array Numerik
Langkah pertama dalam menghitung nilai rerata pada sebuah array numerik adalah menjumlahkan semua elemen array. Langkah kedua adalah membagi hasil penjumlahan tersebut dengan banyak elemen di dalam array. Diasumsikan bahwa deklarasi berikut ada pada sebuah aplikasi, dan nilai-nilai telah disimpan di dalam array:

Const intSUBSKRIPT_MAKS As Integer = 24
Dim intUnit(intSUBSKRIPT_MAKS) As Integer

Loop berikut menghitung nilai rerata pada array intUnit. Nilai rerata disimpan di dalam variabel dblRerata:

Dim intTotal As Integer = 0
Dim dblRerata As Double
Dim intHitung As Integer

For intHitung = 0 To (intUnit.Length - 1)
    intTotal += intUnit(intHitung)
Next

'menggunakan pembagian titik-mengambang untuk menghitung rerata
dblRerata = intTotal / intUnit.Length

Statemen yang menghitung rerata (dblRerata) harus ditempatkan setelah akhir loop. Ia hanya dieksekusi sekali saja.

Mencari Nilai Tertinggi dan Nilai Terendah Pada Array Integer
Pada awal bab ini, ketika mempelajari loop For Each, Anda mengetahui bagaimana mencari nilai terbesar pada sebuah array. Anda akan melihat contoh yang sama menggunakan loop For Next dan mengakses setiap elemen array menggunakan subskript. Diasumsikan bahwa deklarasi array berikut ada pada sebuah aplikasi, dan bahwa nilai-nilai telah disimpan di dalam array:

Dim intNilai() As Integer = {1, 2, 3, 4, 5}
Dim intHitung As Integer          'pencacah loop
Dim intTertinggi As Integer       'untuk memuat nilai tertinggi

'membaca elemen pertama
intTertinggi = intNilai(0)

'mencari nilai tertinggi
For intHitung = 1 To (intNilai.Length - 1)
    If intNilai(intHitung) > intTertinggi Then
        intTertinggi = intNilai(intHitung)
    End If
Next

Kode ini diawali dengan menugaskan nilai dari elemen array pertama kepada variabel intTertinggi. Selanjutnya, loop membandingkan semua elemen array lain, diawali pada subskript 1, dengan intTertinggi. Setiap kali ia menemukan sebuah nilai di dalam array yang lebih besar dari intTertinggi, nilai itu disalin ke intTertinggi. Ketika loop selesai dieksekusi, intTertinggi sama dengan nilai tertinggi di dalam array.

Nilai Terendah
Kode berikut, yang mencari nilai terendah di dalam array, hampir sama dengan kode untuk mencari nilai tertinggi. Ketika loop selesai dieksekusi, intTerendah sama dengan nilai terendah di dalam array.

Dim intNilai() As Integer = {1, 2, 3, 4, 5}
Dim intHitung As Integer          'pencacah loop
Dim intTerendah As Integer 'untuk memuat nilai terendah

'membaca elemen pertama
intTerendah = intNilai(0)

'mencari nilai terendah
For intHitung = 1 To (intNilai.Length - 1)
    If intNilai(intHitung) < intTerendah Then
        intTerendah = intNilai(intHitung)
    End If
Next

Menyalin Isi Array Ke Array Lain
Diasumsikan bahwa sebuah aplikasi telah mendeklarasikan dua array berikut dan telah menginisialisasi array intNilaiLama dengan nilai-nilai:

Const intSUBSRKIPT_MAKS As Integer = 200
Dim intNilaiLama(intSUBSRKIPT_MAKS) As Integer
Dim intNilaiBaru(intSUBSRKIPT_MAKS) As Integer

Dimisalkan bahwa Anda ingin menyalin isi dari array intNilaiLama ke array intNilaiBaru. Anda mungkin akan tergoda untuk menggunakan statemen penugasan tunggal berikut:

intNilaiBaru = intNilaiLama

Meskipun statemen ini dapat dikompilasi, ia tidak menyalin isi array intNilaiLama ke array intNilaiBaru. Melainkan, ia menyebabkan intNilaiBaru dan intNilaiLama mereferensi array yang sama di dalam array.

Jadi, Anda perlu menggunakan sebuah loop untuk menyalin elemen-elemen individual dari intNilaiLama ke intNilaiBaru, seperti ditunjukkan pada kode berikut:

For intHitung = 0 To (intNilaiLama.Length-1)
    intNilaiBaru(intHitung) = intNilaiLama(intHitung)
Next

Array-Array Paralel
Kadangkala, adalah berguna untuk menyimpan data yang berelasi pada dua atau lebih array yang berelasi, yang dikenal sebagai array-array paralel. Hal ini dimulai dengan mendeklarasikan dua array, satu array yang memuat nama pelatihan dan array lain memuat biaya tiap pelatihan:

Const intMAKS As Integer = 4

Dim strPelatihan(intMAKS) As String = {"Keterampilan Bernegosiasi",
    "Menekan Stres", "Kerja Tim", "Menulis Resume"}

Dim decBiaya(intMAKS) As String = {500D, 450D, 720D, 250D}

Informasi untuk tiap pelatihan disimpan pada posisi yang sama di dalam tiap array. Sebagai contoh, harga dari strPelatihan(0) disimpan di dalam decBiaya(0). Dengan kata lain, Keterampilan Bernegoisasi berbiaya Rp. 500. Atau, harga dari strPelatihan(2) disimpan di dalam decBiaya(2). Gambar 6.16 menunjukkan bagaimana array-array ini dipasangkan satu sama lain.

Gambar 6.16 Memasangkan pelatihan dan biaya menggunakan array-array paralel

Dengan memiliki informasi di dalam array-array paralel, Anda memiliki keuntungan yaitu hanya memerlukan satu subksript untuk mendapatkan informasi. Sebagai contoh, loop berikut menampilkan tiap nama pelatihan dan harganya pada sebuah kotak list:

For i As Integer = 0 to intMaks-1
    listTampil.Items.Add(strPelatihan(i) & " berbiaya " & decBiaya(i))
Next i


Tutorial 6.4 memeriksa sebuah aplikasi yang menggunakan array-array paralel: satu array yang memuat nama-nama bulan, dan array lain yang memuat banyak hari dalam tiap bulan.

Tutorial 6.4: Menggunakan Array-Array Paralel
Pada tutorial ini, Anda akan menciptakan sebuah aplikasi yang menampilkan banyak hari pada tiap bulan. Aplikasi ini akan menggunakan dua array paralel: sebuah array string yang diinisialisasi dengan nama tiap bulan, dan sebuah array Integer yang diinisialisasi dengan banyak hari pada tiap bulan. Ketika sebuah tombol diklik, aplikasi akan menampilkan keluarannya pada sebuah kotak list.

Langkah 1: Ciptakanlah sebuah projek Windows Forms Application baru dengan nama Bulan dan Hari.

Langkah 2: Bangunlah form projek dengan sebuah kontrol ListBox dan dua kontrol Button seperti ditunjukkan pada Gambar 6.17.

Gambar 6.17 Form dari aplikasi Bulan dan Hari


Langkah 3: Sempurnakan kode untuk setiap event handler pada form seperti ditunjukkan berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub tombolTampil_Click(…) Handles tombolTampil.Click

    Dim strBulan() As String = {"Januari", "Februari", "Maret",
     "April", "Mei", "Juni", "Juli", "Agustus", "September",
     "Oktober", "November", "Desember"}

    'array dengan banyak hari tiap bulan
    Dim intHari() As Integer = {31, 28, 31, 30, 31, 30,
    31, 31, 30, 31, 30, 31}

    'menampilkan daftar bulan dengan banyak hari
    Dim i As Integer
    For i = 0 To strBulan.Length - 1
        listKeluaran.Items.Add(strBulan(i) & " memiliki " &
        intHari(i).ToString() & " hari.")
    Next
End Sub

Amati lebih dekat kode untuk event handler tombolTampil_Click. Baris 3 sampai baris 5 mendeklarasikan sebuah array String dengan nama strBulan. Array strBulan diinisialisasi dengan nama-nama bulan, jadi ia memiliki dua belas elemen. Baris 8 dan baris 9 mendeklarasikan sebuah array Integer dengan nama intHari. Array intHari diinisialisasi dengan banyak hari pada tiap bulan, jadi ia memiliki dua belas elemen.

Array strBulan dan intHari memiliki relasi paralel seperti ditunjukkan pada Gambar 6.18. Pada relasi ini, strBulan(i) memuat nama sebuah bulan, dan intHari(i) memuat banyak hari pada bulan yang sama.

Loop For…Next yang diawali pada baris 13 menggunakan variabel i untuk menjejak array-array paralel, yang menampilkan sebaris keluaran pada kotak list listKeluaran. Pada iterasi pertama, string “Januari memiliki 31 hari.” akan ditambahkan pada kotak list. Pada iterasi kedua, string “Februari memiliki 28 hari.” akan ditambahkan pada kotak list. Ini berlanjut untuk setiap elemen di dalam kedua array.

Gambar 6.18 Array-array paralel


Langkah 4: Simpan projek, dan jalankan aplikasi. Klik tombol Tampilkan Bulan dan Hari. Anda akan melihat keluara seperti ditunjukkan pada Gambar 6.19.

Gambar 6.19 Keluaran ditampilkan pada sebuah kontrol ListBox

Langkah 5: Klik tombol Keluar untuk mengakhiri aplikasi.


Kotak List dan Kotak Combo
Item-item yang disimpan di dalam sebuah kotak list atau kotak combol memiliki indeks built-in. Indeks dari item pertama adalah 0, indeks dari item kedua adalah 1, dan seterusnya. Karena skema pengindeksan ini berkaitan dengan cara dari subskript array digunakan, adalah mudah untuk menciptakan relasi-relasi paralel antara kotak list, kotak combo, dan array.

Sebagai contoh, diasumsikan bahwa sebuah aplikasi memiliki kotak list dengan nama listOrang. Statemen-statemen berikut menyimpan tiga nama di dalam kotak list:

listOrang.Items.Add("Vivian Siahaan")
listOrang.Items.Add("John Kristof")
listOrang.Items.Add("Rico Chandra")

Dengan statemen-statemen ini dieksekusi, “Vivian Siahaan” disimpan pada indeks 0, “John Kristof” disimpan pada indeks 1, dan “Rico Chandra” disimpan pada indeks 2. Juga diasumsikan bahwa aplikasi memiliki sebuah array string dengan nama strNomorTelp. Array ini memuat nomor-nomor telepon dari tiga orang dengan nama-nama yang disimpan di dalam kotak list. Statemen-statemen berikut menyimpan nomor-nomor telepon di dalam array:

strNomorTelp(0) = "555-2987"
strNomorTelp(1) = "555-5656"
strNomorTelp(2) = "555-8897"

Nomor telepon yang disimpan pada elemen 0 (“555-2987”) adalah milik dari orang dengan nama yang disimpan pada indeks 0 di dalam kotak list (“Vivian Siahaan”). Sama halnya, nomor telepon yang disimpan pada elemen 1 adalah milik dari orang dengan nama yang disimpan pada indeks 1 di dalam kotak list, dan seterusnya. Ketika user memilih sebuah nama dari kotak list, statemen berikut menampilkan nomor telepon orang tersebut:

MessageBox.Show(strNomorTelp(listOrang.SelectedIndex))

Properti SelectedIndex memuat indeks dari item terseleksi di dalam kotak list. Statemen ini menggunakan indeks sebagai sebuah subskript di dalam array strNomorTelp.

Adalah dimungkinkan agar properti SelectedIndex memuat sebuah nilai di luar batas dari array paralel. Ketika tidak ada item diseleksi, properti SelectedIndex memuat -1. Kode berikut memberikan pemeriksaan error:

With listOrang
    If .SelectedIndex > -1 And
       .SelectedIndex < strNomorTelp.Length Then
        MessageBox.Show(strNomorTelp(.SelectedIndex))
    Else
        MessageBox.Show("Ini bukan pilihan yang valid.")
    End If
End With

Array yang Menunjuk ke Data Lain
Cara lain dimana array dapat bermanfaat adalah ketika Anda perlu mencari informasi di dalam array lain yang memiliki datanya dengan urutan yang berbeda. Pertama, Anda kembali menggunakan array pelatihan dan biayanya yang telah digunakan sebelumnya:

Dim strPelatihan() As String = {"Keterampilan Bernegoisasi",
    "Menekan stres", "Kerja Tim", "Menulis Resume"}

Dim decBiaya() As String = {500D, 450D, 720D, 250D}

Kemudian, Anda mendeklarasikan sebuah daftar kota di mana pelatihan akan diadakan:

Dim strKota() As String = {"Siantar", "Medan", "Jakarta",
    "Solo", "Surabaya", "Bandung"}

Anda akan mencocokkan antara tiap pelatihan dengan tiap kota. Untuk melakukannya, Anda menciptakan sebuah array lokasi yang memberitahu di mana tiap pelatihan akan diselenggarakan:

Dim intLokasi() As Integer = {3, 0, 1, 4}

Nilai para array tersebut menunjuk ke sebuah entri pada array strKota. Ia memberitahu, misalnya, bahwa pelatihan pertama adalah pada strKota(3), yaitu Solo. Atau, pelatihan kedua adalah strKota(0), yaitu Siantar. Pelatihan ketiga berada di strKota(4), yaitu Surabaya. Anda akan menuliskan semua informasi ini pada sebuah kotak list, dengan menambahkan nama kota pelatihan:

For i As Integer = 0 to strPelatihan.Length-1
    listTampil.Items.Add(strPelatihan(i) & " berbiaya " & decBiaya(i) [#] &
      " dan akan diselenggarakan di " & strKota(intLokasi(i)))
Next i

Untuk memahami kode ini, Anda perlu melihat ekspresi strKota(intLokasi(i)). Ketika loop beriterasi pertama kalinya, ketika i = 0, intLokasi(0) memuat nilai 3. Sekarang, Anda menggunakan nilai 3 ini untuk menciptakan ekspresi strKota(3). Apa isinya? Anda dapat melihat elemen dengan subskript 3 di dalam array strKota, yaitu Solo, seperti ditunjukkan pada Gambar 6.20.

Gambar 6.20 Menggunakan array intLokasi untuk mengidentifikasi nama kota


Melakukan Pencarian Pada Array
Aplikasi tidak hanya menyimpan dan memproses informasi yang disimpan di dalam array, tetapi juga seringkali perlu melakukan pencarian item spesifik pada array. Metode paling dasar dalam pencarian pada array adalah pencarian sekuensial. Ia menggunakan sebuah loop untuk memeriksa elemen-elemen di dalam array, satu per satu, diawali dari elemen pertama. Metode ini membandingkan setiap elemen dengan nilai yang sedang dicari dan berhenti ketika nilai ditemukan atau ketika akhir array diraih. Jika nilai yang sedang dicari tidak ada di dalam array, algoritma tidak berhasil menemukannya sama akhir array.

Pseudocode untuk pencarian sekuensial adalah sebagai berikut:

ditemukan = False
subskript = 0
Do While ditemukan bernilai False dan subskript < panjang array
    If array(subskript) = nilaiDicari Then
        ditemukan = True
        posisi = subskript
    End If
    subskript += 1
End While

Pada pseudocode, ditemukan adalah sebuah variabel Boolean, posisi dan subskript adalah integer, array adalah sebuah array bertipe apapun, dan nilaiDicari adalah nilai yang sedang dicari. Ketika pencarian selesai, jika variabel ditemukan bernilai False, nilai yang dicari tidak ditemukan. Jika ditemukan bernilai True, posisi akan memuat subskript dari elemen array yang memuat nilai yang dicari.

Sebagai contoh, dimisalkan sebuah aplikasi menyimpan sejumlah skor ujian di dalam sebuah array dengan nama skor. Pseudocode berikut melakukan pencarian sebuah elemen yang memuat nilai 100 di dalam array:

ditemukan = False
hitung = 0
Do While Not ditemukan And hitung < skor.Length
    If skor(hitung) = 100 Then
        ditemukan = True
        posisi = hitung
    End If
    hitung += 1
Loop

' Apakah elemen 100 ditemukan di dalam array?
If ditemukan Then
    Tampilkan “Selamat! Anda mendapatkan skor 100 ” & (posisi + 1)
Else
    Tampilkan “Anda tidak mendapatkan skor 100, tetap semangat!”
End If

Mengurutkan Array
Programer seringkali ingin mengurutkan atau menata elemen-elemen dari sebuah array dengan tatanan menaik, yang berarti bahwa nilai-nilai ditata dari terendah sampai tertinggi. Nilai terendah disimpan pada elemen pertama dan nilai tertinggi disimpan pada elemen terakhir. Untuk mengurutkan array dengan tatanan menaik, Anda menggunakan metode Array.Sort. Bentuk umumnya adalah sebagai berikut:

Array.Sort(NamaArray)

NamaArray adalah nama array yang ingin Anda urutkan. Sebagai contoh, diasumsikan bahwa deklarasi berikut ada pada sebuah aplikasi:

Dim intNilai() As Integer = {7, 12, 1, 6, 3}

Statemen berikut akan mengurutkan array dengan tatanan menaik:

Array.Sort(intNilai)

Setelah statemen ini dieksekusi, nilai-nilai array menjadi tatanan berikut: 1, 3, 6, 7, 12. Ketika Anda melewatkan sebuah array string kepada metode Array.Sort, array tersebut diurutkan dengan tatanan menaik sesuai dengan skema pengkondean Unicode, yang telah didiskusikan pada Bab 3. Umumnya, pengurutan terjadi dengan tatanan alfabetis. Jadi, dengan begitu, dijit-dijit numerik berada di posisi depan, huruf-huruf besar kemudian, dan huruf-huruf kecil belakangan. Sebagai contoh, diasumsikan bahwa deklarasi berikut diberikan:

Dim strNama() As String = {"dan", "Kim", "Adam", "Bill"}

Statemen tersebut mengurutkan array dengan tatanan menaik:

Array.Sort(strNama)

Setelah statemen dieksekusi, nilai-nilai di dalam array menjadi tatanan berikut: “Adam”, “Bill”, “Kim”, “dan”

Mengubah Ukuran Array Secara Dinamis
Anda dapat mengubah banyak elemen di dalam suatu array pada saat aplikasi dijalankan, dengan menggunakan statemen ReDim. Bentuk umum dari statemen ReDim adalah berikut:

ReDim [Preserve] NamaArray(SubskriptAtas)

Kata Preserve bersifat opsional. Jika digunakan, semua nilai yang ada di dalam array dipertahankan. NamaArray adalah nama dari array yang ukurannya diubah. Elemen SubskriptAtas adalah subskript atas baru dan harus berupa bilangan bulat positif. Jika Anda mengubah ukuran sebuah array dan membuatnya lebih kecil dari sebelumnya, elemen-elemen di akhir array akan hilang.

Sebagai contoh, statemen berikut mengubah ukuran array strNama sehingga 25 menjadi subskript atas baru:

ReDim Preserve strNama(25)

Setelah statemen ini dieksekusi, strNama memiliki 26 elemen. Karena katakunci Preserve digunakan, semua nilai yang awalnya disimpan di dalam strNama akan tetap ada.

Ketika Anda tidak mengetahui pada saat perancangan berapa banyak elemen yang Anda perlukan di dalam sebuah array, Anda dapat mendeklarasikan sebuah array tanpa ukuran dan menggunakan statemen ReDim untuk memberikannya ukuran.

Sebagai contoh, dimisalkan bahwa Anda ingin menuliskan sebuah aplikasi pererata yang mereratakan sejumlah skor ujian. Anda awalnya dapat mendeklarasikan array tanpa ukuran, sebagai berikut:

Dim dblSkor() As Double

Saat itu, dblSkor sama dengan Nothing, tetapi mampu mereferensi sebuah array yang memuat nilai-nilai Double. Kemudian, ketika aplikasi telah menentukan banyaknya skor ujian, sebuah statemen ReDim akan memberikannya ukuran. Kode berikut menunjukkan sebuah contoh dari operasi semacam itu:

intBanyakSkor = CInt(InputBox("Masukkan banyaknya skor ujian."))
If intBanyakSkor > 0 Then
    ReDim dblSkor(intBanyakSkor - 1)
Else
    MessageBox.Show("Anda harus memasukkan 1 atau lebih besar dari itu.")
End If

Kode ini meminta user untuk memasukkan banyaknya skor ujian. Jika user memasukkan suatu nilai yang lebih besar dari 0, statemen ReDim akan mengubah ukuran array dengan intBanyakSkor – 1 sebagai subskript atas. (Karena subskript diawali dari 0, subskript atas menjadi intBanyakSkor – 1).


6.4 Prosedur dan Fungsi: Bekerja dengan Array
KONSEP: Anda dapat melewatkan array sebagai argumen kepada prosedur dan fungsi. Anda dapat menghasilkan (menjadikan nilai balik berupa) array dari sebuah fungsi. Kapabilitas ini dapat Anda pakai untuk menulis prosedur atau fungsi yang melakukan sejumlah operasi pada array.

Melewatkan Array Sebagai Argumen
Seringkali Anda ingin menuliskan prosedur atau fungsi yang memproses data dalam array. Sebagai contoh, prosedur dapat dituliskan untuk menyimpan data di dalam array, menampilkan isi array, dan menjumlahkan atau mereratakan nilai-nilai di dalam array. Umumnya prosedur semacam itu menerima array sebagai argumennya.

Prosedur berikut menerima sebuah array integer sebagai argumennya dan menampilkan penjumlahan atas elemen-elemen array:

'prosedur TampilJum menampilkan penjumlahan atas tiap elemen
'di dalam array argumen
Sub TampilJum(ByVal intArray() As Integer)
    Dim intTotal As Integer = 0   'akumulator
    Dim intHitung As Integer      'pencacah loop

    For intHitung = 0 To (intArray.Length - 1)
        intTotal += intArray(intHitung)
    Next

    MessageBox.Show("Penjumlahan total = " & intTotal.ToString())
End Sub

Variabel parameter dideklarasikan sebagai sebuah array tanpa subskript atas yang ditetapkan di dalam kurung. Parameter adalah sebuah variabel objek yang mereferensi suatu array yang dilewatkan sebagai argumen. Untuk memanggil prosedur, Anda melewatkan nama array, seperti ditunjukkan pada kode berikut:

Dim intNilai() As Integer = { 2, 4, 7, 9, 8, 12, 10 }
TampilJum(intNilai)

Dengan kode ini dieksekusi, prosedur TampilJum dipanggil dan array intNilai dilewatkan sebagai argumen. Prosedur ini menghitung dan menampilkan penjumlahan atas elemen-elemen di dalam intNilai.

Melewatkan Array Dengan Nilai dan Dengan Referensi
Parameter array dapat dideklarasikan ByVal atau ByRef. Namun, katakunci ByVal tidak membatasi sebuah prosedur dari pengaksesan dan pemodifikasian elemen-elemen array argumen. Sebagai contoh, lihat prosedur SetKeNol berikut:

'menetapkan semua elemen dari argumen array menjadi nol
Sub SetKeNol(ByVal intArray() As Integer)
    Dim intHitung As Integer 'kounter loop

    For intHitung = 0 To intArray.Length - 1
        intArray(intHitung) = 0
    Next
End Sub

Prosedur ini menerima sebuah array integer sebagai argumennya dan menetapkan setiap elemen dari array menjadi 0. Dimisalkan bahwa Anda memanggil prosedur ini, seperti ditunjukkan pada kode berikut:

Dim intNilai() As Integer = { 1, 2, 3, 4, 5 }
SetKeNol(intNilai)

Setelah prosedur dieksekusi, array intNilai akan memuat nilai-nilai 0, 0, 0, 0, dan 0.

Meskipun katakunci ByVal tidak membatas sebuah prosedur dari pengaksesan dan pemodifikasian elemen-elemen dari argumen array, ia mencegah argumen array dari penugasan kepada array lain. Sebagai contoh, prosedur berikut menerima sebuah array sebagai argumennya dan kemudian menugaskan parameter itu kepada array lain:

'menugaskan argumen array kepada array lain. apa bisa?
Sub ResetNilai(ByVal intArray() As Integer)
    Dim baruArray() As Integer = { 0, 0, 0, 0, 0}
    intArray = baruArray
End Sub

Dimisalkan bahwa Anda memanggil prosedur ini, seperti ditunjukkan pada kode ini:

Dim intNilai() As Integer = { 1, 2, 3, 4, 5 }
ResetNilai(intNilai)

Setelah prosedur dieksekusi, array intNilai masih memuat nilai-nilai 1, 2, 3, 4, dan 5. Jika array parameter dideklarasikan dengan katakunci ByRef, penugasan ini akan memengaruhi argumen, dan array intNilai akan memuat nilai-nilai 0, 0, 0, 0, dan 0 setelah prosedur dieksekusi.

Menghasilkan (Menjadikan Nilai Balik Berupa) Array Dari Sebuah Fungsi
Anda dapat menghasilkan atau menjadikan array sebagai nilai balik. Sebagai contoh, fungsi berikut meminta user memasukkan empat nama. Nama-nama itu kemudian dihasilkan di dalam suatu array.

'membaca tiga nama dari user dan menghasilkan atau menjadikan
'array string sebagai nilai balik
Function BacaNama() As String()
    Const intSUBSKRIPT_MAKS As Integer = 2
    Dim strNama(intSUBSKRIPT_MAKS) As String
    Dim intHitung As Integer

    For intHitung = 0 To 3
        strNama(intHitung) = InputBox("Masukkan nama " &
          (intHitung + 1).ToString())
    Next

    Return strNama
End Function

Fungsi tersebut memiliki tipe nilai balik berupa String(), yang mengindikasikan bahwa ia menghasilkan sebuah array string. Nilai balik dapat ditugaskan kepada sembarang array string. Kode berikut menunjukkan nilai balik fungsi yang ditugaskan kepada strKonsumen:

Dim strKonsumen() As String
strKonsumen = BacaNama()

Setelah kode dieksekusi, array strKonsumen akan memuat nama-nama yang dimasukkan oleh user.

Sebuah array yang dihasilkan dari suatu fungsi harus ditugaskan kepada sebuah array dengan tipe sama. Sebagai contoh, jika fungsi menghasilkan sebuah array integer, maka nilai baliknya harus ditugaskan hanya kepada sebuah array integer. Pada Tutorial 6.5, Anda akan mempelajari sebuah aplikasi yang memuat beberapa fungsi yang bekerja pada array.

Tutorial 6.5: Memeriksa Sebuah Aplikasi Yang Melewatkan Array Kepada Prosedur dan Fungsi
Pada tutorial ini, Anda akan memeriksa sebuah aplikasi Data Penjualan, yang meminta user untuk memasukkan data penjualan untuk lima hari. Aplikasi ini kemudian menghitung dan menampilkan penjualan total, penjualan rerata, penjualan tertinggi, dan penjualan terendah.

Langkah 1: Buka projek Data Penjualan.

Langkah 2: Sebelum Anda melihat kode, jalankan aplikasi. Gambar 6.21 menunjukkan form dari projek. Klik tombol Hitung Data Penjualan.

Gambar 6.21 Form Data Penjualan

Langkah 3: Serangkaian lima kotak masukan akan ditampilkan, yang meminta Anda untuk memasukkan nilai penjualan untuk hari 1 sampai hari 5. Masukkan nilai-nilai berikut untuk tiap kotak masukan:

Hari 1: 1000
Hari 2: 2000
Hari 3: 3000
Hari 4: 4000
Hari 5: 5000

Gambar 6.22 Form Data Penjualan dengan data-data penjualan ditampilkan

Setelah Anda memasukkan nilai penjualan untuk hari 5, form aplikasi akan ditampilkan seperti pada Gambar 6.22.

Langkah 4: Klik tombol Keluar untuk mengakhiri aplikasi.

Langkah 5: Sekarang, Anda akan memeriksa kode apliksi. Buka jendela Code dan lihat pada event handler tombolHitung_Click. Kode ditampilkan di sini, dengan nomor baris sebagai referensi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Class FormDataPenjualan

    Private Sub tombolHitung_Click(…) Handles tombolHitung.Click
        'menciptakan array untuk memuat nilai-nilai penjualan
        Const intSUBRKRIPT_MAKS As Integer = 4
        Dim decPenjualan(intSUBRKRIPT_MAKS) As Decimal

        'variabel-variabel lokal lain
        Dim decPenjualanTotal As Decimal        'menampung penjualan total
        Dim decPenjualanRerata As Decimal       'menampung penjualan rerata
        Dim decPenjualanTertinggi As Decimal    'menampung penjualan tertinggi
        Dim decPenjualanTerendah As Decimal     'menampung penjualan terendah

        'membaca nilai-nilai penjualan dari user
        BacaDataPenjualan(decPenjualan)

        'menghitung penjualan total, penjualan rerata, penjualan tertinggi
        'dan penjualan terendah
        decPenjualanTotal = TotalArray(decPenjualan)
        decPenjualanRerata = RerataArray(decPenjualan)
        decPenjualanTertinggi = Tertinggi(decPenjualan)
        decPenjualanTerendah = Terendah(decPenjualan)

        'menampilkan hasil
        labelTotal.Text = "Rp. " & decPenjualanTotal.ToString()
        labelRerata.Text = "Rp. " & decPenjualanRerata.ToString()
        labelTertinggi.Text = "Rp. " & decPenjualanTertinggi.ToString()
        labelTerendah.Text = "Rp. " & decPenjualanTerendah.ToString()
    End Sub

Berikut adalah simpulan deklarasi-deklarasi yang ditampilkan pada baris 5 sampai baris 12:

  • Baris 5 mendeklarasikan konstanta intSUBSKRIPT_MAKS, ditetapkan nilai 4. Ini akan menjadi subskript atas dari array yang memuat data-data penjualan.
  • Baris 6 mendeklarasikan decPenjualan sebagai sebuah array Decimal, menggunakan intSUBSKRIPT_MAKS sebagai subskript atasnya. Array ini mempunyai lima elemen, satu untuk tiap data penjualan.
  • Baris 9 mendeklarasikan decPenjualanTotal sebagai sebuah variabel Decimal, untuk menampung penjualan total.
  • Baris 10 mendeklarasikan decPenjualanRerata sebagai sebuah variabel Decimal, untuk menampung penjualan rerata.
  • Baris 11 mendeklarasikan decPenjualanTertinggi sebagai sebuah variabel Decimal, untuk menampung penjualan tertinggi.
  • Baris 12 mendeklarasikan decPenjualanTerendah sebagai sebuah variabel Decimal, untuk menampung penjualan terendah.

Baris 15 memanggil prosedur BacaDataPenjualan, yang melewatkan array decPenjualan sebagai argumennya. Prosedur BacaDataPenjualan menampilkan sejumlah kotak masukan yang meminta user untuk memasukan nilai penjualan untuk tiap hari. Prosedur ini menyimpan nilai-nilai yang dimasukkan oleh user di dalam array yang dilewatkan sebagai argumen.

Baris 19 memanggil fungsi TotalArray, yang melewatkan array decPenjualan sebagai argumennya. Fungsi ini menghasilkan total dari nilai-nilai di dalam array, dan nilai total itu ditugaskan kepada variabel decPenjualanTotal.

Baris 20 memanggil fungsi RerataArray, yang melewatkan array decPenjualan sebagai argumennya. Fungsi ini menghasilkan rerata dari nilai-nilai di dalam array, dan nilai rerata itu ditugaskan kepada variabel decPenjualanRerata.

Baris 21 memanggil fungsi Tertinggi, yang melewatkan array decPenjualan sebagai argumennya. Fungsi ini menghasilkan nilai tertinggi dari nilai-nilai di dalam array, dan nilai tertinggi itu ditugaskan kepada variabel decPenjualanTertinggi.

Baris 22 memanggil fungsi Terendah, yang melewatkan array decPenjualan sebagai argumennya. Fungsi ini menghasilkan nilai terendah dari nilai-nilai di dalam array, dan nilai terendah itu ditugaskan kepada variabel decPenjualanTerendah.

Statemen-statemen pada baris 25 sampai baris 28 menampilkan data penjualan pada kontrol-kontrol Label pada form dari aplikasi.

Tepat di bawah event handler tombolHitung_Click ditempatkan prosedur BacaDataPenjualan, yang ditunjukkan di sini dengan nomor baris sebagai referensi.

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    'prosedur BacaDataPenjualan menerima sebuah argumen array Decimal
    'Ia mengisi array dengan nilai-nilai penjualan yang dimasukkan oleh user.

    Sub BacaDataPenjualan(ByRef decPenjualan() As Decimal)
        Dim intHitung As Integer = 0 'kounter loop, ditetapkan 0

        'mengisi array decPenjualan dengan nilai-nilai dimasukkan user.
        Do While intHitung < decPenjualan.Length
            Try
                'membaca nilai penjualan sehari
                decPenjualan(intHitung) =
                 CDec(InputBox("Masukkan nilai penjualan untuk hari " &
                (intHitung + 1).ToString()))
                'menginkremen intHitung
                intHitung += 1
            Catch
                'menampilkan pesan error untuk masukan tak valid
                MessageBox.Show("Enter a valid numeric value.")
            End Try
        Loop
    End Sub

Baris 35 mendeklarasikan intHitung, yang akan dipakai sebagai pencacah loop dan untuk menjejak parameter array decPenjualan. Perhatikan bahwa intHitung diinisialisasi dengan 0.

Loop Do While yang diawali pada baris 38 menggunakan variabel intHitung untuk menjejak parameter array decPenjualan. Ingat bahwa intHitung diinisialisasi dengan 0. Loop dieksekusi sepanjang intHitung bernilai kurang dari decPenjualan.Length.

Di dalam loop, sebuah statemen Try-Catch dipakai untuk menangkap sembarang eksepsi yang bisa terjadi ketika user memasukkan nilai tak numerik. Statemen yang ada pada baris 41 sampai baris 43 melakukan hal-hal berikut:
·         Menampilkan sebuah kotak masukan yang meminta user untuk memasukkan nilai penjualan untuk hari tertentu.
·         Menggunakan fungsi CDec untuk mengkonversi masukan user menjadi sebuah Decimal.
·         Menugaskan nilai yang dihasilkan kepada elemen array decPenjualan(intHitung).

Jika user memasukkan sebuah nilai tak valid, program akan melompat ke klausa Catch pada baris 46, menampilkan pesan error pada baris 48, dan kemudian loop dimulai kembali. Jika user memasukkan sebuah nilai valid, baris 45 akan menambahkan 1 pada variabel intHitung. Lop kemudian akan dimulai kembali. Ketika loop selesai dieksekusi, parameter array decPenjualan akan memuat nilai-nilai penjualan yang dimasukkan oleh user, dan prosedur berakhir.

Selanjutnya adalah fungsi TotalArray, yang ditampilkan di sini dengan nomor baris untuk referensi. Fungsi ini menerima sebuah array Decimal sebagai argumennya. Ia menggunakan loop untuk menjejak elemen-elemen array, menjumlahkan nilai-nilainya pada sebuah variabel akumulator. Total dari elemen-elemen array kemudian dijadikan nilai balik.

53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
   'fungsi TotalArray menerima sebuah array Decimal sebagai argumennya
    'dan menghasilkan nilai total dari elemen-elemen array

    Function TotalArray(ByVal decNilai() As Decimal) As Decimal
        Dim decTotal As Decimal = 0     'akumulator
        Dim intHitung As Integer        'pencacah loop

        'menghitung total dari elemen-elemen array
        For intHitung = 0 To (decNilai.Length - 1)
            decTotal += decNilai(intHitung)
        Next

        'menghasilkan total
        Return decTotal
    End Function

Selanjutnya, fungsi RerataArray, yang ditunjukkan di sini dengan nomor baris sebagai referensi. Fungsi ini menerima sebuah array Decimal sebagai argumennya dan menghasilkan rerata dari elemen-elemen array.

69
70
71
72
73
74
75
    'fungsi RerataArray menerima sebuah array Decimal sebagai argumennya
    'dan menghasilkan rerata dari elemen-elemennya

    Function RerataArray(ByVal decNilai() As Decimal) As Decimal
        Return TotalArray(decNilai) / decNilai.Length
    End Function

Selanjutnya, fungsi Tertinggi, yang ditunjukkan di sini dengan nomor baris sebagai referensi. Fungsi ini menerima sebuah array Decimal sebagai argumennya dan menghasilkan nilai tertinggi dari elemen-elemen array.

76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
    'fungsi Tertinggi menerima sebuah array Decimal sebagai argumennya
    'dan menghasilkan nilai tertinggi yang dimuatnya

    Function Tertinggi(ByVal decNilai() As Decimal) As Decimal
        Dim intHitung As Integer        'pencacah loop
        Dim decTertinggi As Decimal     'memuat nilai tertinggi

        'membaca nilai pertama di dalam array
        decTertinggi = decNilai(0)

        'mencari nilai tertinggi
        For intHitung = 1 To (decNilai.Length - 1)
            If decNilai(intHitung) > decTertinggi Then
                decTertinggi = decNilai(intHitung)
            End If
        Next

        'menghasilkan nilai tertinggi
        Return decTertinggi
    End Function

Selanjutnya, fungsi Terendah, yang ditunjukkan di sini dengan nomor baris sebagai referensi. Fungsi ini menerima sebuah array Decimal sebagai argumennya dan menghasilkan nilai terendah dari elemen-elemen array.

97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
    'fungsi Terendah menerima sebuah array Decimal sebagai argumennya
    'dan menghasilkan nilai terendah yang dimuatnya

    Function Terendah(ByVal decNilai() As Decimal) As Decimal
        Dim intHitung As Integer        'pencacah loop
        Dim decTerendah As Decimal      'memuat nilai terendah

        'membaca nilai pertama di dalam array
        decTerendah = decNilai(0)

        'mencari nilai terendah
        For intHitung = 1 To (decNilai.Length - 1)
            If decNilai(intHitung) < decTerendah Then
                decTerendah = decNilai(intHitung)
            End If
        Next

        'menghasilkan nilai terendah
        Return decTerendah
    End Function

Selanjutnya adalah event handler tombolKeluar_Click, yang ditunjukkan di sini dengan nomor baris untuk referensi:

118
119
120
121
122
Private Sub tombolKeluar_Click(sender As Object, e As EventArgs) Handles tombolKeluar.Click
        'menutup Form
        Me.Close()
    End Sub


6.4 Array Multi-Dimensi
KONSEP: Anda dapat menciptakan array dengan lebih dari dua dimensi untuk memuat himpunan data yang kompleks.

Array Dua-Dimensi
Semua array yang disajikan sejauh ini hanya memiliki satu subskript. Sebuah array dengan satu subskript dikenal dengan array satu-dimensi dan berguna untuk menyimpan dan bekerja dengan satu himpunan data. Kadangkala, adalah diperlukan untuk bekerja dengan beberapa himpunan data. Sebagai contoh, pada sebuah program pererata-nilai, seorang guru merekam semua skor ujian siswa di dalam sebuah array. Jika guru memiliki 30 siswa, ini berarti ada 30 array untuk merekam skor ujian untuk kelas. Daripada harus mendeklarasikan 30 array, akan lebih baik bila mendeklarasikan sebuah array dua-dimensi.

Array dua-dimensi adalah sebuah array yang memuat sejumlah array. Array dua dimensi dapat memuat sejumlah himpunan nilai. Imajinasikan sebuah array dua-dimensi yang memiliki baris-baris dan kolom-kolom, seperti ditunjukkan pada Gambar 6.23. Gambar ini menunjukkan sebuah array dengan tiga baris (dinomori 0, 1, dan 2) dan empat kolom (dinomori 0, 1, 2, dan 3). Ada total 12 elemen di dalam array.

Gambar 6.23 Baris-baris dan kolom-kolom

Untuk mendeklarasikan sebuah array dua-dimensi, dua subskript atas diperlukan, pertama untuk baris-baris dan kedua untuk kolom-kolom. Bentuk umum dari deklarasi array dua-dimensi diberikan sebagai berikut:

Dim NamaArray(AtasBaris, AtasKolom) As TipeData

Amati sintaksis tersebut lebih dekat:
·         NamaArray adalah nama dari array.
·         AtasBaris adalah nilai dari subskript baris tertinggi dari array. Nilainya harus berupa sebuah integer positif.
·         AtasKolom adalah nilai dari subskript kolom tertinggi dari array. Nilainya harus berupa sebuah integer positif.
·         TipeData adalah sebuah tipe data Visual Basic.


Sebuah contoh deklarasi dari array dua-dimensi dengan tiga baris dan empat kolom diberikan berikut dan ditampilkan pada Gambar 6.24. Subskript baris tertinggi adalah 2 dan subskript kolom tertinggi adalah 3.

Dim dblSkor (2, 3) As Double

Gambar 6.24 Deklarasi atas sebuah array dua-dimensi

Seperti array satu-dimensi, adalah praktek yang baik bila menggunakan konstanta bernama untuk menetapkan subskript atas. Berikut adalah contohnya:

Const intMAKS_BARIS As Integer = 2
Const intMAKS_KOL As Integer = 3
Dim dblSkor(intMAKS_BARIS, intMAKS_KOL) As Double

Ketika data di dalam sebuah array dua-dimensi diproses, setiap elemennya memiliki dua subskript, pertama untuk barisnya dan kedua untuk kolomnya. Dengan menggunakan array dblSkor sebagai contoh, elemen-elemen pada baris 0 direferensi sebagai berikut:

dblSkor(0, 0)
dblSkor(0, 1)
dblSkor(0, 2)
dblSkor(0, 3)

Elemen-elemen pada baris 1 direferensi sebagai berikut:

dblSkor(1, 0)
dblSkor(1, 1)
dblSkor(1, 2)
dblSkor(1, 3)

Elemen-elemen pada baris 2 direferensi sebagai berikut:

dblSkor(2, 0)
dblSkor(2, 1)
dblSkor(2, 2)
dblSkor(2, 3)

Gambar 6.25 mengilustrasikan array dengan subskript-subskript ditampilkan untuk tiap elemen.

Untuk mengakses salah satu elemen dari sebuah array dua-dimensi, Anda perlu menggunakan dua subskript. Sebagai contoh, statemen berikut menyimpan nilai 95 di dalam dblSkor(2, 1):

dblSkor(2, 1) = 95

Program seringkali menggunakan loop-loop bersarang untuk memproses array dua-dimensi. Sebagai contoh, kode berikut meminta user untuk memasukkan sebuah skor, sekali untuk tiap elemen di dalam array:

For intBaris = 0 To intMAKS_BARIS
    For intKol = 0 To intMAKS_KOL
        dblSkor(intBaris, intKol) = CDbl(InputBox("Masukkan sebuah skor."))
    Next
Next

Dan kode berikut menampilkan semua elemen di dalam array dblSkor:

For intBaris = 0 To intMAKS_BARIS
    For intKol = 0 To intMAKS_KOL
        lstOutput.Items.Add(dblSkor (intBaris, intKol).ToString())
    Next
Next

Gambar 6.25 Subskript untuk tiap elemen dari array dblSkor


Mengubah Ukuran Secara Implisit dan Inisialisasi Array Dua-Dimensi
Sama seperti array satu-dimensi, Anda bisa menyediakan daftar inisialisasi untuk array dua-dimensi. Ingat bahwa ketika Anda menyediakan daftar inisialisasi untuk sebuah array, Anda tidak dapat menyedikan subskript atas. Ketika menginisialisasi sebuah array dua-dimensi, Anda harus menyediakan koma untuk mengindikasikan jumlah dimensi. Berikut adalah sebuah contoh deklarasi dari array dua-dimensi dengan sebuah daftar inisialisasi:

Dim intNilai(,) As Integer = {{1, 2, 3},
                              {4, 5, 6},
                              {7, 8, 9}}

Nilai-nilai inisialisasi untuk setiap baris diapit dengan kurung kurawal. Pada contoh ini, nilai-nilai inisialisasi untuk baris 0 adalah {1, 2, 3}, nilai-nilai inisialisasi untuk baris 1 adalah {4, 5, 6}, dan nilai-nilai inisialisasi untuk baris 2 adalah {7, 8, 9}. Jadi, statemen ini mendeklarasikan sebuah array dengan tiga baris dan tiga kolom.

Nilai-nilai ditugaskan kepada array intNilai dengan cara berikut:

intNilai(0, 0) ditetapkan menjadi 1
intNilai(0, 1) ditetapkan menjadi 2
intNilai(0, 2) ditetapkan menjadi 3
intNilai(1, 0) ditetapkan menjadi 4
intNilai(1, 1) ditetapkan menjadi 5
intNilai(1, 2) ditetapkan menjadi 6
intNilai(2, 0) ditetapkan menjadi 7
intNilai(2, 1) ditetapkan menjadi 8
intNilai(2, 2) ditetapkan menjadi 9

Menjumlahkan Kolom-Kolom Array Dua-Dimensi
Anda dapat menggunakan loop bersarang untuk menjumlahkan kolom-kolom pada sebuah array dua-dimensi. Kode berikut menjumlahkan setiap kolom dari sebuah array dengan nama intNilai. Loop luar mengendalikan subskript kolom dan loop dalam mengendalikan subskript baris. Variabel intTotal mengakumulasi penjumlahan dari tiap kolom.

'menjumlahkan kolom-kolom
For intKol = 0 To intMAKS_KOL
    'menginisialisasi akumulator
    intTotal = 0

    'menjumlahkan semua baris di dalam kolom ini
    For intBaris = 0 To intMAKS_BARIS
        intTotal += intValues(intBaris, intKol)
    Next

    'menampilkan hasil penjumlahan kolom
    MessageBox.Show("Penjumlahan kolom " & intKol.ToString() &
                    " = " & intTotal.ToString())
Next


Tutorial 6.6: Menyempurnakan Aplikasi Daftar Kursi
Pada tutorial ini, Anda akan menyempurnakan aplikasi Daftar Kursi. Ketika selesai, aplikasi ini akan menampilkan daftar kursi di dalam pesawat dan user dapat memilih nomor kursi.

Aplikasi akan menampilkan harga dari kursi terseleksi.
Langkah 1: Buka projek Daftar Kursi.

Gambar 6.26 Form dari aplikasi Daftar Kursi

Gambar 6.26 menunjukkan form aplikasi yang telah diciptakan untuk Anda. Citra daftar kursi (yang ditampilkan pada sebuah kontrol PictureBox) menunjukkan kursi-kursi di pesawat, yang ditata pada baris-baris dan kolom-kolom. Ketika aplikasi dijalankan, user akan memasukkan nomor baris dan nomor kolom pada kotak teks teksBaris dan teksKol, dan kemudian mengklik tombol Tampilkan Harga. Harga dari kursi terseleksi akan ditampilkan pada label labelHarga.

Berikut adalah tabel yang menunjukkan daftar harga tiap kursi (dalam ribu rupiah).


Ketika Anda menuliskan kode untuk aplikasi, Anda akan menciptakan sebuah array dua-dimensi untuk menampung nilai-nilai ini.

Langkah 2: Sempurnakan kode untuk dua event handler pada form seperti ditunjukkan berikut. (Jangan ketik nomor baris, karena hanya untuk referensi).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Public Class FormDaftarKursi

    Private Sub tombolTampil_Click(…) Handles tombolTampil.Click
        'variabel-variabel untuk baris dan kolom terseleksi
        Dim intBaris, intKol As Integer

        'konstanta-konstanta untuk subskript baris maks dan kolom maks
        Const intMAKS_BARIS As Integer = 5
        Const intMAKS_KOL As Integer = 3

        'array dengan harga tiap kursi
        Dim decHarga(,) = {{450D, 450D, 450D, 450D},
        {425D, 425D, 425D, 425D},
        {400D, 400D, 400D, 400D},
        {375D, 375D, 375D, 375D},
        {375D, 375D, 375D, 375D},
        {350D, 350D, 350D, 350D}}

        Try
            'membaca nomor baris dan kolom terseleksi
            intBaris = CInt(teksBaris.Text)
            intKol = CInt(teksKol.Text)

            'memastikan baris dan kolom ada di dalam rentang
            If intBaris >= 0 And intBaris <= intMAKS_BARIS Then
                If intKol >= 0 And intKol <= intMAKS_KOL Then
                    'Tampilkan harga kursi terseleksi
                    labelHarga.Text = "Rp " & decHarga(intBaris, intKol).ToString() & " ribu"
                Else
                    'pesan error untuk kolom tak valid
                    MessageBox.Show("Kolom harus 0 sampai " &
                    intMAKS_KOL.ToString())
                End If
            Else
                'pesan error untuk baris tak valid
                MessageBox.Show("Baris harus 0 sampai " &
                intMAKS_BARIS.ToString())
            End If
        Catch
            'pesan error untuk masukan tak-integer
            MessageBox.Show("Baris dan kolom harus integer.")
        End Try
    End Sub

    Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
        'menutup form
        Me.Close()
    End Sub
End Class

Amati lebih dekat kode pada event handler tombolTampil_Click. Baris 5 mendeklarasikan variabel intBaris dan intKol. Keduanya akan memuat nomor baris dan nomor kolom yang dimasukkan oleh user. Baris 8 dan baris 9 mendeklarasikan konstanta intMAKS_BARIS (ditetapkan 5) dan intMAKS_KOL (ditetapkan 3). Nilai-nilai ini merupakan nomor baris atas dan nomor kolom atas di dalam array.

Baris 12 sampai baris 17 mendeklarasikan decHarga, sebuah array Decimal dua-dimensi, yang diinisialisasi dengan harga-harga kursi.

Sebuah statemen Try-Catch diawali pada baris 19 untuk menangani nilai-nilai tak numerik yang dimasukkan oleh user. Pada baris 21, Anda membaca nomor baris yang dimasukkan oleh user ke dalam kotak teks teksBaris, mengkonversinya menjadi sebuah integer, dan menyimpan hasilnya ke dalam variabel intBaris. Jika sebuah eksepsi dilemparkan karena nilai tak numerik, program akan melompat ke klausa Catch pada baris 39.

Gambar 6.27 Baris 2 dan kolom 3 diseleksi

Pada baris 22, Anda membaca nomor kolom yang dimasukkan oleh user ke dalam kotak teks teksKol, mengkonversinya menjadi sebuah integer, dan menyimpan hasilnya ke dalam variabel intKol. Jika sebuah eksepsi dilemparkan karena nilai tak numerik, program akan melompat ke klausa Catch pada baris 39.

Selanjutnya, Anda ingin memastikan bahwa nomor baris dan nomor kolom yang terseleksi berada di dalam rentang yang benar. Nomor baris valid adalah 0 sampai 5, dan nomor kolom valid adalah 0 sampai 3. Statemen If…Else pada baris 25 menentukan apakah intBaris berada di dalam rentang yang tepat. Jika tidak, klausa Else pada baris 34 akan menampilkan pesan error. Jika intBaris berada di dalam rentang yang tepat, statemen If…Then pada baris 26 akan menentukan apakah intKol berada di dalam rentang yang tepat. Jika tidak, klause Else pada baris 29 akan menampilkan pesan error. Sebaliknya, program akan berlanjut ke baris 28. Baris 28 menggunakan intBaris dan intKol sebagai subskript untuk membaca harga kursi terseleksi dari array decHarga, dan kemudian menampilkan nilai itu pada label labelHarga.

Langkah 3: Simpan projek, dan kemudian jalankan aplikasi. Eksperimen dengan memasukkan nomor baris dan nomor kolom yang berbeda, dan bandingkan harga tertampil dengan tabel harga kursi yang diberikan. Gambar 6.27 menunjukkan form aplikasi dengan baris 2 dan kolom 3 terseleksi. Ketika selesai, klik tombol Keluar untuk mengakhiri aplikasi.

Array Tiga Dimensi
Anda dapat menciptakan array sampai dengan 32 dimensi, tetapi adalah sangat jarang untuk memiliki lebih dari 3 dimensi. Berikut adalah sebuah contoh deklarasi atas array tiga-dimensi:

Dim decKursi(9, 11, 14) As Decimal

Array ini dipandang sebagai 10 kursi dengan 12 baris, dengan tiap baris memuat 15 kolom. Array ini dipakai untuk menyimpan harga kursi di sebuah auditorium, dimana di dalamnya ada 15 kursi pada sebuah baris, 12 baris pada suatu seksi, dan 10 seksi di dalam auditorium.

Gambar 6.28 merepresentasikan sebuah array tiga-dimensi sebagai halaman-halaman yang masing-masing memuat array dua-dimensi. Array dengan lebih dari tiga-dimensi sangat susah untuk divisualisasi tetapi berguna pada sejumlah aplikasi pemrograman.

Gambar 6.28 Sebuah array tiga-dimensi


6.5 Fokus Perancangan GUI: Properti Enabled dan Kontrol Timer
KONSEP: Anda dapat menonaktifkan kontrol dengan menetapkan properti Enabled menjadi False. Kontrol Timer dapat Anda pakai untuk mengeksekusi sebuah prosedur dengan interval waktu teratur.

Properti Enabled
Hampir semua kontrol memiliki properti Boolean dengan nama Enabled. Bila properti Enabled dari sebuah kontrol ditetapkan False, kontrol itu dinonaktifkan, yang berarti bahwa ia tidak dapat menerima fokus dan tidak dapat merespon event-event yang dipicu oleh user. Selain itu, banyak kontrol ditampilkan buram ketika properti Enabled ditetapkan False. Sebagai contoh, Gambar 6.29 menunjukkan sebuah form dengan tiga tombol yang properti Enabled-nya ditetapkan False.

Gambar 6.29 Kontrol-kontrol dengan properti Enabled ditetapkan False


Secara default, properti Enabled dari sebuah kontrol ditetapkan True. Jika Anda mengubah properti Enabled dari sebuah kontrol menjadi False pada saat perancangan, kontrol itu awalnya dinonaktifkan ketika aplikasi dijalankan.

Anda dapat mengubah nilai dari properti Enabled dengan kode pada saat aplikasi dijalankan. Sebagai contoh, diasumsikan bahwa sebuah tombol radio dengan nama radBiru diberikan. Statemen berikut menonaktifkan kontrol:

radBiru.Enabled = False

Kadangkala Anda tidak ingin user mengakses kontrl tertentu. Sebagai contoh, dimisalkan terdapat sebuah aplikasi yang menghitung harga dari dua mode berbeda dari sebuah mobil baru. Satu model hanya memiliki warna merah, kuning, dan hitam, sedangkan model lain hanya memiliki warna putih, hijau, dan oranye. Ketika user menyeleksi sebuah model, aplikasi akan menonaktifkan warna-warna yang tidak tersedia untuk model tersebut.

Kontrol Timer
Kontrol Timer dapat Anda pakai untuk secara otomatis mengeksekusi kode pada interval waktu teratur. Ini berguna ketika Anda menginginkan sebuah aplikasi untuk menjalankan suatu operasi pada waktu-waktu tertentu atau setelah sejumlah waktu telah dilewati. Sebagai contoh, sebuah kontrol Timer dapat melakukan animasi sederhana dengan menggerakkan citra grafis melintasi layar, atau kontrol Timer juga dapat menyebabkan sebuah form tersembunyi setelah sejumlah waktu telah dilewati.

Anda mengklik ganda ikon Timer pada jendela Toolbox untuk menempatkan kontrol Timer pada sebuah form. (Kontrol Timer berada di bagian Components pada jendela Toolbox). Karena kontrol Timer tidak terlihat pada saat aplikasi dijalankan, pada saat perancangan ia berada pada component tray. Prefiks yang akan digunakan untuk nama dari kontrol Timer adalah tmr.

Event Timer
Ketika Anda menempatkan kontrol Timer pada sebuah form, ia merespon event Tick ketika aplikasi dijalankan. Event Tick dibangkitkan pada interval waktu teratur. Jika kontrol memiliki sebuah event handler Tick, ia dieksekusi setiap kali event Tick terjadi. Oleh karena itu, kode yang Anda tuliskan di dalam event handler Tick akan dieksekusi pada interval waktu teratur. Untuk menciptakan template kode event handler Tick, Anda mengklik ganda pada sebuah kontrol Timer yang telah ditempatkan pada component tray.

Properti-Properti dari Kontrol Timer
Kontrol Timer memiliki dua properti penting: Enabled dan Interval. Ketika properti Enabled ditetapkan True, kontrol Timer akan merespon event Tick. Ketika properti Enabled ditetapkan False, kontrol Timer tidak merespon event Tick (kode di dalam event handler Tick tidak dieksekusi).

Properti Interval dapat ditetapkan menjadi sebuah nilai 1 atau lebih besar dari 1. Nilai yang disimpan di dalam properti Interval adalah jumlah milidetik yang merupakan interval terjadinya event pewaktu. Satu milidetik adalah seper-seribu detik, jadi penetapan properti Interval menjadi 1000 menyebabkan event pewaktu terjadi setiap detik.


Pada Tutorial 6.7, Anda memeriksa sebuah aplikasi yang mendemonstrasikan sebuah kontrol Timer.

Tutorial 6.7: Demo Timer
Langkah 1: Buka projek Demo Timer. Form aplikasi ditunjukkan pada Gambar 6.30. Perhatikan bahwa kontrol Timer ditampilkan sebagai sebuah stopwatch pada component tray.

Gambar 6.30 Form dari aplikasi Demo Timer

Langkah 2: Jalankan aplikasi. Form ditampilkan pada Gambar 6.31.

Gambar 6.31 Aplikasi Demo Timer saat dijalankan

Langkah 3: Angka yang ditampilkan pada label labelPewaktu awalnya ditetapkan 0, tetapi diinkremen setiap detik. Setelah beberapa detik, klik pada tombol Hentikan Pewaktu untuk menghentikan pewaktu.

Langkah 4: Ketika Anda mengklik tombol Hentikan Pewaktu, teks pada tombol berubah menjadi Mulai Pewaktu. Klik pada tombol itu kembali untuk memulai pewaktu.

Langkah 5: Setelah beberapa detik, klik tombol Keluar untuk mengakhiri aplikasi.

Langkah 6: Dengan jendela Designer terbuka, pilih kontrol Timer.

Langkah 7: Dengan kontrol Timer terseleksi, lihat pada jendela Properties. Nama dari kontrol adalah tmrDetik. Properti Enabled awalnya ditetapkan True, dan properti Interval ditetapkan 1000.

Langkah 8: Buka jendela Code dan perhatikan bahwa sebuah variabel level-kelas yang diberi nama intDetik dideklarasikan.

Langkah 9: Lihat pada event handler tmrDetik_Tick. Kodenya adalah sebagai berikut:

Private Sub tmrDetik_Tick(…) Handles tmrDetik.Tick
    'memperbarui detik yang ditampilkan
    intDetik += 1
    labelPencacah.Text = intDetik.ToString()
End Sub

Setiap kali event handler tmrDetik_Tick dieksekusi, ia menambahkan 1 pada intDetik dan kemudian menyalin nilainya pada label labelPewaktu. Karena properti Interval dari kontrol Timer ditetapkan 1000, event handler ini dieksekusi setiap detik (kecuali jika properti Enabled dari kontrol Timer ditetapkan False).

Langkah 10: Tombol yang menghentikan dan memulai pewaktu diberi nama tombolTogglePewaktu. Lihat event handler tombolTogglePewaktu. Kodenya adalah sebagai berikut:

Private Sub tombolTogglePewaktu_Click(…) Handles tombolTogglePewaktu.Click
    'toggle pewaktu
    If tmrDetik.Enabled = True Then
        tmrDetik.Enabled = False
        tombolTogglePewaktu.Text = "&Mulai Pewaktu"
    Else
        tmrDetik.Enabled = True
        tombolTogglePewaktu.Text = "&Hentikan Pewaktu"
    End If
End Sub

Jika tmrDetik.Enabled bernilai True, kode akan membuatnya False dan mengubah teks pada tombol menjadi &Mulai Pewaktu. Sebaliknya, ia menetapkan True dan mengubah teks pada tombol menjadi &Hentikan Pewaktu.



Pada tutorial 6.8, Anda akan menggunakan sebuah kontrol Timer untuk menciptakan sebuah aplikasi game.

Tutorial 6.8: Menciptakan Game Tangkap Daku
Pada tutorial ini, Anda akan menciptakan sebuah aplikasi game yang menampilkan sebuah tombol. Setiap detik, tombol akan bergerak ke lokasi acak baru pada form aplikasi. User memenangi permainan ketika ia berhasil mengklik tombol.

Ada sejumlah properti tombol dan form yang akan berguna:

  • Form aktif diidentifikasi dengan katakunci Me.
  • Lebar dan tinggi, dalam piksel, pada sebuah form atau kontrol lain, dikendalikan oleh properti Width dan Height.
  • Posisi dari sebuah tombol di dalam form dikendalikan oleh properti Top dan Left. Koordinat piksel vertikal diawali dari 0 di atas form dan bertambah ke arah bawah, seperti ditunjukkan pada Gambar 6.32.

Gambar 6.32 Koordinat-koordinat piksel pada form Visual Basic

Aplikasi game Tangkap Daku memiliki sebuah kontrol Timer dengan properti Interval-nya ditetapkan 1000. Hasilnya, ia akan membangkitkan sebuah event Tick setiap detik. Event handler Tick dari kontrol Timer akan membangkitkan dua angka acak dan menugaskannya kepada properti Top dan Left dari kontrol Button. Hasilnya, kontrol Button akan bergerak ke lokasi acak baru pada form. Event handler Click dari kontrol Button akan menonaktifkan kontrol Timer dan menampilkan pesan yang mengindikasikan bahwa user memenangi permainan.

Langkah 1: Ciptakanlah sebuah project Windows Forms Application baru dengan nama Tangkap Daku. Bangunlah form aplikasi seperti ditunjukkan pada Gambar 6.33. Namai kontrol Button dengan tombolTangkapDaku, dan tempatkan ia di tengah-tengah secara vertikal dan horisontal di dalam form.

Gambar 6.33 Form pada aplikasi Tangkap Daku

Langkah 2: Ciptakan sebuah kontrol Timer dan namai dengan tmrGame. Tetapkan properti Enabled dengan True dan properti Interval dengan 1000.

Langkah 3: Kode untuk aplikasi akan ditampilkan di akhir tutorial ini, dengan nomor baris sebagai referensi. Klik ganda pada kontrol tmrGame yang Anda ciptakan pada Langkah 2. Ini akan membuka jendela Code dan menciptakan sebuah template kode untuk event handler tmrGame_Tick. Sempurnakan event handler ini dengan memasukkan kode yang ditunjukkan pada baris 4 sampai baris 16.

Amati kode lebih dekat:

  • Baris 5 menciptakan sebuah objek Random yang akan dipakai untuk membangkitkan nilai-nilai acak.
  • Baris 8 mendeklarasikan dua variabel: intKiriBaru dan intAtasBaru. Kedua variabel ini akan menampung nilai-nilai acak untuk lokasi baru dari tombol.
  • Baris 11 membangkitkan sebuah integer acak dan menugaskannya kepada intKiriBaru. Perhatikan bahwa argumen yang dilewatkan kepada metode rand.Next adalah ekspresi Me.Width – tombolTangkapDaku.Width. Ini akan memastikan bahwa nilai acak itu bukanlah sebuah nilai yang akan menempatkan kontrol Button di luat batas kanan dari form.
  • Baris 12 membangkitkan sebuah integer acak dan menugaskannya kepada intAtasBaru. Perhatikan bahwa argumen yang dilewatkan kepada metode rand.Next adalah ekspresi Me.Height – tombolTangkapDaku.Height. Ini akan memastikan bahwa nilai acak itu bukanlah sebuah nilai yang akan menempatkan kontrol Button di luat batas bawah dari form.
  • Baris 15 menugaskan intKiriBaru kepada tombolTangkapDaku.Left.
  • Baris 16 menugaskan intAtasBaru kepada tombolTangkapDaku.Top.

Langkah 4: Pada jendela Designer, klik ganda pada kontrol tombolTangkapDaku. Ini akan membuka jendela Code dan menciptakan sebuah template kode untuk event handler tombolTangkapDaku_Click. Sempurnakan event handler ini dengan memasukkan kode yang ditunjukkan pada baris 20 sampai baris 24.

Amati kode lebih dekat:
·         Baris 21 menetapkan properti Enabled dari kontrol Timer dengan False. Ini akan menghentikan Timer dari pembangkitan event Tick.
·         Baris 24 menampilkan kotak pesan yang memberitahu user bahwa ia telah memenangkan permainan.

Langkah 5: Simpan projek dan jalankan aplikasi. Setelah Anda semakin lebih baik dalam permainan ini, Anda dapat membuat tantangan lebih sulit dengan mengubah properti Interval dari kontrol Timer menjadi nilai yang lebih rendah. Ini akan mengurangi interval waktu antara perpindahan tombol.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Class FormTangkapDaku

    Private Sub tmrGame_Tick(…) Handles tmrGame.Tick
        'menciptakan sebuah objek Random
        Dim rand As New Random

        'variabel-variabel untuk memuat koordinat XY
        Dim intKiriBaru, intAtasBaru As Integer

        'membaca koordinat XY acak
        intKiriBaru = rand.Next(Me.Width - tombolTangkapDaku.Width)
        intAtasBaru = rand.Next(Me.Height - tombolTangkapDaku.Height)

        'menggeser tombol ke lokasi baru
        tombolTangkapDaku.Left = intKiriBaru
        tombolTangkapDaku.Top = intAtasBaru
    End Sub

    Private Sub tombolTangkapDaku_Click(…) Handles tombolTangkapDaku.Click
        'menonaktifkan timer
        tmrGame.Enabled = False

        'menampilkan pesa
        MessageBox.Show("Anda menang!")
    End Sub
End Class


6.6 Fokus Perancangan GUI: Properti Anchor dan Dock
KONSEP: Kontrol memiliki dua properti: Anchor dan Dock, yang dapat dipakai untuk mengendalikan posisi kontrol pada form ketika form diubah ukurannya saat aplikasi dijalankan.

Properti Anchor
Secara default, ketika user mengubah ukuran form saat aplikasi dijalankan, posisi dari kontrol pada form tidak berubah terhadap tepi atas dan tepi kiri dari form. Sebagai contoh, pada Gambar 6.34, citra di sisi kiri menunjukkan form sebelum user mengubah ukurannya dan citra di sisi kanan menunjukkan form setelah user mengubah ukurannya.

Ketika user mengubah ukuran form, posisi dari kotak list dan tombol tidak berubah. Kontrol memiliki properti Anchor, yang dapat Anda pakai untuk mengendalikan satu atau lebih tepi dari sebuah form. Ketika sebuah kontrol dilekatkan ke tepi form, jarak antara tepi kontrol dan tepi form tetap konstan ketika form diubah ukurannya saat aplikasi dijalankan.

Gambar 6.34 Sebuah form sebelum dan sesudah user mengubah ukurannya

Ketika Anda mengklik properti Anchor pada jendela Properties, jendela popup akan ditampilkan seperti ditunjukkan pada Gambar 6.35. Perhatikan bahwa batang atas dan batang kiri diseleksi, yang mengindikasikan bahwa kontrol dilekatkan ke tepi atas dan tepi kiri dari form. Ini adalah pengaturan default dari properti Anchor.

Gambar 6.35 Properti Anchor yang ditetapkan menjadi tepi bawah dan tepi kanan

Gambar 6.36 Properti Anchor ditetapkan melekat ke tepi bawah dan tepi kanan dari form


Untuk mengubah pengaturan properti Anchor, Anda memilih batang-batang yang berkaitan dengan tepi-tepi form yang ingin Anda lekatkan dengan kontrol. Sebagai contoh, Gambar 6.36 menunjukkan bagaimana properti Anchor ditampilkan ketika kontrol dilekatkan dengan tepi bawah dan tepi kanan dari form.

Gambar 6.37 menunjukkan sebuah form sebelum dan sesudah ia diubah ukurannya. Kali ini, kontrol-kontrol Button dilekatkan ke tepi bawah dan tepi kanan dari form dan kotak list dilekatkan ke tepi atas dan tepi kiri dari form.

Gambar 6.37 Kontrol-kontrol Button dilekatkan ke tepi bawah dan tepi kanan dari form


Adalah dimungkinkan untuk melekatkan sebuah kontrol ke sisi-sisi yang berlawanan, seperti atas dan bawah, atau kiri dan kanan. Pendekatan ini menyebabkan kontrol berubah ukuran ketika form diubah ukurannya. Sebagai contoh, lihat pada Gambar 6.38. Kontrol PictureBox dilekatkan ke empat sisi dari form, dan properti SizeMode ditetapkan StretchImage. Ketika form diubah ukurannya, kontrol PictureBox juga berubah ukuran.

Gambar 6.38 Kontrol PictureBox dilekatkan ke empat sisi dari form

Properti Dock
Ketika sebuah kontrol didock, ia diposisikan secara langsung ke salah satu tepi dari sebuah form. Selain itu, panjang atau lebar dari sebuah kontrol yang didock diubah untuk menyesuaikan lebar atau panjang dari tepi form. Sebagai contoh, form pada Gambar 6.39 memiliki empat tombol yang didock. Sebuah tombol didock ke setiap tepi dari form.

Tombol-tombol secara otomatis berubah ukuran untuk memenuhi tepi-tepi. Gunakan properti Dock untuk mendock sebuah kontrol ke tepi form. Pada jendela Properties, jendela popup ditampilkan pada Gambar 6.40. Hal itu mengilustrasikan bagaimana setiap tombol pada jendela popup memengaruhi kontrol. Tombol persegi di tengah menyebabkan kontrol mengisi keseluruhan form.

Gambar 6.39 Form dengan empat tombol didock

Gambar 6.40 Properti Dock diseleksi


6.7 Fokus Penyelesaian Permasalahan: Membangun Aplikasi Pusat Kepemimpinan Tarabunga

KONSEP: Pada bagian ini, Anda membangun sebuah aplikasi yang menggunakan data yang disimpan di dalam array-array paralel.

Pusat Kepemimpinan Tarabunga (PKT) mempublikasikan buku, video, dan CD yang tercantum pada Tabel 6.1.

Tabel 6.1 Produk-Produk Pusat Kepemimpinan Tarabunga (PKT)
Judul Produk
Deskripsi Produk
Nomor Produk
Harga
Enam Langkah Kepemimpinan
Buku
914
Rp. 12.950
Enam Langkah Kepemimpinan
CD
915
Rp. 14.950
Jalan Kesuksesan
Video
916
Rp. 18.950
Tujuh Pelajaran Keberhasilan
Buku
917
Rp. 16.950
Tujuh Pelajaran Keberhasilan
CD
918
Rp. 21.950


Dimisalkan bahwa wakil manajer penjualan meminta Anda untuk menuliskan sebuah program pelaporan penjualan yang melakukan berikut:
·         Meminta user untuk berapa unit terjual dari tiap produk.
·         Menampilkan laporan penjualan yang menunjukkan data penjualan detil untuk setiap produk dan pendapatan total dari semua produk yang terjual.

Form Aplikasi
Gambar 6.41 menunjukkan form aplikasi. Tabel 6.2 mencantumkan setiap kontrol pada form (tidak termasuk kontrol-kontrol pada menu) berikut dengan pengaturan properti terkait.

Gambar 6.41 Sketsa dari form aplikasi

Tabel 6.2 Kontrol-kontrol dan pengaturan properti
Tipe Kontrol
Nama Kontrol
Properti
Nilai Properti
Form
Form1
Text:
Pusat Kepemimpinan Tarabunga
GroupBox
(Default)
Text:
Data Penjualan
Label
(Default)
Text:
Pendapatan Total
Label
labelPendapatanTotal
Text:
AutoSize
BorderStyle:

False
Fixed3D
ListBox
listDataPenjualan
AutoSize
False
MenuStrip
(Default)

Lihat Tabel 8.3

Gambar 6.42 menunjukkan sketsa dari sistem menu pada form aplikasi.

Gambar 6.42 Sistem menu pada form aplikasi


Tabel 6.3 mencantumkan nama-nama objek item menu, teks, dan kunci shortcut

Tabel 6.3 Nama-nama item menu, properti teks, dan kunci shortcut
Nama Item Menu
Properti Text
Kunci Shortcut
mnuFile
&File

mnuFileKeluar
&Keluar
Ctrl + K
mnuLaporan
&Laporan

mnuLaporanMasukkan
&Masukkan Data Penjualan
Ctrl + M
mnuLaporanTampilkan
&Tampilkan Laporan Penjualan
Ctrl + T
mnuHelp
&Help

mnuHelpTentang
&Tentang


Tabel 6.4 Menjelaskan deklarasi-deklarasi level-kelas form

Tabel 6.4 Deklarasi-deklarasi level-kelas
Nama
Penjelasan
intSUBSKRIPT_MAKS
Sebuah konstanta, ditetapkan 8, untuk memuat subskript atas dari array level-kelas, dan batas atas dari pencacah yang dipakai di dalam loop yang memproses informasi di dalam array.
strNamaProd
Sebuah array string; array ini memuat nama tiap produk PKT.
strPenjelasan
Sebuah array string; array ini memuat penjelasan tiap produk PKT.
intNomorProd
Sebuah array integer; array ini memuat nomor-nomor produk PKT.
decHarga
Sebuah array Decimal; array ini memuat harga tiap produk PKT.
intUnitTerjual
Sebuah array integer; array ini memuat jumlah unit terjual dari tiap produk PKT.

Lima array adalah array-array paralel, yang berarti bahwa subskript yang sama dapat dipakai untuk mengakses data yang berkaitan dengan item yang sama. Tabel 6.5 mencantumkan dan menjelaskan metode-metode di dalam file form.

Tabel 6.5 Metode-Metode
Nama
Penjelasan
AwalArray
Prosedur; menugaskan nama, penjelasan, nomor produk, dan harga unit dari tiap produk PKT kepada array-array level-kelas.
mnuFileKeluar_Click
Mengakhiri aplikasi.
mnuLaporanMasukkan_Click
Meminta user memasukkan data penjualan.
mnuLaporanTampilkan_Click
Menghitung dan menampilkan pendapatan untuk tiap produk dan pendapatan total.
mnuHelpTentang_Click
Menampilkan kotak Tentang.
Form1_Load
Memanggil prosedur AwalArray.



Tutorial 6.9: Membangun Aplikasi Pelaporan Penjualan Pusat Kepemimpinan Tarabunga
Langkah 1: Ciptakanlah sebuah projek Windows Forms Application baru dengan nama Penjualan Tarabunga.

Langkah 2: Bangunlah form seperti ditunjukkan pada Gambar 6.43.

Dengan mengacu pada Tabel 6.2 untuk nama-nama kontrol dan pengaturan propertinya, mengacu pada Gambar 6.41 untuk lokasi dari tiap kontrol, mengacu pada Gambar 6.42 untuk tata letak menu, dan mengacu pada Tabel 6.3 untuk properti dari tiap item menu, Anda dapat memahami aplikasi ini.

Gambar 6.43 Form utama pada aplikasi

Langkah 3: Berikut adalah kode untuk aplikasi. Gunakan sebagai referensi untuk menyempurnakan aplikasi. (Jangan ketikkan baris nomor, karena hanya ditujukan sebagai referensi).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Public Class Form1
    'aplikasi ini menampilkan sebuah laporan penjualan untuk
    'pusat kepemimpinan Tarabung

    ' Class-level declarations
    Const intSUBSKRIPT_MAKS As Integer = 4              'subskript atas
    Dim strNamaProduk(intSUBSKRIPT_MAKS) As String      'nama produk
    Dim strPenjelasan(intSUBSKRIPT_MAKS) As String      'penjelasan
    Dim intNomorProd(intSUBSKRIPT_MAKS) As Integer      'nomor produk
    Dim decHarga(intSUBSKRIPT_MAKS) As Decimal          'harga per unit
    Dim intUnitTerjual(intSUBSKRIPT_MAKS) As Integer    'banyak unit terjual

    Private Sub Form1_Load(…) Handles MyBase.Load
        'menginisialisasi array dengan data produk
        AwalArray()
    End Sub

    Private Sub AwalArray()
        'menginisialisasi array
        'produk pertama
        strNamaProduk(0) = "Enam Langkah Kepemimpinan"
        strPenjelasan(0) = "Buku"
        intNomorProd(0) = 914
        decHarga(0) = 12950D

        'produk kedua
        strNamaProduk(1) = "Enam Langkah Kepemimpinan"
        strPenjelasan(1) = "CD"
        intNomorProd(1) = 915
        decHarga(1) = 14950D

        'produk ketiga
        strNamaProduk(2) = "Jalan Kesuksesan"
        strPenjelasan(2) = "Video"
        intNomorProd(2) = 916
        decHarga(2) = 18950D

        'produk keempat
        strNamaProduk(3) = "Tujuh Pelajaran Keberhasilan"
        strPenjelasan(3) = "Buku"
        intNomorProd(3) = 917
        decHarga(3) = 16950D

        'produk kelima
        strNamaProduk(4) = "Tujuh Pelajaran Keberhasilan"
        strPenjelasan(4) = "CD"
        intNomorProd(4) = 918
        decHarga(4) = 21950D
    End Sub

    Private Sub mnuFileKeluar_Click(…) Handles mnuFileKeluar.Click
        'menutup form
        Me.Close()
    End Sub

    Private Sub mnuLaporanMasukkan_Click(…) Handles mnuLaporanMasukkan.Click
        Dim intHitung As Integer = 0    'pencacah loop

        Do While intHitung <= intSUBSKRIPT_MAKS
            Try
                'membaca banyak unit terjual untuk sebuah produk
                intUnitTerjual(intHitung) = CInt(
                 InputBox("Masukkan banyak unit terjual dari nomor produk " &
                 intNomorProd(intHitung)))

                'menginkremen intHitung
                intHitung += 1
            Catch
                'pesan error untuk masukan tak valid
                MessageBox.Show("Masukkan integer.")
            End Try
        Loop
    End Sub

    Private Sub mnuLaporanTampilkan_Click(…) Handles mnuLaporanTampilkan.Click
        'menghitung dan menampilkan pendapatan untuk tiap
        'produk dan pendapatan total
        Dim intHitung As Integer
        Dim decPendapatan As Decimal
        Dim decPendapatanTotal As Decimal

        'menampilkan header laporan penjualan
        listDataPenjualan.Items.Add("LAPORAN PENJUALAN")
        listDataPenjualan.Items.Add("-------------------------")

        'menampilkan data penjualan untuk tiap produk
        For intHitung = 0 To intSUBSKRIPT_MAKS

            'menghitung pendapatan produk
            decPendapatan = intUnitTerjual(intHitung) * decHarga(intHitung)

            'menampilkan data produk
            listDataPenjualan.Items.Add("Nomor Produk: " &
            intNomorProd(intHitung))
            listDataPenjualan.Items.Add("Nama: " &
            strNamaProduk(intHitung))
            listDataPenjualan.Items.Add("Deskripsi: " &
            strPenjelasan(intHitung))
            listDataPenjualan.Items.Add("Harga Per Unit: " &
            "Rp. " & decHarga(intHitung).ToString())
            listDataPenjualan.Items.Add("Banyak Unit Terjual: " &
            "Rp. " & intUnitTerjual(intHitung).ToString())
            listDataPenjualan.Items.Add("Pendapatan Produk: " &
            "Rp. " & decPendapatan.ToString())
            listDataPenjualan.Items.Add("")

            'mengakumulasi pendapatan
            decPendapatanTotal = decPendapatanTotal + decPendapatan
        Next

        'menampilkan pendapatan total
        labelPendapatanTotal.Text = "Rp. " & decPendapatanTotal.ToString()
    End Sub

    Private Sub mnuHelpTentang_Click(…) Handles mnuHelpTentang.Click
        'menampilkan kotak tentang
        MessageBox.Show("Menampilkan laporan penjualan untuk PKT.", "Tentang")
    End Sub
End Class

Gambar 6.44 Laporan penjualan ditampilkan


Langkah 4: Simpan projek.

Langkah 5: Jalankan aplikasi. Pada form aplikasi, klik menu Laporan, dan kemudian klik Masukkan Data Penjualan. Anda akan diminta unttuk memasukkan berapa banyak unit per produk yang terjual pada kotak masukan. Masukan nilai-nilai berikut:

Nomor produk 914: 140
Nomor produk 915: 85
Nomor produk 916: 129
Nomor produk 917: 67
Nomor produk 918: 94

Langkah 6: Klik menu Laporan, dan kemudian klik Tampilkan Laporan Penjualan. Form akan sekarang akan ditampilkan seperti ditunjukkan pada Gambar 6.44.

Langkah 7: Keluar dari aplikasi.



6.8 Menggunakan List Untuk Menampung Informasi
Pada Visual Basic, Anda dapat menggunakan tipe data List untuk menampung sejumlah item. Pada banyak cara, sebuah List memiliki banyak keuntungan daripada array. Pertama, sebuah list dapat berkembang secara dinamis ketika Anda menambahkan objek-objek ke dalamnya. Anda tidak perlu membatasi ukurannya, seperti yang Anda lakukan pada array. Kedua, sangat mudah untuk menghapus sebuah item dari sebuah list, tetapi sangat sulit untuk melakukannya pada array. Ketiga, list memiliki fungsi pencarian built-in, sedangkan array tidak memilikinya. Kontrol ListBox, seperti diintroduksi pada Bagian 5.2, memiliki properti Items yang memuat sebuah List. Oleh karena itu, Anda telah familiar dengan sejumlah operasi pada list, seperti Add, Remove, dan Clear. Sekarang, Anda bisa menciptakan objek-objek List sendiri dan memanggil metode-metode yang sama seperti yang Anda lakukan pada kontrol ListBox.

Ketika Anda mendeklarasikan sebuah List, Anda perlu menetapkan tipe data yang akan disimpan di dalam list. Sebagai contoh, berikut adalah bagaimana Anda mendeklarasikan sebuah list yang memuat string-string:

Dim listNama As List(Of String)

Ketika Anda menciptakan sebuah objek dalam Visual Basic, Anda harus menggunakan katakunci New. List adalah objek, jadi Anda perlu menggunakan katakunci New sebagai suatu cara untuk memberitahu Visual Basic bahwa Anda ingin menciptakan sebuah objek List yang baru. Berikut adalah contohny:

listNama = New List(Of String)

Seringkali, Anda lebih memilih untuk mendeklarasikan variabel List dan menciptakan sebuah objek List pada saat yang sama. Yang perlu Anda lakukan adalah menyisipkan katakunci New ke dalam deklarasi variabel:

Dim listNama As New List(Of String)

Berikut adalah cara bagaimana Anda mendeklarasikan dan menciptakan sebuah List yang memuat sejumlah Integer:

Dim listSkor As New List(Of Integer)

Berikut adalah cara bagaimana Anda mendeklarasikan dan menciptakan sebuah List yang memuat sejumlah Double:

Dim listSuhu As New List(Of Double)



Memilih Nama Pengenal
Ketika menamai variabel List, Anda bisa memberikan prefiks pada nama variabel tersebut:

Dim listStrNama As List(Of String)
Dim listIntSkor As List(Of Integer)

Prefiks list juga digunakan untuk kontrol ListBox. Cara alternatif, Anda dapat menggunakan sebuah prefiks yang mengindikasikan tipe data dari item-item yang akan disimpan di dalam list (seperti int untuk Integer, dbl untuk Double, dan seterusnya). Berikut adalah sejumlah contohnya:

Dim strNama As List(Of String)
Dim intSkor As List(Of Integer)

Operasi-Operasi List
Anda bisa memanggil metode Add untuk menambahkan sebuah item ke dalam sebuah list. Sebagai contoh,

Dim listNama As New List(Of String)
listNama.Add("Kristof")
listNama.Add("John")
dan seterusnya ...

Untuk menghapus sebuah item, Anda memanggil metode Remove dan melewatkan objek yang ingin dihapus:

listNama.Remove("John")

Untuk menghapus semua item, Anda memanggil metode Clear:

listNama.Clear()

Untuk mendapatkan ukuran dari sebuah List, Anda memanggil metode Count:

Dim intHitung As Integer
intHitung = listNama.Count()

Anda dapat menggunakan sebuah indeks untuk mengakses sembarang item list yang ada. Nilai indeks terendah adalah 0. Diasumsikan bahwa sebuah list memuat “Kristof” dan “John”. Statemen-statemen berikut menugaskan setiap nam kepada sebuah label Kontrol:

labelHasil.Text = listNama(0)     menghasilkan: Kristof
labelHasil.Text = listNama (1)    menghasilkan: John

Sama halnya, Anda dapat mengganti sebuah item list berikut:

listNama(0) = “Jono”

Pada tutorial berikut, Anda akan membangun sebuah list berdasarkan nama-nama yang dimasukkan oleh user.


Tutorial 6.10: Membangun Sebuah List Dari Masukan User
Pada tutorial ini, Anda akan menulis ulang aplikasi dari Tutorial 6.2 dimana user memasukkan dan menyimpan nama-nama teman. Pada versi baru ini, nama-nama akan disimpan di dalam sebuah List(Of String). Setelah memasukkan nama-nama, user dapat mengklik sebuah tombol dan menampilkan semua nama di dalam sebuah kotak list.

Langkah 1: Ciptakanlah sebuah Windows Forms Application dengan nama Daftar Teman 2. Tempatkan sebuah kontrol Label, ListBox, TextBox, dan dua kontrol Button pada form. Gunakan Gambar 6.45 sebagai panduan ketika menamai kontrol-kontrol.

Gambar 6.45 Kontrol-kontrol pada aplikasi Daftar Teman


Langkah 2: Buka jendela Code dan di dalam kelas form tuliskan deklarasi variabel level-kelas yang ditunjukkan dengan huruf tebal berikut:

Public Class Form1
    Private listNama As New List(Of String)
End Class

Langkah 3: Ciptakanlah event handler Click berikut untuk tombol Tambahkan:

Private Sub tombolTambah_Click(…) Handles tombolTambah.Click
    'menambahkan nama ke List
    listNama.Add(teksNama.Text)

    'membersihkan kotak teks
    teksNama.Clear()
    teksNama.Focus()
End Sub

Statemen listNama.Add menambahkan isi dari kotak teks pada list string. Kotak teks dibersihkan untuk mencegah user dari secara tak sengaja mengklik tombol dua kali dan menambahkan nama yang sama. Metode Focus dipanggil sehingga user dapat mengetikkan nama baru ke dalam kotak teks.

Langkah 5: Selanjutnya, Anda akan menciptakan sebuah event handler Click untuk tombol Tampilkan Semua yang menyalin isi dari listNama pada kotak list dengan nama listTeman.

Private Sub tombolTampil_Click(..) Handles tombolTampil.Click
    'menampilkan semua nama pada kotak list
    Dim strNama As String

    listTeman.Items.Clear()
    For Each strNama In listNama
        listTeman.Items.Add(strNama) 'menambahkan pada kotak list
    Next
End Sub

Kotak list dibersihkan, dan kemudian sebuah loop For Each mengambil setiap nama dari listTeman dan menambahkannya pada kontrol ListBox.

Langkah 6: Jalankan dan uji aplikasi dengan memasukkan beberapa nama ke dalam kotak teks dan klik tombol Tambahkan setelah setiap nama dimasukkan.

Langkah 7: Klik pada tombol Tampilkan Semua. Anda akan melihat semua nama yang Anda masukkan. Lihat Gambar 6.46.

Gambar 6.46 Semua nama teman yang dimasukkan ditampilkan pada ListBox


Mengakses Sebuah List dengan Subskript
Tutorial 6.10 menggunakan loop For-Each untuk memproses semua elemen di dalam sebuah list. Ini sangat mudah dilakukan, tetapi kadangkala Anda ingin menggunakan pencacah loop untuk melakukan hal yang sama. Anda bisa mengambil kode dari tutorial dan menunjukkan bagaimana bila digunakan sebuah pencacah loop:

Dim intIndeks As Integer = 0
Dim strNama As String

For intIndeks = 0 To listNama.Count - 1
    strNama = listNama(intIndeks)
    listTeman.Items.Add(strNama)
Next

Hasilnya ditampilkan pada Gambar 6.47 berikut.

Gambar 6.47 Semua nama teman yang dimasukkan ditampilkan pada ListBox


Melakukan Pencarian Item Di Dalam Sebuah List
Cara mudah untuk melakukan pencarian item di dalam sebuah List adalah dengan menggunakan metode indexOf. Metode ini menerima sebuah nilai sebagai argumennya, dan ia melakukan pencarian nilai tersebut di dalam List. Jika nilai ditemukan, metode menghasilkan indeksnya. Jika nilai itu tidak ditemukan, metode ini menghasilkan -1. Kode berikut menunjukkan contohnya:

Public Class Form1
    Private listNama As New List(Of String)

    Private Sub tombolTambah_Click(…) Handles tombolTambah.Click
        'menambahkan nama ke List
        listNama.Add(teksNama.Text)

        'membersihkan kotak teks
        teksNama.Clear()
        teksNama.Focus()
    End Sub

    Private Sub tombolTampil_Click(…) Handles tombolTampil.Click
        'menampilkan semua nama pada kotak list
        Dim intIndeks As Integer = 0
        Dim strNama As String

        For intIndeks = 0 To listNama.Count - 1
            strNama = listNama(intIndeks)
            listTeman.Items.Add(strNama)
        Next
    End Sub

    Private Sub tombolCari_Click(…) Handles tombolCari.Click
        Dim intPosisi As Integer = listNama.IndexOf(teksCari.Text)

        'Apakah ditemukan di dalam List?
        If intPosisi <> -1 Then
            listTeman.SelectedItem = listTeman.Items(intPosisi)
            MessageBox.Show("Teman yang Anda cari ditemukan pada indeks " &
            intPosisi)
        Else
            MessageBox.Show("Teman yang Anda cari tidak ditemukan.")
        End If
    End Sub
End Class

Keluaran program ini ditampilkan pada Gambar 6.48.

Gambar 6.48 Metode pencarian item pada sebuah List







No comments:

Post a Comment