Friday, 21 May 2010

Week 14

Minggu ini kelas OOP melanjutkan project rush hour. Jika minggu lalu menampilkan button sesuai dengan map yang disediakan, maka minggu ini kami sudah harus bisa menggerakan button tersebut sesuai dengan inputan user.

Cukup sulit untuk memindahkan button sesuai dengan inputan user. Sebelum kelas minggu ini saya sudah mencoba menggerakan button. Tapi hasilnya sejauh ini hanya bisa menggerakan 1 button saja. Jadi kalo pada map a,a yang bergerak hanya a yang pertama. Tapi minggu ini ko Franky sempat ngajarin sekilas gimana caranya biar semua a bisa gerak. Semoga udah bisa selesai minggu depan waktu minggu tenang.

Friday, 7 May 2010

Week 13

Minggu ini kelas OOP melanjutkan membuat project Rush Hour. Kami di suruh membuat dari membaca file sampai peletakan button dan component untuk menggerakan button nantinya. Sambil dipandu oleh ko Redo dan ko Franky saya akhirnya berhasil menyelesaikan sampai menempatkan button sesuai dengan peta dan meregister button pada action listener.

Tugas kami untuk 2 minggu lagi adalah membuat agar button bisa bergerak sesuai dengan input dari user.

Animasi iseng with Java

Minggu ini saya sempet iseng buat animasi pake java, walaupun masi simple banget. Intinya sih cuma gambar bulet pake paintComponent() trus posisi x & y nya dipindah pake for, trus setiap x & y nya pindah di repaint() biar keliatan gerakannya. Trus untuk memperlambat gerakanya pake thread sleep.

class Animation3 extends JPanel {

@Override
public void paintComponent(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.red);
g.fillOval(x, y, 40, 40);
}
}

pertama method paintComponent dimasukin kedalam inner class. trus posisinya pake instance variable x sama y. setcolor yg pertama untuk buat background warna putih. sebenernya sih bisa aja klo ga pake background putih, tapi fungsi background putih itu lebih untuk menghapus. jadi waktu pindahin posisi x&y lingkaran pake repaint(), klo ga ada setColor(color.white) nya lingkaran sebelumnya masi ada. jadi klo ga dikasi background putih hasilnya itu lingkaran memanjang.

public void visual() {
JFrame frame = new JFrame("My second Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Animation3 animation3 = new Animation3();

frame.getContentPane().add(animation3);
frame.setSize(300, 300);
frame.setBackground(Color.white);
frame.setVisible(true);

for (int a = 0; a <>
x++;
y++;
animation3.repaint();


try {
Thread.sleep(50);
} catch (Exception ex) {
}
}
}

Nah, for diatas untuk ganti nilai x sama y. Trus stiap nambah 1, method repaint() dipanggil. Try catch nya itu untuk memperlambat gerakannya. Klo ga dikasi thread.sleep ga bakal kliatan apa2.
Framenya harus di setvisible sebelum for, ini biar waktu lingkarannya gerak, framenya uda visible, klo for diatas frame.setvisible jadi animasinya jalan dulu baru frameya visible.

Thursday, 29 April 2010

Week 12

OOP minggu ini saya belajar bagaimana cara agar JButton yang sudah kita buat bisa melakukan sesuatu. Ada 3 cara yang harus diperhatikan:

1. Implement class kita dengan ActionListener
2. Over ride method actionPerformed
3. Register button yang diinginkan

Dengan melakukan ke tiga cara diatas, maka button yang diregisterkan akan melakuan sesuatu sesuai dengan isi method ActionPerformed.

Langkah - langkah :

1. implement class pada ActionListener

public class Temporary implements ActionListener

2. Over ride method actionPerformed

public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == button){
button.setText("I have been Clicked!");
}

else if (source == button2){
button2.setText("You have tried me");
}

}

Object source berfungsi untuk mengetahui sumber dari event yang terjadi.

3. Register button yang diinginkan

button.addActionListener(this);
button2.addActionListener(this);

Selain menggunakan Object source untuk mengetahui sumber event, bisa juga menggunakan inner class. Inner class adalah class yang berada dalam class atau nested class. Inner class memiliki semua instance dan method dari outter class nya. Inner class jg memiliki akses penuh pada instance yang di declare private.

Membuat inner class cukup mudah.

public class MyOutterClass{
private int x;

class MyInnerClass{
x = 5;

}
}

Pada contoh diata MyInnerClass memiliki hak akses pada int x meskipun x di declare private.

public class Temporary{

class Button1 implements ActionListener {

public void actionPerformed(ActionEvent e) {
button2.setText("You have tried me");
}
}

class Button implements ActionListener{

public void actionPerformed(ActionEvent e) {
button.setText("I have been clicked");
}

}
}

Diatas adalah bagaimana mengimplement ActionListener jika menggunakan inner class. yang perlu diperhatikan adalah saat inner class sudah mengimplement ActionListener maka outter class tidak perlu lagi mengimplement ActionListener.

button.addActionListener(new Button());
button2.addActionListener(new Button1());

Diatas adalah cara meregister button pada ActionListener. Jika tidak menggunakan inner class kita pass keyword this pada argument, jika menggukankan inner class yang kita pass pada argument adalah object dari inner class.

Thursday, 22 April 2010

OOP Week 11

GUI adalah singkatan dari Graphical User Interface. Pada awalnya sekitar tahun 1996, java menggunakan java.awt . Versi terbaru dari GUI adalah javax.swing yang lebih powerfull, dengan tampilan yang lebih cantik, dan pilihan widget yang lebih banyak.

public class MySimpleFrame extends JFrame{
public MySimpleFrame()
{
setVisible(true);
setSize(800, 650);
setTitle("MY SIMPLE FRAME");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton ok = new JButton();
JButton cancel = new JButton();
ok.setText("OK");
cancel.setText("CANCEL");
}
public static void main(String[] args) {
MySimpleFrame msf = new MySimpleFrame();
}
}

Untuk membuat GUI class yg ingin kita beri GUI kita extends JFrame. Dengan demikian class kita memiliki instance variable dan method dari class JFrame. Jika tidak mau memanfaatkan inheritance, bisa juga dengan membuat object dari JFrame dengan cara JFrame jframe = new JFrame(); (buat object seperti biasa.

Pada baris code diatas ada beberapa method yang digunakan:
1. setVisible(true) = untuk menampilkan frame
2. setTitle("My Simple Frame") = membuat title dengan judul "My Simple Frame"
3. setSize(800, 650) = menetukan ukuran frame dlm pixel
4. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) = jika user mengklik tombol x pada kanan atas akan langsung menutup frame dengan paksa
5. setLocationRelativeTo(null) = menampilkan frame di tengah layar

Ada pula object untuk membuat button yaitu JButton. Dengan membuat object dari JButton, kita dapat menampilkan button pada frame kita. Fungsi dari method setText() adalah untuk memberi nama dan menampilkan pada button dalam frame kita.

Pada JFrame juga ada pembagian layout.
* Flow layout = menyesuaikan dengan ukuran window
* Grid layout = programmer dapat menentukan berapa grid yang diinginkan
* Border layout = secara default dibagi menjadi 4 yaitu north, south, east, west

Friday, 16 April 2010

Week 10

Pada minggu ini pelajaran OOP membahas tentang array dan array 2 dimensi. Ada beberapa kata kunci seperti final yang berarti method tersebut sudah tidak bisa lagi dirubah.

Contoh:

private final static String[] months = {
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"};
nah,, pada contoh diatas isi dari months sudah final alias tidak dapat diubah lagi. Biasanya kita memakai keyword final jika kita butuh variable yang tidak mau kita ubah2 lagi nilainya.

Deklarasi Array

String[] colors = new String[4];
colors[0] = "Red";
colors[1] = "Green";
colors[2] = "Blue";
colors[3] = "Yellow";

Pada contoh diatas colors memiliki 4 index yang masing2 index berisi
red, green, blue, dan yellow.

Deklarasi Array 2D

int[][] m = new int[2][2];
m[0][0] = 0;
m[0][1] = 1;
m[1][0] = 0;
m[1][1] = 1;

Deklarasi array 2 dimensi tidak jauh beda dengan deklarasi array 1 dimensi.
Pada contoh diatas Array memiliki 2 x 2. Array diatas pada index 0,0
memiliki nilai o.
Pada indexke 0,1 memiliki nilai 1. Pada index ke 1,0 memiliki nilai 0
dan pada index ke 1,1 nilainya 1.

Pada minggu ini saya juga sempat belajar sendiri dari buku Head First Java.
Saya belajar 2 tempat dimana method dan object hidup.

1. Stack adalah tempat method tinggal pada waktu dipanggil
2. Heap adalah tempat dimana object hidup saat kita membuat object baru.

Ada juga yang namanya "Garbage Collector Heap".
Garbage Collector Heap
bertugas untuk membuang object yang
sudah tidak dipakai lagi dan memberi ruang baru untuk memori.
Cara GCH menentukan mana object yang sudah
tidak dipakai lagi:

1. Jika object tersebut tidak lagi memiliki reference variable.
2. Jika reference variable diset ke null.

Thursday, 8 April 2010

Week 9

Minggu ini materi OOP adalah tentang String. Sebagai pembuka Pak Alfon mengenalkan dan menjelaskan tentang kode ASCII.

public class Main {

public static void main(String[] args) {

char ch = 'Z';

byte b = 65;

JOptionPane.showMessageDialog(null, "ASCII code of character " + ch + " is "+(int)ch);

JOptionPane.showMessageDialog(null, "Characters with ASCII code " + b + " is "+(char)b);

JOptionPane.showMessageDialog(null, ch + " is " + ((ch>b)?"bigger" : "smaller") + " than " + (char)b);

}

}

Pada baris kode diatas kita memprint kode ASCII dari 'Z'. Kita juga tahu bahwa bilangan ASCII 65 adalah 'a'. kemudian kita membandingkan mana yang lebih besar 'Z' atau 'a'.

((ch>b)?"bigger" : "smaller")

sama dengan

if (ch>b)
{
"bigger";
}
else
{
smaller;
}

String

String adalah gabungan dari char yang dianggap 1 kesatuan. Contoh: String name = "Kevin";
sama dengan char name = {"K", "e", "v", "i", "n"};

Beberapa perintah dalam penggunaan String.

charAt() = mereturn character yang berada pada index argument
.length = mereturn jumlah character dalam String
.toLowerCase = membuat String menjadi lower case
.toUpperCase = membuat String menjadi upper case

Substring

String name = "Jojon";
String nick = name.substring(0, 2);

System.out.pritnln(nick);

hasilnya adalah "Jo"

cara kerja substring adalah mengambil sebagian dari String sesuai dengan argument.
substring(0, 2) berarti mengambil String dari index ke 0 sampai index ke 1.


Thursday, 1 April 2010

Week 8

Minggu ini materi adalah tentang bagaimana menghindari program kita agar tidak mengalami "blue screen error". Di java digunakan syntax try dan catch.

------------------------------------------------------------------------------------------------
age = Integer.parseInt(inputStr);
try
{
age = Integer.parseInt(inputStr);
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null, "'"+inputStr+"' is invalid/n"+"Please enter digits only");
}
------------------------------------------------------------------------------------------------

Contoh diatas akan menjalankan terlebih dahulu statement yang berada di dalam try. Jika mengalami error maka statement yang berada di dalam catch akan dijalankan. Tapi jika statement dalam try tidak mengalami error maka statement dalam catch tidak dijalankan.

* catch(NumberFormatException e) digunakan untuk mendapat error dari kesalahan penggunaan integer.

* catch(ArrayIndexOutOfBoundsExceptions e) digunakan untuk menangkap error jika menggunakan array lebij dari yang tersedia.

Ada juga method yang berfungsi untuk menjelaskan masalah apa yang terjadi jika seandainya terjadi error.

* getMessage : hanya menjelaskan kesimpulan apa yang terjadi dengan error program.

* printStackTrace : menjelaskan secara detail apa yg terjadi pada error program. Biasanya digunakan oleh admin program atau pembuat program.

Propagation Exception--------------------------------------

Propagation berarti melempar tanggung jawab kepada method lain yang mampu menghandlenya.

contoh:
siswa xyx sakit -> Nyoto -> Bu Lita -> Dokter

Pada contoh diatas ada siswa xyz yang sakit lalu minta bantuan Nyoto untuk mengobati, tapi Nyoto tidak bisa mengobati maka Nyoto minta bantuan Bu Lita, tapi Bu Lita pun tidak bisa mengobati yang kemudian menelfon dokter.

Pada contoh diatas propagator adalah Nyoto dan Bu Lita. Sedangkan catcher adalah dokter.

Friday, 26 March 2010

Week 7

Minggu ini adalah minggu UTS. Soal-soalnya cukup sulit bagi saya, apalagi tidak boleh menggunakan komputer. Soal TTS banyak ada beberapa yang saya lupa. Kalo soal koding yang bisa saya kerjakan hanya no 1 dan no 3, yang no 2 ga ngerti soalnya belum diajarin. hehe..

Friday, 19 March 2010

Week 6

Pada minggu ini cukup banyak materi yang diberikan Pak Alfon. Dan seperti biasa kelas Pak Alfon banyak di isi dengan koding. Berikut adalah materi yang dibawakan.


This

this digunakan agara tidak membuat terlalu banyak variable.

tanpa 'this' :

public void setLength(double l){
length = l;
}


diatas kita harus menuliskan sebuah variable baru yaitu l.

dengan 'this' :

public void setLength(double length){
this.length = length;
}

diatas kita dapat menggunakan length lagi tanpa harus membuat variable baru.


Static Initializers

Kelebihanya adalah dapat menghemat memori, karena object yang biasa kita buat memakan memori, dengan static kita tidak perlu membuat object baru yang berate lebih hemat dalam penggunaan memori.


Overloaded method

Ini berarti kita membuat method yang sama dengan argumen berbeda. Biasanya digunakan untuk memudahkan dalam inputan


public void setLength(double length){
this.length = length;
}
public void setLength(String length){
this.length = Double.parseDouble(length);
}


x++ dan ++x

Perbedaan z=x++ dengan z=++x adalah z=x++ berarti nilai x dimasukan dulu ke z baru x di ++. Sedangkan z=++x nilai yang diterima z adalah hasil dari x++.


Multiple constructors

Ini berarti kita memasukan 2 atau lebih constructor ke dalam sebuah class.

public Main(){
this(0., 0.);
}
public Main(double length){
this(length, length);
}
public Main(double length, double width){
setLength(length);
setWidth(width);
}



Pada minggu ini saya juga sempat belajar sendiri dari buku yang sama minggu lalu yaitu Schaum’s outlines yang saya pinjam dari perpustakaan UC. Minggu ini saya mempelajari tentang string dari buku ini dan akan saya tampilkan beberapa yang saya pelajari.



class TestStringClass {

public static void main(String[] args) {


String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

System.out.println("This is string: " + alphabet);

System.out.println("This is the lenght: " + alphabet.length());

System.out.println("The charactert at index 4 is: " +alphabet.charAt(4));

System.out.println("The index of the character Z is: " + alphabet.indexOf('Z'));

System.out.println("Its lowercase version is: " + alphabet.toLowerCase());

System.out.println("This string is still: " + alphabet);

}

}


Pada baris koding diatas ada beberapa perintah unik string.


* Yang pertama adalah alphabet.length yang mengambil berapa panjang dari string yang telah dideklarasikan.


* Alphabet.charAt(4) mengambil string pada index ke 4.


* Alphabet.indexOf(‘Z’) mengambil index dari alphabet Z. alphabet.toLowerCase() berarti membuat String menjadi lower case.



class Replacing{

public static void main(String[] args){


String inventor = "Charles Babbage";

System.out.println(inventor);

System.out.println(inventor.replace('B', 'C'));

System.out.println(inventor.replace('a', 'c'));

System.out.println(inventor);

}

}


Perintah lain seperti replace berarti mengganti huruf dalam string dengan huruf baru yang kita inginkan. Contohnya:


System.out.println(inventor.replace('B', 'C'));


Baris ini berarti mengganti ‘B’ menjadi ‘C’.

Week 6

Pada minggu ini cukup banyak materi yang diberikan Pak Alfon. Dan seperti biasa kelas Pak Alfon banyak di isi dengan koding. Berikut adalah materi yang dibawakan.

This

this digunakan agara tidak membuat terlalu banyak variable.

tanpa 'this' :

public void setLength(double l){
length = l;
}


diatas kita harus menuliskan sebuah variable baru yaitu l.

dengan 'this' :

public void setLength(double length){
this.length = length;
}

diatas kita dapat menggunakan length lagi tanpa harus membuat variable baru.

Static Initializers

Kelebihanya adalah dapat menghemat memori, karena object yang biasa kita buat memakan memori, dengan static kita tidak perlu membuat object baru yang berate lebih hemat dalam penggunaan memori.

Overloaded method

Ini berarti kita membuat method yang sama dengan argumen berbeda. Biasanya digunakan untuk memudahkan dalam inputan


public void setLength(double length){
this.length = length;
}
public void setLength(String length){
this.length = Double.parseDouble(length);
}

x++ dan ++x

Perbedaan z=x++ dengan z=++x adalah z=x++ berarti nilai x dimasukan dulu ke z baru x di ++. Sedangkan z=++x nilai yang diterima z adalah hasil dari x++.

Multiple constructors

Ini berarti kita memasukan 2 atau lebih constructor ke dalam sebuah class.



public Main(){
this(0., 0.);
}
public Main(double length){
this(length, length);
}
public Main(double length, double width){
setLength(length);
setWidth(width);
}

Pada minggu ini saya juga sempat belajar sendiri dari buku yang sama minggu lalu yaitu Schaum’s outlines yang saya pinjam dari perpustakaan UC. Minggu ini saya mempelajari tentang string dari buku ini dan akan saya tampilkan beberapa yang saya pelajari.

class TestStringClass {

public static void main(String[] args) {

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

System.out.println("This is string: " + alphabet);

System.out.println("This is the lenght: " + alphabet.length());

System.out.println("The charactert at index 4 is: " +alphabet.charAt(4));

System.out.println("The index of the character Z is: " + alphabet.indexOf('Z'));

System.out.println("Its lowercase version is: " + alphabet.toLowerCase());

System.out.println("This string is still: " + alphabet);

}

}

Pada baris koding diatas ada beberapa perintah unik string. Yang pertama adalah alphabet.length yang mengambil berapa panjang dari string yang telah dideklarasikan. Alphabet.charAt(4) mengambil string pada index ke 4. Alphabet.indexOf(‘Z’) mengambil index dari alphabet Z. alphabet.toLowerCase() berarti membuat String menjadi lower case.

class Replacing{

public static void main(String[] args){

String inventor = "Charles Babbage";

System.out.println(inventor);

System.out.println(inventor.replace('B', 'C'));

System.out.println(inventor.replace('a', 'c'));

System.out.println(inventor);

}

}

Perintah lain seperti replace berarti mengganti huruf dalam string dengan huruf baru yang kita inginkan. Contohnya:

System.out.println(inventor.replace('B', 'C'));

Baris ini berarti mengganti ‘B’ menjadi ‘C’.

Friday, 12 March 2010

Week 5

Week 5


Pada minggu ini materi yang diberikan menurut saya sangat mirip dengan pelajaran alpro semester 1 karena ada tentang statement if, while, dan for dan masih banyak lagi. Penggunaanya pun sangat mirip bahkan sama persis. Pada minggu ini saya juga sempat belajar dari buku terbitan Schaum’s berjudul “Programming with java” yang menurut saya syntax yang diajarkan berbeda dengan yang diajarkan di kelas, meskipun ketika di compile dan di run hasil yang keluar sama. Saya juga sempat menanyakan kepada ko Franky tentang hal ini, dank o Franky mengatakan tidak tau. Nah, dari sini saya menyimpulkan bahwa syntax java sangat luas dan banyak.


Nah inilah yang saya peajari minggu ini.


Boolean Operators


3 jenis boolean Operators:

&& = and = bernilai benar jika ke dua syarat harus terpenuhi

|| = or = salah satu syarat terpenuhi maka akan bernilai benar

! = not cnt: “ != “ berarti : tidak sama dengan



Short Circuit Evalutaion


Berarti bahwa jika sebuah syarat sudah terpenuhi maka syarat yang lain tidak perlu di perhatikan lagi

ex: x > y || x > z x = 37 y = 24 z = 19

jika x > y sudah terpenuhi maka x > z tidak dibaca lagi.



Comparing Objects


Untuk data bertipe int, double, float, dll comparing menggunakan ” == “

Untuk object (string) str1.equals(str2)



If statement


if(x>10){

Print= besar;

}

else{

print=kecil;

}

Gini kira2 logika pemakainnya. Kalo nilai x lebih besar dari 10 maka akan di print besar. Jika nilai x lebih kecil dari 10 maka perintah else yang akan dijalankan yaitu memprint kecil.



Switch Statement


Switch statement memungkinkan untuk manjalankan lebih dari 1 pilihan.

Case1{

Print=1;

}

Case2{

Print=2;

}

Case 3{

Print=3;

break;

}

Case4{

Print=4;

}


Jika memenuhi kondisi pertama maka case1, 2,dan 3 akan dijalankan. Jika memenuhi kodisi ke2 maka case 2 dan 3 akan dijalankan. Jika memenuhi kondisi ke 3 maka hanya kondisi ke 3 yang dijalankan. Hal yang sama juga terjadi jika kondisi ke 4 terpenuhi, hanya case 4 yang dijalankan. Mengapa berhenti di case 3? Karena ada perintah break. Jika tidak ada perintah break maka akan jalan terus sampai case 4.



Loop Statement


While


while(x>5){

print=OOP;

x++;

}

Algoritma diatas akan memprint “OOP” sebanyak x kali sampai nilai x lebih besar dari 5.


Do while

= saudara kembar while bedanya do while menjalankan perintah sekali baru menambah nilai x


For


for(x=0;x<5;x++){

print=OOP;

}

Algoritma diatas akan memprint “OOP” sebanyak 5 kali. Nilai x di declare 0 didalam syntax for, berbeda dengan while yang dideclare diluar. Pertama mencek nilai x, jika x lebih kecil dari 5 maka menjalankan perintah dalam kurung kurawal kemudian baru kemudian x di “++”.


Nah disini saya mau member sedikit yang saya pelajari dari buku terbitan Schaum’s

Jika di kelas diajarkan untuk mendapat inputan dari user kita menggunakan import java.util.scanner; untuk mengambil dari library java, di buku schaum menggunakan import java.io.*;


Dikelas menggunakan


Scanner myScanner = new Scanner(System.in);

int age = myScanner.nextInt();


untuk menerima inputan dan kemudian memasukan nilai ke variable. Dari buku saya mempelajari dengan perintah


BufferedReader in;

in = new BufferedReader (new InputStreamReader(System.in));

System.out.println("Height: ");

String height = in.readLine();

int h = Integer.parseInt(height);


sebenarnya saya sedikit kurang paham cara kerjanya karena menggunakan bahasa inggris, tapi kira2

“in” digunakan untuk menyimpan sementara nilai inputan user kemudian baru dipindahkan ke string height menggunakan String height = in.readLine(); .karena nilai yang diberikan berupa int maka harus dipindah ke variable bertipe int dengan perintah int h = Integer.parseInt(height); sedangkan BufferedReader, InputStreamReader, readLine, dan parseInt() adalah syntax standarnya.


Keduanya sama2 berfungsi untuk menerima inputan dari user. Dibawah adalah soal yang diberikan dikelas pada week 5 tentang berat ideal yang saya koding menggunakan syntax yang saya dapat dari buku.


import java.io.*;


class Ideal {


public static void main(String[] args) throws IOException{


BufferedReader in;

in = new BufferedReader (new InputStreamReader(System.in));


System.out.println("Height: ");


String height = in.readLine();

int h = Integer.parseInt(height);

System.out.println("Age: ");

String age = in.readLine();

int a = Integer.parseInt(age);


if(h >= 140 && h <= 230 && a >= 0 && a <=100){

double rec = ( h - 100 + a / 10) * 0.9;


System.out.println("rec weight: " + rec);

}


else{

System.out.println("System error");

}


}

}


Hasilnya sama persis seperti menggunakan scanner maupun Joption.


Ternyata java sangat luas syntaxnya. Tidak seperti bahasa c yang pasti menggunakan printf untuk memprint dan scanf untuk menerima inputan.