//
archives

Pemrograman

This category contains 14 posts

Perbedaan Sintaks i++ dan ++i dalam Java


Beberapa waktu lalu saya mendapatkan sebuah kasus dimana harus membedakan antara i++ dan ++i di dalam Java. Berikut jawabannya:

i++ = variabel akan DICETAK terlebih dahulu kemudian DITAMBAHKAN.

++i = variabel akan DITAMBAHKAN terlebih dahulu kemudian DICETAK.

Contoh kode untuk testing:

int i = 5;
System.out.println("i = " + i);
System.out.println("i++ = " + i++);
System.out.println("++i = " + ++i);

Maka output seharusnya adalah:
5
5
7

Silahkan dicoba.

Iklan

Windows Phone 7 Developer Workshop – Ilmu Komputer UPI


Alhamdulillah setelah sekian lama tidak mengadakan sharing knowledge di kampus, Minggu kemarin (23 Oktober 2011), Saya dan Muhammad Yusuf berkesempatan untuk memberikan training seputar Windows Phone 7 di jurusan kami, ya Ilmu Komputer. Bertempat di Gedung Ilmu Komputer (FPMIPA-C) dengan jumlah peserta > 20 orang.

Apa tujuannya? Sebagai insan akademik, tentunya saya dan Yusuf sangat senang jika ilmu yang kami dapat tidak hanya dikonsumsi sendiri. Kami ingin ilmu tersebut dapat bermanfaat pula untuk orang lain. Disamping itu, platform Windows Phone 7 bisa dibilang saat ini masih jarang orang yang tertarik untuk mengembangkan aplikasi di mobile OS terbaru besutan Microsoft itu. Tapi, disini kami datang dengan memberikan berbagai opportunity bagi teman-teman Ilmu Komputer UPI mengingat bahwa kita sebagai developer lokal sudah memiliki kesempatan untuk submit aplikasi ke marketplace. Alhamdulillah yah :D.

Ini akan jadi peluang yang besar bagi developer lokal untuk memberikan kontribusi di sana. Oleh karena itu, sebagai batu loncatan pertama kita adakan Workshop ini untuk yang pertama kalinya. Disamping itu, seperti yang kita ketahui bahwa beberapa bulan lalu (Februari 2011) Nokia dan Microsoft mengadakan kerja sama dimana Nokia yang merupakan vendor mobile device yang memiliki target pasar yang besar akan mengadopsi Sistem Operasi Windows Phone 7 bahkan beberapa hari yang lalu telah rilis Nokia Windows Phone 7. Great! 😀

Berikut beberapa dokumentasi hasil Workshop yang telah diadakan.

 

Algoritma Pembentukan Garis dalam Grafika Komputer


Sebelum membahas mengenai Algoritma Pembentukan Garis, alangkah baiknya kita bahas dulu apa itu Garis? Garis adalah penghubung antara dua buah titik (titik awal dan titik akhir).

Seperti yang kita tahu, bahwa persamaan garis lurus dinyatakan dalam rumus: y=mx+c. Dimana m adalah gradien yang didapatkan dari hasil pembagian deltaY dengan deltaX dan c adalah sebuah konstanta. Berangkat dari sini kita coba mulai untuk membahas algortima apa saja yang digunakan dalam pembuatan garis lurus.

Algoritma Naive

  1. Tentukan titik-titik penghubung koordinat awal dan akhir.
  2. Dimulai dari titik (XAwal, Yawal), untuk menentukan titik selanjutnya, increment-kan Xi sebanyak 1 satuan. Lalu Yi dihitung dengan menggunakan rumus Yi = (m*Xi)+c.

Jika diimplementasikan dalam bahasa Java kurang lebih seperti ini:

float X1 = 0; float X2 = 3;
float Y1 = 0; float Y2 = 10;
float Dx = X2 - X1;
float Dy = Y2 - Y1;

float m = (Y2-Y1)/(X2-X1);
float c = Y1-(m*X1);
float Xi;
float Yi;

if (Math.abs(Dx) < Math.abs(Dy)) {
    Yi = Y1;
    while(Yi <=Y2){
        Xi=(Yi-c)/m;
        g.drawRect(Math.round(Xi),Math.round(Yi), 5,5);
        Yi++;
    }
} else {
    Xi = X1;
    while(Xi <= X2){
        Yi=(m*Xi)+c;
        g.drawRect(Math.round(Xi),Math.round(Yi),5,5);
        Xi++;
    }
}

Penjelasan kode:

Pertama, kita inisialisasi kan terlebih dahulu titik awal dan titik akhir. Dalam hal ini (X1,Y1) sebagai titik awal dan (X2,Y2) sebagai titik akhir. Lalu, dihitung gradien garis dan juga konstanta dari persamaan y = mx + c. Sebenarnya inti dari algoritma naive terletak dalam perulangan dimana Xi < = X2. Adapun Dx dan Dy dibuat hanya untuk mengetahui kemana titik yang membentuk garis akan bergerak. Gak ngerti kan? :P. Cobain aja deh sendiri, nanti juga ngerti ko. 🙂

Algortima Digital Differential Analyzer

  1. Tentukan dua buah titik.
  2. Titik awal (Xawal, Yawal) dan titik akhir (XAkhir, Yakhir).
  3. Hitung Dx dan Dy menggunakan rumus:

    Dx = XAkhir – Xawal,

    Dy = Yakhir – Yawal

  4. Bandingkan nilai mutlak Dx dan Dy. Jika Dx > Dy, maka steps = nilai absolut Dx. Jika Dx < Dy, maka steps = nilai absolut Dy.
  5. Hitung penambahan increment untuk X dengan xInc = Dx/steps dan yInc = Dy/steps.
  6. Kemudian increment-kan nilai Xi dengan nilai xInc, juga Yi dengan yInc.
  7. Bulatkan nilai koordinat untuk menentukan posisi pixel.
  8. Ulangi langkah 6 dan 7 sampai Xi = Xakhir dan Yi = Yakhir.

Jika diimplementasikan dalam bahasa Java kurang lebih seperti ini:

int X1 = 0;
int X2 = 100;
int Y1 = 0;
int Y2 = 30;
int Dx = X2-X1;
int Dy = Y2-Y1;
int steps;
float xInc, yInc;
float x = X1;
float y = Y1;
if (Math.abs(Dx) > Math.abs(Dy)) {
    steps = (int) Math.abs(Dx);
} else {
    steps = (int) Math.abs(Dy);
}

xInc = Dx / (float) steps;
yInc = Dy / (float) steps;

for (int k = 0; k < steps; k++) {
    x += xInc;
    y += yInc;
    g.drawRect((int) Math.round(x), (int) Math.round(y),5,5);
}

Penjelasan kode:

Dalam DDA, yang kita lakukan adalah mencari nilai absolut dari deltaX dan deltaY dan kemudian dibandingkan untuk menentukan steps. Steps ini nantinya digunakan sebagai nilai pembatas perulangan. Sehingga dalam satu perulangan x dan y di increment-kan bersama. 🙂

 

Algoritma Midpoint

Untuk algoritma ini masih dalam tahap analisis. Jika saya sudah paham benar baru saya akan cantumkan. Hehe :).

 

Apabila masih ada algoritma yang kurang efektif, saran dan masukan sangat saya harapkan.

Semoga Bermanfaat. :)

Mengganti Theme Default Aplikasi pada Android


Jika Anda membuat aplikasi di Android, maka secara default aplikasi yang Anda buat akan berwarna hitam. Seperti misalkan gambar berikut:

Anda bisa mengganti theme tersebut, dengan cara:

  1. Buka file AndroidManifest.xml
  2. Buatlah kode menjadi seperti berikut:

    <activity android:name=".Main"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.Light">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

Hasilnya menjadi seperti berikut.

 

Selesai.

Terima Kasih.

Semoga Bermanfaat. J

Membuat Marker pada Google Maps di Android


Pada tulisan sebelumnya Google Maps #1 dan Google Maps #2, telah dipaparkan bagaimana awal mula memuat Google Maps di Android. Sekarang saya akan menjelaskan cara membuat marker pada Android seperti gambar berikut.

Langkah-langkahnya sebagai berikut:

  1. Tambahkan baris kode berikut pada AndroidManifest.xml diluar tag Application

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    
  2. Buatlah main.xml menjadi:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:orientation="vertical" android:layout_width="fill_parent"
    	android:layout_height="fill_parent">
    	<com.google.android.maps.MapView
    		android:id="@+id/mapView" android:layout_width="fill_parent"
    		android:layout_height="fill_parent" android:enabled="true"
    		android:clickable="true" android:apiKey="0h8DOFp0FpPnnHBq0EZspqK9q2Kn0JwQc4v-JNQ" />
    
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="vertical" android:layout_width="wrap_content"
    		android:layout_height="wrap_content" android:layout_alignParentBottom="true"
    		android:layout_alignParentRight="true">
    		<Button android:id="@+id/btnSatelit" android:layout_width="wrap_content"
    			android:layout_height="wrap_content" android:text="Satelit"
    			android:layout_x="258px" android:layout_y="5px" android:onClick="btnSatelitClick" />
    
    		<Button android:id="@+id/btnJalan" android:layout_width="wrap_content"
    			android:layout_height="wrap_content" android:text="Street"
    			android:layout_x="258px" android:layout_y="3px" android:onClick="btnJalanClick" />
    
    	</LinearLayout>
    </RelativeLayout>
    
  3. Isikan Main.java, sehingga kodenya seperti berikut:

    import java.util.ArrayList;
    import java.util.List;
    
    import android.graphics.Canvas;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.Toast;
    
    import com.google.android.maps.GeoPoint;
    import com.google.android.maps.ItemizedOverlay;
    import com.google.android.maps.MapActivity;
    import com.google.android.maps.MapView;
    import com.google.android.maps.MyLocationOverlay;
    import com.google.android.maps.OverlayItem;
    
    public class Main extends MapActivity {
        /** Called when the activity is first created. */
    	private MapView mapView = null;
    	private MyLocationOverlay me = null;
    	
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            mapView = (MapView) findViewById(R.id.mapView);
            mapView.setBuiltInZoomControls(true);
            
            mapView.getController().setCenter(getPoint(-6.974681,107.56531));
            mapView.getController().setZoom(17);
            
            Drawable marker = getResources().getDrawable(R.drawable.marker1);
            marker.setBounds(0,0,marker.getIntrinsicWidth(),marker.getIntrinsicHeight());
            mapView.getOverlays().add(new SitesOverlay(marker));
            
            me = new MyLocationOverlay(this, mapView);
            mapView.getOverlays().add(me);
        }
        
        protected boolean isRouteDisplayed() {
            // TODO Auto-generated method stub
            return false;
        }
        
        public void btnSatelitClick(View v){
        	mapView.setStreetView(false);
        	mapView.setSatellite(true);
        }
        
        public void btnJalanClick(View v){
        	mapView.setStreetView(true);
        	mapView.setSatellite(false);
        }
        
        public void onResume() {
        	super.onResume();
        	
        	me.enableCompass();
        }
        
        public void onPause() {
        	super.onPause();
        	
        	me.disableCompass();
        }
        
        public boolean onKeyDown(int keyCode, KeyEvent event) {
        	if(keyCode == KeyEvent.KEYCODE_S) {
        		mapView.setSatellite(!mapView.isSatellite());
        		return true;
        	} else if(keyCode == KeyEvent.KEYCODE_Z) {
        		mapView.displayZoomControls(true);
        		return true;
        	}
        	
        	return (super.onKeyDown(keyCode, event));
        }
        
        private GeoPoint getPoint(double lat, double lon) {
        	return (new GeoPoint((int)(lat*1000000.0), (int)(lon*1000000.0)));
        }
        
        private class SitesOverlay extends ItemizedOverlay<OverlayItem>{
        	private List<OverlayItem> items = new ArrayList<OverlayItem>();
        	private Drawable marker = null;
        	
        	public SitesOverlay(Drawable marker) {
        		super (marker);
        		this.marker = marker;
        		
        		items.add(new OverlayItem(getPoint(-6.974681,107.56531),"Jln. Kopo Sayati","Bandung"));
            	populate();
        	}
        	
        	
        	protected OverlayItem createItem(int i) {
            	return (items.get(i));
            }
            
            public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            	super.draw(canvas,mapView,shadow);
            	
            	boundCenterBottom(marker);
            }
            
            protected boolean onTap(int i) {
            	Toast.makeText(getBaseContext(), items.get(i).getSnippet(), Toast.LENGTH_SHORT).show();
            	return true;
            }
            
            public int size() {
            	return(items.size());
            }
        }
    }
    
  4. Tambahkan gambar pada res/drawable-hdpi dengan nama marker1, atau bisa Anda cari sendiri ingin gambar/marker seperti apa.

Terima Kasih.

Happy Coding. J

%d blogger menyukai ini: