Kamis, 29 Januari 2015

Penggunaan Fungsi Array Dalam Java

Melanjutkan posting sebelumnya yaitu tentang Penggunaan Fungsi String pada Java, dan sekarang kita akan membahas tentang Fungsi Array dalam Java

Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.

Contoh Penggunaannya sebagai berikut :

Penggunaan Array Dalam Java – digunakan untuk menampung beberapa tipe data yang sama dalam sebuah nama variable yang mempunyai indeks. Dalam java array merupakan object yang berisi tipe data primitif atau class. Contoh pendeklarasian array dalam java. Array biasanya berupa kurung siku “[]” dan isi data dari array menggunakan kurung kurawal”{}”. Contoh pendelarasian array di java.

TipeData [] VariableArray = new TipeData[Length];
TipeData [] VariableArray = new TipeData[Length1][length2];

VARIABEL ARRAY
nama_variabel[indeks]

ketentuan nama variabel array sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .

DEKLARASI VARIABEL ARRAY

BU : tipe nama_variabel[indeks];

Contoh : float bil[10];
deklarasi variabel array dengan nama bil yang akan menampung 10 data yang bertipe float. Indeks 10 menunjukkan variabel bil terdiri dari 10 elemen, dimana setiap elemen akan menampung sebuah data.

Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
float bil[11]

Array dibagi dua ada array satu dimensi (satu array) dan array multi dimensi (array lebih dari satu).


INISIALISASI ARRAY 1 DIMENSI
Inisialisasi dapat dilakukan bersama dengan deklarasi atau tersendiri. Inisialisasi suatu array adalah dengan meletakkan elemen array di antara tanda kurung kurawal {}, antara elemen yang satu dengan lainnya dipisahkan koma.
int bil[2] = {4,1,8}

bil[0] = 4
bil[1] = 1
bil[2] = 8

Lihat contoh program array satu dimensi dalam java di NetBeans, JCreator ataupun yang lainnya seperti dibawah ini.



Keterangan: Ingat untuk array dimulai dari indeks ke-0.

Jika sudah maka jalankan program tersebut dengan menekan tombol CTRL+F5 dan lihat hasilnya dibawah.

AUTOMATIC ARRAY
adalah Inisialisasi array dilakukan di dalam fungsi tertentu. Hanya compiler C yang berstandar ANSI C yang dapat menginisialisasikan automatic array.
Cara menginisialisasikan array dari compiler yg tidak mengikuti standar ANSI C:
1. Diinisialisasikan di luar fungsi sebagai variabel GLOBAL/EXTERNAL ARRAY.
int bil[2]={0,0,0};
main()

2. Diinisialisasikan didlm fungsi sebagai variabel LOKAL/STATIC ARRAY.
main()
{
static int bil[2]={0,0,0};
.........

Pada automatic array yang tidak diinisialisasikan , elemen array akan memiliki nilai yang tidak beraturan. Bila global & static array tidak diinisialisasi maka semua elemen array secara otomatis akan diberi nilai nol(0).

Contoh :
main()
{
int y;
int hitung=0;
int x[0];
for(y=0;y<5 p="" y="">{
hitung+=y;
x[y]=hitung;
printf("%3d - %3d\n",y,x[y]);
}
}

OUTPUT:
0- 0
1- 1
2- 3
3- 6
4- 10


MENDEFINISIKAN JUMLAH ELEMEN ARRAY DALAM VARIABEL
Besarnya variabel indeks dapat ditentukan dengan menggunakan
preprocessor directives #define
#define N 40
main()
{
int no[N],gaji[N],gol[N],status[N],juman[N];

Bila besar indeks akan diubah menjadi 50, cukup diganti dengan
#define N 50



ARRAY MULTI DIMENSI
nama_variabel [indeks1][indeks2]

indeks1 : jumlah/nomor baris
indeks2 : jumlah/nomor kolom
Jumlah elemen yang dimiliki array multi dimensi dapat ditentukan dari hasil perkalian indeks1 * indeks2

misal : array A[2][3] akan memiliki 2*3 = 6 elemen.

main()
{
float bil [5] [5]
.......

dapat dituliskan dengan #define
#define N 5
main()
{
float bil [N] [N]

INISIALISASI ARRAY MULTI DIMENSI
main()
{
float bil[2] [3] =
{ { 1,2,3}, /*baris 0*/
{ 4,5,6}, /*baris 1*/
}

elemen bil [0] [0] = 1
elemen bil [0] [1] = 2
elemen bil [0] [2] = 3
elemen bil [1] [0] = 4
elemen bil [1] [1] = 5
elemen bil [1] [2] = 6

Contoh :
main()
{
int x[3][5];
int y,z;
int hitung=0;
for(y=0;y<3 p="" y="">

{
printf("y = %d\n",y);
for(z=0;z<5 p="" z="">{
hitung+=z;
x[y][z] = hitung;
printf("%/t%3d - %3d\n",z,x[y][z]);
}
}
}

OUTPUT:
y = 0
0- 0
1- 1
2- 2
3- 6
4- 10
y = 1
0- 10
1- 11
2- 13
3- 16
4- 20
y = 2
0- 20
1- 21
2- 23
3- 26
4- 30

Contoh lain array multi dimensi dibawah ini :


Keterangan : ini_array[0][0] “array pertama (0) dari indeks array pertama (0)” + ini_array[1][0] “array kedua (1) dari indeks pertama (0)”. Begitupun untuk yang kedua. Ingat array dimulai dari indeks pertama atau (0).

Jika sudah kita tinggal jalankan program diatas dan lihat hasilnya.



Penggunaan Fungsi String

Length()

//nama file Length1.java
public class Length1
{
public static void main(String args[])
{
String a = new String("Bahasa Java");
int panjang;

panjang = a.length();
System.out.println("Panjang String \""+a+"\" adalah “
+panjang);
}
}

Hasilnya :


Catatan :
Fungsi atau metode length() dipakai untuk menghitung panjang dari string.
Return value (nilai kembalian) dari fungsi length() ini adalah integer.

Contoh Penggunaan fungsi charAt(int x)

//nama file : CharAt1.java
public class CharAt1 
{
    public static void main(String args[]) 
{
        String a = "Java";
//bisa diganti dengan
//String a = new String(“Java”);

    for (int i=0; i < a.length(); i++)
      System.out.println("Karakter " + i + 
" adalah " + a.charAt(i));
  }
}

Hasilnya :

Catatan :
Fungsi atau metode charAt(int x) dipakai untuk mendapatkan karakter pada posisi x dari suatu string.
Posisi awal suatu string adalah 0, sama seperti index awal pada suatu array.
Sehingga pada contoh di atas, huruf J (dari Java) berada pada posisi 0.


Contoh Penggunaan Metode concat(String str)

//Nama file Concat1.java

public class Concat1 
{
public static void main(String args[]) 
{
        String a = "Java ";
        String b = "Programming";
    
      System.out.println("Penggabungan \"" + a + 
"\" dan \"" + b+"\" adalah "+a.concat(b));
  }
}

Hasilnya :

Catatan :
Fungsi atau metode concat(String x) dipakai untuk menggabungkan string x dengan suatu string.
Contoh : “to”.concat(“get”).concat(“her”) akan menghasilkan “together”.

Contoh Penggunaan Metode replace(x, y)

//Nama file : Replace1.java
public class Replace1
{
public static void main(String args[])
{
String a = "ada apa ya?";
System.out.println("Kalimat awal adalah : "+a);
System.out.println("Setelah huruf a diganti huruf o");
System.out.println("-------------------------------");
System.out.println(a.replace("a","o"));
}
}

Hasilnya :


Catatan :
Fungsi atau metode replace(char lama, char baru) dipakai untuk mengubah huruf lama menjadi huruf baru.
Contoh : replace(“a”,”i”) akan mengubah huruf a menjadi i.
Replace(“ri”,”ya99”) akan mengubah kumpulan huruf ri menjadi ya99.


Contoh Penggunaan Metode substring(awal, akhir)

//Nama file Substring1.java
public class Substring1
{
public static void main(String args[])
{
String b;
String a = "Bahasa Pemrograman 2";
b = a.substring(1,5);
System.out.println("String a adalah : "+a);
System.out.println("Substring(1,5) dari a adalah");
System.out.println("----------------------------");
System.out.println(b);
}
}

Hasilnya :


Catatan :
Fungsi atau metode substring(int awal, int akhir) dipakai untuk mengambil sejumlah string dari posisi ‘awal’ sampai ‘akhir’.
Tapi ‘akhir’ adalah akhir-1.
Contoh: “Bahasa”.substring(1,5) akan mengambil string dari posisi 1 sebanyak 5-1. Hasilnya “ahas”
Contoh: “Programming”.substring(3,6) akan menghasilkan “gra”.
Posisi awal suatu string adalah 0.


Contoh Penggunaan Metode indexOf

Syntax: object.indexOf(searchValue[,index]);

kita dapat menggunakan fungsi indexOf () untuk memeriksa apakah string atau karakter ada dalam string utama. kita dapat menggunakan hanya dengan parameter string saja. Dalam hal ini metode indexOf mengembalikan posisi di mana string ditemukan di dalam string utama. Jika tidak ada sub-string tersebut kemudian kembali dengan -1. Selain itu kita juga dapat menggunakan fungsi dengan 2 parameter. Dalam hal ini yang pertama adalah string seperti sebelumnya dan yang kedua adalah index yang memberitahu fungsi harus darimana memulai melakukan pencarian.

1 var str  = 'Hello World';
2 var pos  = str.indexOf('Wo');
3 var pos2 = str.indexOf('Te',10);






Kamis, 15 Januari 2015

Macam macam Sorting pada Java (Radix Sort, Exchange Sort, Pigeonhole Sort)


Sorting



Salah satu bagian penting dari struktur data adalah proses pengurutan data-data  itu sendiri. Data akan terkadang akan berada dalam bentuk yang tidak berpola ataupun dengan pola tertentu yang tidak kita inginkan, namun dalam penggunaanya, kita akan selalu ingin menggunakan data-data tersebut dalam bentuk yang rapi atau berpola sesuai dengan yang kita inginkan. Maka dari itu proses sorting adalah proses yang sangat penting dalam struktur data, terlebih untuk pengurutan data yang bertipe numerik ataupun karakter.


Sorting adalah proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola tertentu ataupun secara acak, sehingga menjadi tersusun secara teratur menurut aturan tertentu.


Pada umumnya ada 2 macam pengurutan, yaitu:

  • Pengurutan secara ascending (urut naik).
  • Pengurutan secara descending (urut turun).

Contoh Contoh : Data  :  Array [1..6] of Byte = (22, 10, 15, 3, 8, 2); 

Data Acak : 22 10 15 3 8 2 
Terurut Ascending : 2 3 8 10 15 22 
Terurut Descending : 22 15 10 8 3 2

Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara/metode.


Disini saya akan menjelaskan tentang Radix Sort, Exchange Sort, dan Pigeonhole Sort.

Radix sort

Ide dasar dari metode Radix sort ini adalah
mengkategorikan data-data menjadi sub kumpulan
subkumpulan data sesuai dengan nilai radix-nya,
mengkonkatenasinya, kemudian
mengkategorikannya kembali berdasar nilai radix

            contoh: 






Exchange Sort

Sekarang kita akan mempelajari tentang metode pengurutan exchange sort. Metode pengurutan excahange sort mirip dengan metode pengurutan Buble Sort *bisa di katakan bersaudara hehehe. Tapi dalam cara membandingan antar elemennya memiliki tentu memiliki perbedaan.


Exchange sort membandingkan suatu elemen dengan elemen-elemen lainnya dalam array tersebut, dan melakukan pertukaran elemen jika perlu. Jadi ada elemen yang selalu menjadi elemen pusat (pivot).



Sedangkan Bubble sort akan membandingkan elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya, kemudian elemen tersebut itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya



cara pengurutan exchange sort








Prosedur Exchange Sort

void exchange_sort(int data[])
{
for(int i=0;i{
for(int j=i+1;j{
if(data[i]tukar(&data[i],&data[j]);
}
}
}


Pigeonhole Sort


Semua contoh saat ini tampaknya mengimplementasi menghitung, mengurutkan. Dan Pigeonhole Sort, ketika menyortir data yang kompleks dengan struktur sebuah kunci, terus melacak dari semua elemen pada kunci tertentu (karena unsur-unsur yang sama masih berbeda); Alih-alih hanya menyimpan hitungan seperti menghitung semacam (yang hanya berlaku untuk jenis nilai sederhana).

Contoh Aplikasinya :


public static void pigeonhole_sort(int[] a)
{
    // size of range of values in the list (ie, number of pigeonholes we need)
    int min = a[0], max = a[0];
    for (int x : a) {
        min = Math.min(x, min);
        max = Math.max(x, max);
    }
    final int size = max - min + 1;
 
    // our array of pigeonholes
    int[] holes = new int[size];  
 
    // Populate the pigeonholes.
    for (int x : a)
        holes[x - min]++;
 
    // Put the elements back into the array in order.
    int i = 0;
    for (int count = 0; count < size; count++)
        while (holes[count]-- > 0)
            a[i++] = count + min;
}

Minggu, 11 Januari 2015

Tipe Data dalam Java part II

Pada postingan kali ini saya akan melanjutkan penjelasan mengenai Tipe Data Bentukan (komposit) dalam Java. Sebelumnya sudah disebutkan contoh dari Tipe Data Bentukan yaitu seperti String dan Array,  disini saya akan membahas sedikit contoh mengenai Tipe Data Bentukan.
  • Array (Larik)
  Larik adalah tipe data yang berisi beberapa data yang ditampung dalam satu variabel yang memiliki   tipe data yang sama.
 Masing masing data yang tertampung dalam sebuah larik akan ditandai sebagai elemen pertama  sampai ke - n.
 larik dapat dibuat beberapa dimensi, misalnya untuk menggambarkan matrix kita perlu  menggunakan larik 2 dimensi.  
  • Record (Rekaman)
  Tipe data rekaman di gunakan untuk menampung data yang terdiri dari beberapa tipe yang berbeda.
  Record dapat diakses (diisi) dan dibaca per elemen record dengan menyebut nama elemennya.
  •  Set (Himpunan)
Tipe data himpunan merupakan sebuah tipe data yang didalamnya memuat sejumlah elemen (anggota) dimana anggotanya memiliki tipe data dasar yang sama.

Untuk melengkapi postingan sebelumnya saya akan memberikan contoh program sederhana yang digunakan dalam pemrograman Java.

Contoh berikut merupakan contoh Tipe Data Int

Class Contoh {
public static void main (String [] args) 
byte a = 1;
short b = 2;
int c =3, d;
d = a + b + c;
System.out.println (“Hasil = “ + d);
}
}

kemudian saya akan membagikan contoh untuk Tipe Data Double, sebagai berikut :

class kll {
public static void main (String [] args)
double pi = 3.1416;
double r = 2.12;
double keliling;
  keliling = 2 * pi * r;
System.out.println (“Keliling adalah = “ + keliling);
}
}

Dan dibawah ini contoh dari Tipe Data Karakter

class kll {

public static void main (String [] args)
char ch = A;
System.out.println (“Huruf = “ + ch);
}
}

Contoh -contoh lainnya sebagai berikut :

Contoh 1

public class Contoh1
{
       public static void main(String[] args)
       {
              byte a = -128;
              short b = 32000;
              int c = 2500000, d;
              d = a + b + c;
    System.out.println(“hasilnya = ” + d);
       }
}


Contoh 2

public class Contoh2
{
       public static void main(String[] args)
       {
             double panjang = 17.7;
             double lebar = 9.12;
             double luas;
              luas = panjang * lebar;
     System.out.println(“Luas Persegi Panjang  = ” + luas);
        }
}


Contoh 3

public class Contoh3
{
       public static void main (String [] args)
       {
             char karakter1 = 69;
             char karakter2 = ‘E’;
       System.out.println(“Tampilan karakter pertama = ” + karakter1);
       System.out.println(“Tampilan karakter kedua   = ” + karakter2);
       }
}


Contoh 4

public class Contoh4
{
       public static void main (String[] args)
       {
             char karakter = ‘E’;
       System.out.println (“Tampilan karakter = ” + karakter);
       karakter++;
       System.out.println (“Tampilan karakter = ” + karakter);
       }
}

Konstruksi Fundamental dalam Java

Decision  and Looping

 Statement dalam source file ( file sumber ) pada umumnya dijalankan dari atas ke bawah dalam urutan kemunculan mereka. Control Flow Statement mampu memecah aliran eksekusi dengan menggunakan pengambilan keputusan ( decision ) , perulangan ( loop ), dan percabangan atau yang dikenal degan istilah jump , sehingga memungkinkan program kita untuk dieksekusi secara kondisional dengan blok kode tertentu. Bagian ini menjelaskan statement pengambilan keputusan / decision statement (if-then, if-then-else, switch), statement perulangan / loop statement (for, while, do-while), dan jump statement (break, continue, return) yang didukung bahasa pemrograman Java.


a. If-then, if-then-else, dan switch statements ( decision statements )

1) If-then statement


       If-then statement adalah yang paling dasar dari semua control flow statements. Ini memberitahu program kita untuk menjalankan bagian tertentu dari kode hanya jika test tertentu bernilai true. Misalnya, class Bicycle dapat memungkinkan rem untuk mengurangi kecepatan sepeda itu hanya jika sepeda sudah bergerak. Contoh penerapannya adalah sebagai berikut pada method apply Brakes.
void applyBrakes() {


    // the "if" clause: bicycle must be moving


    if (isMoving){


        // the "then" clause: decrease current speed


        currentSpeed--;


    }


}


       Jika test ini dievaluasi ke false (berarti bahwa sepeda tidak bergerak), kontrol akan melompat ke akhir statement if-then.


Dalam kasus ini, penggunaan braces ( {} ) bersifat opsional asalkan setelah klausa "then" hanya diberisi satu statement.
void applyBrakes() {


    // same as above, but without braces


    if (isMoving)


        currentSpeed--;


}


       Menentukan kapan harus menghilangkan braces adalah masalah selera pribadi. Menghilangkan pemakaiannya dapat membuat kode lebih rapuh. Jika statement kedua kemudian ditambahkan ke klausa "then", kesalahan umum akan lupa untuk menambahkan brace baru yang diperlukan. Compiler tidak dapat menangkap kesalahan ini, kita hanya akan menerima hasil yang tidak sesuai.

2)  If-then-else statements


       If-then-else statement menyediakan jalur sekunder eksekusi ketika sebuah klausa "if" dievaluasi ke false. Kita bisa menggunakan pernyataan if-then-else dalam metode applyBrakes untuk mengambil beberapa tindakan jika rem diterapkan saat sepeda tidak bergerak. Dalam hal ini, tindakannya adalah hanya untuk mencetak pesan kesalahan yang menyatakan bahwa sepeda telah berhenti.
void applyBrakes() {


    if (isMoving) {


        currentSpeed--;


    } else {


        System.err.println("The bicycle has " + "already stopped!");


    }


}

Sebagai contoh lain, program dibawah ini IfElseDemo memberikan grade yang didasarkan pada nilai skor test A untuk skor 90% atau lebih, dan B untuk 80% atau lebih. 

class IfElseDemo {

    public static void main(String[] args) {

        int testscore = 76;

        char grade;

        if (testscore >= 90) {

            grade = 'A';

        } else if (testscore >= 80) {

            grade = 'B';

        } else if (testscore >= 70) {

            grade = 'C';

        } else if (testscore >= 60) {

            grade = 'D';

        } else {

            grade = 'F';

        }

        System.out.println("Grade = " + grade);

    }

}



Output dari program ini adalah:
    Grade = C
       Kita mungkin telah memperhatikan bahwa nilai testscore dapat memenuhi lebih dari satu expression dalam statement majemuk: 76> = 70 dan 76> = 60. Namun, setelah kondisi terpenuhi, statement yang tepat dijalankan (grade = 'C';) dan kondisi yang tersisa tidak dievaluasi.

                3) Switch Statement   

 Berbeda dengan statement if-then dan if-then-else, switch statement dapat memiliki sejumlah jalur eksekusi yang memungkinkan. Switch dapat bekerja dengan tipe data byte, short, char, dan int. Ia juga mampu bekerja dengan tipe data enumerated, class String, dan beberapa class khusus yang membalut tipe data primitif tertentu ( char, byte, short, dan Integer ).
       Contoh kode berikut, class SwitchDemo, dideklarasikan sebuh tipe data int yang nilainya menyatakan bulan. Kode berikut menampilkan nama bulan tersebut, berdasarkan nilai dari month, denganmenggunakan pernyataan switch.

public class SwitchDemo {


    public static void main(String[] args) {




        int month = 8;


        String monthString;


        switch (month) {


            case 1:  monthString = "January";


                     break;


            case 2:  monthString = "February";


                     break;


            case 3:  monthString = "March";


                     break;


            case 4:  monthString = "April";


                     break;


            case 5:  monthString = "May";


                     break;


            case 6:  monthString = "June";


                     break;


            case 7:  monthString = "July";


                     break;


            case 8:  monthString = "August";


                     break;


            case 9:  monthString = "September";


                     break;


            case 10: monthString = "October";


                     break;


            case 11: monthString = "November";


                     break;


            case 12: monthString = "December";


                     break;


            default: monthString = "Invalid month";


                     break;


        }


        System.out.println(monthString);


    }


}


 Dalam hal ini, August akan dicetak ke output standard.
      
 Badan statement switch dikenal sebagai switch block. Sebuah statement di switch blok dapat diberi label dengan satu atau lebih case atau label default. Statement switch mengevaluasi expression, kemudian mengeksekusi semua statement yang mengikuti label case yang cocok. Kita juga bisa menampilkan nama bulan seperti kasus diatas dengan menggunakn statement if-then-else:

int month = 8;


if (month == 1) {


    System.out.println("January");


} else if (month == 2) {


    System.out.println("February");


}


...  // dan seterusnya

 Memutuskan kapan penggunaan statement if-then-else atau statement switch didasarkan pada pembacaan dan expression bahwa statement tersebut bersifat pengujian. Sebuah statement if-then-else dapat menguji expression berdasarkan beberapa nilai atau kondisi, sedangkan pernyataan switch menguji expression yang  didasarkan hanya pada satu bilangan bulat, nilai enumerated, atau object String.
      Hal lain yang menarik adalah statement break. Setiap statement break mengakhiri lampiran pernyataan switch. Control Flow berlanjut dengan statement pertama setelah blok switch. Statement 
break diperlukan karena tanpa mereka, statement dalam blok switch mengalir melalui semua statement setelah label case yang di cocokkan secara berurutan, terlepas dari expression label case berikutnya,sampai statement break ditemui.

Looping (For, While, Do-While)

For
package perulanganfor;
import java.util.Scanner;

class ulangan
{
    static void ulang()
    {
        Scanner ado = new Scanner(System.in);
        System.out.print("Masukkans akhir perulangan = ");
        int akhir = ado.nextInt();
        for (int i = 1; i<=akhir; i++)
            {
                System.out.println("inia  "+i);
            }
    }
}
public class Main {

    public static void main(String[] args) {
        ulangan.ulang();
    }

}
hasilnya:

While
package javaapplication25;
import java.util.Scanner;

public class Main
{
    Scanner input=new Scanner(System.in);
    public void counter()
    {
        int hitung=1;
        while (hitung<=200)
        {
            System.out.println(" "+hitung);
            hitung=(hitung*2);
        }
    }
    
    public static void main(String[] args)
    {
        System.out.println("           While            ");
        System.out.println("Bilanganpatan 2 (1-200)");
        System.out.println("----------------------------");
        Main mulai=new Main();
        mulai.counter();
        System.out.println();
    }

}
hasilnya :

Do-While
package dowhile;
import java.util.Scanner;

public class Main
{
    Scanner input=new Scanner(System.in);
    public void counter()
    {
        int hitung=1;
        do
        {
            System.out.print("  "+hitung);
            hitung=(hitung*2);
        }
        while(hitung<=100);
    }
    public static void main(String[] args)
    {
        System.out.println("         Do__While         ");
    System.out.println("Bilanganpatan 2 (1-100)");
    System.out.println("============================");
    Main mulai=new Main();
    mulai.counter();
    System.out.println();
    }

}
hasilnya :