A feladat leírását, melynek a megoldását közzéteszem innen töltheted le.
A letölthető tömörített állományban megtalálod a NetBeans-ben megnyitható projectet. Amennyiben Geany szerkesztővel kívánod megtekinteni a megoldást, akkor töröld ki a források elejéről a következő sorokat:
package webotlet_e05maj_lotto;
A megoldásban csak egy osztály található, mivel a feladat egy kétdimenziós tömb típusfeladat, így nincs szükség külön osztályra. Akkor lássuk a megoldást:
/** * * @author http://webotlet.hu */ package webotlet_e05maj_lotto; import java.io.*; import java.util.Scanner; public class Webotlet_e05maj_lotto { public static void main( String[] args ) { Scanner sc = new Scanner(System.in); RandomAccessFile raf; String sor; int db; try { // 1. feladat System.out.print("Ird be az 52. het lottoszamait szokozzel elvalasztva: "); String[] het52 = sc.nextLine().split(" "); int[] het52sz = new int[5]; for ( int i = 0; i < het52.length; i++ ) { het52sz[i] = Integer.parseInt(het52[i]); } // 2. feladat System.out.println("\n2. feladat"); int csere; for ( int i = 0; i < het52sz.length-1; i++ ) { for ( int j = i+1; j < het52sz.length; j++ ) { if( het52sz[i] > het52sz[j] ) { csere = het52sz[i]; het52sz[i] = het52sz[j]; het52sz[j] = csere; } } } for( int sz : het52sz ) { System.out.print(sz+" "); } System.out.println(); // 3. feladat System.out.println("\n3. feladat"); System.out.println("Adj meg egy szamot (1-51): "); int het = sc.nextInt(); // 4. feladat int[][] szamok = new int[52][5]; raf = new RandomAccessFile("lottosz.dat","r"); db = 0; String[] heti; for( sor = raf.readLine(); sor != null; sor = raf.readLine() ) { heti = sor.split(" "); for( int i = 0; i < heti.length; i++ ) { szamok[db][i] = Integer.parseInt(heti[i]); } db++; } System.out.println("A "+het+". het nyeroszamai: "); for( int i = 0; i < szamok[het-1].length; i++ ) { System.out.print(szamok[het-1][i]+" "); } System.out.println(); // 5. feladat System.out.println("\n5. feladat"); int[] szamokDb = new int[90]; // az 52. hét adatait egyelőre kihagyjuk, azért -1 for( int i = 0; i < szamok.length-1; i++ ) { for( int j = 0; j < szamok[i].length; j++ ) { szamokDb[szamok[i][j]-1]++; } } boolean van = false; for( int sz : szamokDb ) { if( sz == 0 ) { van = true; break; } } if( van ) { System.out.println("Van"); } else { System.out.println("Nincs"); } // 6. feladat System.out.println("\n6. feladat"); int paratlan = 0; // kettesével lépkedünk a megszámolt számokon, hogy csak // a páratlanok darabszámait adjuk össze for( int i = 0; i < szamokDb.length; i += 2 ) { paratlan += szamokDb[i]; } System.out.println("A fajlban levo szamok alapjan "+paratlan+ " alkalommal huztak paratlan szamot"); // 7. feladat // az 52. hét számait hozzáfűzzük a többihez for( int i = 0; i < het52sz.length; i++ ) { szamok[51][i] = het52sz[i]; } RandomAccessFile ki = new RandomAccessFile("lotto52.ki","rw"); // ha esetleg létezne a fájl, töröljük a tartalmát ki.setLength(0); StringBuilder sb = new StringBuilder(); for( int i = 0; i < szamok.length; i++ ) { for ( int j = 0; j < szamok[i].length; j++ ) { sb.append(szamok[i][j]+ " "); } sb.append("\n"); } ki.writeBytes( sb.toString().replaceAll(" \n", "\n") ); // 8. feladat System.out.println("\n8. feladat"); sb = new StringBuilder(); for( int i = 0; i < szamokDb.length; i++ ) { sb.append(szamokDb[i]+" "); if( (i+1) % 15 == 0 ) { sb.append("\n"); } } System.out.println(sb.toString().replaceAll(" \n", "\n")); // 9. feladat System.out.println("\n9. feladat"); System.out.print("A kovetkezo primszamokat nem huztak ki: "); int[] primek = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89 }; // a kezzel beirt 52. het szamainak hozzaszamolasa az eddigiekhez for( int i = 0; i < het52sz.length; i++ ) { szamokDb[het52sz[i]-1]++; } for( int sz : primek ) { if( szamokDb[sz-1] == 0 ) { System.out.print(sz+" "); } } } catch( IOException e ) { System.err.println("HIBA"); } } }
for( int sz : szamokDb )
{
if( sz == 0 )
{
van = true;
break;
}
Ez a rész mit csinál? Minden egyes hét minden számát végignézi 1-tól 90-ig a két for ciklus, de mi alapján találja meg az egyezést? Ezt nem értem.
A szamokDb tömbben az található, hogy az egyes számokból melyiket hányszor húzták ki. Itt azt keresem meg, hogy van-e olyan szám, amit egyszer sem húztak ki. A többszörös megszámlálás leckében írom le, hogyan lehet ilyen szamokDb tömbnek megfelelő szerkezetet használni.
for( int i = 0; i < szamokDb.length; i += 2 )
{
paratlan += szamokDb[i];
}
System.out.println("A fajlban levo szamok alapjan "+paratlan+
" alkalommal huztak paratlan szamot");
Ezt kifejtené valaki, hogy működik? Egyáltalán nem értem. Főleg ha kiíratom a szamokDb[i] értékét is: 4 2 2 6 1 0 2 1 3 0 5 6 5 0 4 3 5 3 4 2 2 1 3 2 2 2 2 4 1 5 5 0 2 4 1 6 5 2 3 2 1 4 3 2 4 Ezt kapom meg. Ebből hogy lesz 126? Mit mutatnak ezek a számok?
A számokDb tömb azt tárolja, hogy melyik számból mennyit húztak ki. Kicsit át fogom dolgozni a megoldást, hogy az intervallum eltolás miatt egyértelműbb legyen. Elég régi megoldás, kicsit modernizálni kellene 🙂