Selasa, 24 Februari 2015

Aplikasi facemash tiruan Menggunakan Java & MySql (Part 2)

Lihat part 1 disini
4.    Buatkan sebuah form dengan nama “Data” kemudian panggil fungsi-fungsi dari kelas “DAO”. Sebagai contoh, berikut fungsi untuk menampilkan data ke Jtable :

Karena data tersebut membutuhkan gambar maka kita perlu memanggil fungsi untuk meload dan menyimpan gambar seperti dibawah ini :



try{

            koneksi kon = koneksi.getinstance();

            DAO d = new DAO(kon.getkoneksi());

            player= d.getall();//player = nama arraylist yang menampung data kandidat

            Object data[][]=new Object[player.size()][2];

            int x=0;

            for(kandidat dataplayer:player){

               

                data[x][0]=dataplayer.getid();

                data[x][1]=dataplayer.getnama();

                ++x;

            }

            String kolom[]={"Id","Nama"};

            jTable1.setModel(new DefaultTableModel(data,kolom));

       

        }catch(Exception e){

         JOptionPane.showMessageDialog(rootPane, e); 

        }

    }

Meload gambar dari direktori :

if(fc.showOpenDialog(imagePrev)==JFileChooser.APPROVE_OPTION){

        try{

           String file = null;

           fin = null;

           fin = new FileInputStream(fc.getSelectedFile());

           file = fc.getSelectedFile().toString();

           ((tempfoto)jPanel1).setImage(file);

     

        }catch(Exception e){

             Logger.getLogger(Data.class.getName()).log(Level.SEVERE, null, e);

        }

       }


Menyimpan data :

  try{

               kandidat g = new kandidat();

               g.setid(idtxt.getText());

               g.setnama(namatxt.getText());

               g.setfoto(fin);

                koneksi k = koneksi.getinstance();

                DAO dao = new DAO(k.getkoneksi());

                dao.insert(g); 

                tampil();

           }

           catch(Exception ex){

               JOptionPane.showMessageDialog(rootPane, ex);

           }


5.    Setiap kandidat yang akan bertemu tentu harus diacak dan memenuhi aturan seperti yang telah diberitahukan sebelumnya. Maka dari itu saya membuat sebuah kelas baru yang bernama “ManageRandom” untuk melakukan proses tersebut. Didalam kelas ini juga nantinya semua id dari kandidat yang diambil dari database akan dimasukkan kedalam array kemudian disaring agar tidak berulang kemudian diacak. Selanjutnya id tersebut di return untuk ditampilkan dalam form.

Fungsi Set Id :

public void setdata(String id){

        comp.add(new kandidat(id));

        int z = 0;

          String data[]= new String[comp.size()];

          for(kandidat x : comp){

              data[z]= x.getid();    

              z++;

          }

          FilterId(data, data.length);

 }
 
Fungsi filter id :

Pada fungsi ini 2 id kandidat yang telah diset melalui kelas compscore kita taruh kedalam arraylist dengan nama newid untuk disaring agar tidak berulang. Id yang sudah disaring kita taruh kedalam array 2 dimensi dengan nama idfil yang nantinya tinggal diacak dalam fungsi random(). Yang penting disini kita harus tahu berapa peluang 2 kandidat akan bertemu tanpa berulang. Nah untuk menemukannya saya punya 2 cara. Pertama kita buat perulangan misal jumlah kandidat ada 3 maka jadinya 3-1+2-1+1-1=3.


Contoh dalam kodingnya seperti ini :

  
          int  jmlpeluang=jmlhkandidat-1;

          for(int i=jmlpeluang-1;i>0;i--)

          {
  jmlpeluang = jmlpeluang+1;
           } 
Yang kedua dan yang paling mudah kita bisa pake rumus ini : (n^2 –n)/2 . dimana n=jumlah kandidat. Jadi saya pake ini saja hehehe

public void FilterId(String data[],int d){

          jmlpeluang=(d*d-d)/2;
          ArrayList newid= new ArrayList();
          idfil=new String[jmlpeluang][2];
          boolean a = false;
          int w=0;   
          for(int i=0;i              
            for(int j=0;j                 
               if(data[i].equals(data[j])){ a=false;}
                else if(newid.size()<1 a="true;" br="">                    else{
            for(CompScore c : newid){
                         if(c.getId2().equals(data[i]) && c.getId().equals(data[j])){        
                 idfil[w][0]=c.getId();
                               idfil[w][1]=c.getId2();
                               a = false;  
                               w++;
                         } 
                           else{a=true;}
                        } 
                    }
               
               if(a==true){
                   newid.add(new CompScore(data[i],data[j]));
               } 
           }
       }
          newid.clear();
          random(jmlpeluang,idfil);
      }


6.    Id didalam array yang sudah difilter diacak dengan fungsi dibawah :

public void random(int n,String compId[][]){
          
        int[] tes = new int[n];
        int kode;
        idrandom = new int[n];
        Random r = new Random();
        for(int i=0;i            
            boolean sama = false;
            kode=r.nextInt(n);
            tes[i]=kode;
            for(int j=0;j                if(kode==tes[j]){
                   sama=true; i--; break; 
                }
            }
                    if(sama==true){continue;}
                    else
                    {
                        idrandom[i]=kode;
                    }
           }
        } 


7.   Kita sudah memiliki fungsi2 untuk mengelola data kandidat/player.Berikut fungsi untuk menjalankan algoritma ELO Rating :

private double nilaiekspetasi(double Ra,double Rb){ 
        double Eks = 0; 
        double Qa = (Ra/400)*Math.log(10);
        double Qb = (Rb/400)*Math.log(10);
        Eks = Qa/(Qa+Qb 
        return Eks; 
    }
    
    private double ELOrate(double rate, double n, double eks) {
        double newrate=0;
 if(rate > 2400) {
  newrate = 16*(n - eks);
 }else if((rate <= 2400) && (rate >= 2100)) {
  newrate = 24*(n - eks);
 }else{
  newrate = 32*(n - eks);
 }
 return newrate;
}


Kemudian diinsert kedalam database dengan fungsi ini :

public void insertrating(){
        try{
            
           kandidat p = new kandidat();
           kandidat p2 = new kandidat();
           
           double skor=Double.parseDouble(score1.getText());
           double skor2=Double.parseDouble(score2.getText());
           p.setid(idtxt1.getText()); p2.setid(idtxt2.getText());
           double eks = 0; double eks2 = 0;  double eloA = 0;  double eloB = 0;
           
           if(pilihan1==true){ 
              eks = nilaiekspetasi(skor ,skor2 );
              eks2 = 1-eks;
              eloA = ELOrate(skor, 1, eks);
              eloB = ELOrate(skor2, 0, eks2);
              p.setscore(skor+eloA);
              p2.setscore(skor2+eloB);
            }
            else if(pilihan1==false){               
              eks = nilaiekspetasi(skor ,skor2 );
              eks2 = 1-eks;
              eloA = ELOrate(skor, 0, eks);
              eloB = ELOrate(skor2,1, eks2);
              p.setscore(skor+eloA);
              p2.setscore(skor2+eloB);
            }
           koneksi k = koneksi.getinstance();
           DAO dao = new DAO(k.getkoneksi());
           dao.updatescore(p);
           dao.updatescore(p2);
           
       }catch(Exception e ){
           JOptionPane.showMessageDialog(rootPane, e); 
       }
    }


Nah demikian contoh singkat source codenya teman2.. untuk user interfacenya bisa dilihat langsung diartikel part ke 3 dimana saya akan langsung mendemokan aplikasinya.. okey!? Thank you :)

Tidak ada komentar:

Posting Komentar