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 🙂