Tömb feltöltése véletlen számokkal, elrendezése, majd egy bekért szám keresése a tömbben bináris kereséssel, eljárások használatával (BinarisKereses.java) import java.io.*; public class BinarisKereses{ public static int n=10; public static int [] a=new int[n]; public static int in() throws Exception { Ez a beolvasást végrehajtó függvény, mely egész számot ad vissza. LineNumberReader x=new LineNumberReader(new InputStreamReader(System.in)); String s=x.readLine(); int i=Integer.parseInt(s); return i; } public static void feltolt(){ int i=0; while (i<n) { a[i]=(int)(Math.random()*10)+1; i=i+1; } } public static void rendez(){ Legkisebb alapján történő rendezéssel elrendezzük a tömb elemeit. int i=0, x, j; while (i<n) { j=i+1; while (j<n) { if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } j=j+1; } i=i+1; } } public static void kiir(){ System.out.println(" "); System.out.println("A tomb elemei rendezve:"); int i=0; while (i<n){ System.out.println("A tomb "+i+". eleme: "+a[i]); i=i+1; } } public static void keres() throws Exception{ int i1,i2,i=0,talalat,szam,i0; i1=0; i1-be eltároljuk a tömb első elemének indexét, azaz a 0-át. i2=n-1; i2-be eltároljuk a tömb utolsó elemének indexét, mivel Java-ban 0-val kezdődik az indexelés, n-1-et rakjuk bele. talalat=0; System.out.print("A keresett szam: "); szam=in(); Bekérjük a keresett számot. while (i1<i2) { i=(int)((i1+i2)/2); i-be beletesszük a középső elem indexét, amelyet az i1 és i2 aktuális értékének átlagaként kapunk meg. Mivel nem egész számot kapunk, típuskényszertéssel egész számmá alaktíjuk az átlagot. if (a[i]==szam) break; Ha a tömb i-edik eleme megyegyezik a számmal, azaz találatunk van break-el kilépünk a ciklusból. if (a[i]<szam) Ha a tömb i-edik eleme kisebb, mint a keresett szám, akkor már csak az i-edik elem után találhatjuk meg a számunkat, mivel a tömb elemeit elrendeztük. Ha az elem nagyobb a keresett számnál, akkor pedig már csak az i-edik elem előtti számok között keresünk tovább. i1=i+1; else i2=i-1; } i0=i; i0-ba eltároljuk az i aktuális értékét while (i1<=i){ A ciklus segítségével megvizsgáljuk, hogy az i-edik tömbelem előtti számok között van e találat, ha igen, kiírjuk a találat indexét, és a találatok számát növeljük eggyel, majd az i értékét csökkentjük eggyel, így vizsgálva a további elemeket. Ha nincs találatunk break-kel kilépünk a ciklusból. if (a[i]==szam) { System.out.println("A keresett szam a sorozat "+i+" eleme."); talalat=talalat+1; i=i-1; } else break; } i=i0+1; i-be beletesszük az i0-nál eggyel nagyobb értéket. Erre azért van szükség, mert miután az előző ciklus lefutott, már csak az i0-adik tömbelem után lehet találatunk. while (i2>=i) { A ciklus segítségével megvizsgáljuk, hogy az i-edik tömbelem utáni számok között van e találat, ha igen, kiírjuk a találat indexét, és a találatok számát növeljük eggyel, majd az i értékét is növeljüks eggyel, így vizsgálva a további elemeket. Ha nincs találatunk break-kel kilépünk a ciklusból. if (a[i]==szam) { System.out.println("A keresett szam a sorozat "+i+" eleme."); talalat=talalat+1; i=i+1; } else break; } System.out.println("Talalatok szama: "+talalat); } public static void main (String [] args) throws Exception{ feltolt(); kiir(); rendez(); kiir(); keres(); } }