Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.*;
- public class Lotaria {
- private int[] numratEPerdoruesit;
- private int[] numratFitues;
- private int numriMax;
- /**
- * Konstruktori - inicalizon variablat e fushes
- */
- public Lotaria(int setSize, int range)
- {
- numratEPerdoruesit = new int[setSize];
- numratFitues = new int[setSize];
- numriMax = range;
- }
- public static void main(String[]args)
- {
- int setSize = 6; // Ka sa numra do i zgjedhim
- int max = 36; // Intervali prej te cilit zgjidhen numrat [ 1, max]
- Lotaria l = new Lotaria(setSize,max);
- l.filloLojen();
- }
- /**
- * filloLojen i therret metodat private te klases, per te kryer funksionet qe duhet per nje loje te llotos
- */
- public void filloLojen()
- {
- merrInputin();
- gjeneroNumratFitues();
- sorto();
- afishoRezultatetELojes();
- }
- /**
- * Merr te dhenat hyrese nga perdoruesi, duke u siguruar qe numrat jane brenda intervalit [1,numriMax], dhe që numrat e futur të jenë unikë ( pa duplikate )
- */
- private void merrInputin ()
- {
- // tash po e marrim inputin
- int count = 0 ; // sa numra jane regjistruar deri me tash
- while ( count != numratEPerdoruesit.length )
- {
- String s = JOptionPane.showInputDialog("Shtypeni numrin e " + (count +1) + "\nShënim : Numri duhet të jetë në intervalin [1," + numriMax + "]");
- if ( s != null && !s.equals(""))
- {
- //nese hyrja eshte legjitime, vazhdo me llogaritje
- int nrITerhequr = Integer.parseInt(s);
- boolean ekziston = aEshteShtuarKyNumer(nrITerhequr,count) ; // dmth nese ekziston kthehet true ( pra nese eshte terhequr me heret)
- // count e perdorim ashtu qe te kerkojme ne varg deri aty ku jane shtuar numrat.
- if (!ekziston)
- {
- // nese nuk ekziston , kontrollojme se a eshte ne intervalin e duhur, para se ta shtojme
- if (nrITerhequr >0 && nrITerhequr <=numriMax)
- {
- numratEPerdoruesit[count] = nrITerhequr;
- count++;
- }
- else
- {
- JOptionPane.showMessageDialog(null,"Gabim : Ky numër është jashtë intervalit [1," + numriMax + "]");
- }
- }
- else {
- JOptionPane.showMessageDialog(null,"Gabim : Këtë numër e keni shtuar tashmë. ");
- }
- }
- else if ( s==null)
- {
- // dmth nese shtyp cancel
- JOptionPane.showMessageDialog(null,"Keni zgjedhur ta perfundoni lojen ! ");
- System.exit(0);
- }
- // ne rastin se shtyp OK pa shkruar asgje, nuk do ndodhe asgje, aplikacioni e pyet edhe njehere
- }
- }
- /**
- * Ne menyre te rastesishme gjeneron numra fitues, dhe sigurohet qe te mos kete duplikate
- */
- private void gjeneroNumratFitues()
- {
- // tash po i gjenerojme disa numra ne menyre te rastesishme
- int count = 0 ; // sa numra jane gjeneruar deri me tash,
- while ( count != numratFitues.length )
- {
- int nrITerhequr = terhiqNjeNumer();
- boolean ekziston = aEshteGjeneruarKyNumer(nrITerhequr,count); // kontrollohet se a eshte gjeneruar ky numer me heret
- // count e perdorim ashtu qe te kerkojme ne varg deri aty ku jane shtuar numrat.
- if (!ekziston)
- {
- // nese numri i terhequr nuk eshte gjeneruar me pare, shtoje ne vendin e zbrazet numratFitues[count], dhe rrite count per nje
- numratFitues[count] = nrITerhequr;
- // System.out.println(nrITerhequr);
- count++;
- }
- }
- }
- /**
- * Sorton numrat e zgjedhur nga perdoruesi dhe numrat fitues, ne menyre rritese ( prej me te voglit )
- */
- private void sorto()
- {
- // po i sortojme , qe te duket me mire kur te afishohen rezultatet
- // pasi vargjet kane gjatesi te vogel , po e perdorim bubble sort
- boolean sorted = false;
- while( !sorted )
- {
- sorted = true; // po supozojme se eshte sortuar, nese e gjen nje rast qe duhet ndryshuar rradhitjen, e kthen prape ne false
- for( int i = 1; i!= numratEPerdoruesit.length; i++ )
- {
- if( numratEPerdoruesit[i-1] > numratEPerdoruesit[i] )
- {
- int temp = numratEPerdoruesit[i-1];
- numratEPerdoruesit[i-1] = numratEPerdoruesit[i];
- numratEPerdoruesit[i] = temp;
- sorted = false;
- }
- // po i sortojme te dy vargjet ne re njejten kohe
- if( numratFitues[i-1]> numratFitues[i] )
- {
- int temp = numratFitues[i-1];
- numratFitues[i-1] = numratFitues[i];
- numratFitues[i] = temp;
- sorted = false;
- }
- //nese s'ka pase ndryshime mrena loop-es for, sorted ka mbet true, pra dalim prej while !
- }
- }
- }
- /**
- * Llogarit se sa numra i ka qëlluar perdoruesi, si dhe afishon rezultatet
- */
- private void afishoRezultatetELojes()
- {
- int saNumraJaneQelluar=0;
- String teQelluar="";
- for ( int i = 0; i!=numratEPerdoruesit.length; i++)
- {
- for ( int j = 0 ; j!=numratFitues.length ; j++)
- {
- if ( numratEPerdoruesit[i] == numratFitues[j] )
- {
- saNumraJaneQelluar++;
- teQelluar += numratEPerdoruesit[i] + ",";
- }
- }
- }
- if(saNumraJaneQelluar>0)
- {
- teQelluar = teQelluar.substring(0,teQelluar.length()-1); // qe ta heqim nje "," ne fund
- String nrEZgjedhur="";
- String nrFitues="";
- // kjo i bie, for each x in numratEPerdoruesit, do ..... , njejte sikur ta perdornim for (int i = 0;i!=numratEPerdoruesit.length;i++) ..........
- for (int x: numratEPerdoruesit)
- {
- nrEZgjedhur += x +",";
- }
- nrEZgjedhur = nrEZgjedhur.substring(0,nrEZgjedhur.length()-1); // qe ta heqim nje "," ne fund
- for (int x: numratFitues)
- {
- nrFitues += x+"," ;
- }
- nrFitues = nrFitues.substring(0,nrFitues.length()-1); // qe ta heqim nje "," ne fund
- JOptionPane.showMessageDialog(null,"Numrat tuaj ishin: " +nrEZgjedhur
- +"\nNumrat fitues janë: "+nrFitues +"\nJu keni qelluar " + saNumraJaneQelluar + "/" + numratEPerdoruesit.length + " ! \nNumrat e qëlluar: " + teQelluar);
- }
- else {
- JOptionPane.showMessageDialog(null,"Nuk keni qëlluar asnjë numër");
- }
- }
- /**
- * Krahason numrat qe ka shtuar perdoruesi paraprakisht me numrin e fundit.
- * @returns a është ky numër duplikatë!
- * @param nr Numri qe krahasohet se a eshte shtuar me heret
- * @param count Hapesira e pare e zbrazte ne varg, dmth deri ne kete indeks ka numra te shtuar ne varg
- */
- private boolean aEshteShtuarKyNumer(int nr,int count)
- {
- boolean exists = false;
- for ( int i = 0 ; i!= count ; i++)
- {
- if( numratEPerdoruesit[i] == nr)
- {
- exists = true;
- }
- }
- return exists;
- }
- /**
- * Krahason numrat qe ka gjeneruar aplikacioni paraprakisht me numrin e fundit.
- * @returns a është ky numër duplikatë!
- * @param nr Numri qe krahasohet se a eshte shtuar me heret
- * @param count Hapesira e pare e zbrazte ne varg, dmth deri ne kete indeks ka numra te shtuar ne varg
- */
- private boolean aEshteGjeneruarKyNumer(int nr,int count)
- {
- boolean exists = false;
- for ( int i = 0 ; i!= count ; i++)
- {
- if( numratFitues[i] == nr)
- {
- exists = true;
- }
- }
- return exists;
- }
- private int terhiqNjeNumer()
- {
- int random = (int)( Math.random()*numriMax +1 );
- // Math.random() na jep rezultat prej 0 deri te 1 ( pa e perfshire 1 ) , nese shumezojme me numriMax ( ne rastin e kerkuar 36 ), intervali zgjerohet ne [0,36),
- //me pas mbledhim me 1, intervali del [1,37). Kur marrim pjesen e plote , atehere mund te na kthehen numrat e plote prej 1 deri 36 ( duke i perfshire edhe 1 e 36)
- // pra ne intervalin [1,36]
- return random;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement