A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás tömbbel dolgozik. A 7. feladat megoldása borzasztóan körülményes tömbök használata miatt. A listás megoldás ezt a feladatot drasztikusan leegyszerűsíti majd.
Adattároló osztály:
package webotlet_17okt_hianyzasok;
public class Hianyzo
{
private String nev;
private int honap;
private int nap;
private String hianyzas;
public Hianyzo(String[] tomb, String datum)
{
nev = tomb[0] + " " + tomb[1];
String[] tmp = datum.split(" ");
honap = Integer.parseInt(tmp[1]);
nap = Integer.parseInt(tmp[2]);
hianyzas = tomb[2];
}
public String getNev()
{
return nev;
}
public int getHonap()
{
return honap;
}
public int getNap()
{
return nap;
}
public String getHianyzas()
{
return hianyzas;
}
@Override
public String toString()
{
return "Hianyzo{" + "nev=" + nev + ", honap="
+ honap + ", nap=" + nap + ", hianyzas="
+ hianyzas + '}';
}
}
A feladat megoldásai:
/**
*
* @author https://webotlet.hu
*/
package webotlet_17okt_hianyzasok;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
public class Webotlet_17okt_hianyzasok
{
public static void main(String[] args)
{
Hianyzo[] hianyzasok = null;
try
{
RandomAccessFile raf = new RandomAccessFile("naplo.txt", "r");
String sor;
int db = 0;
for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
{
if( sor.charAt(0) != '#' )
{
db++;
}
}
hianyzasok = new Hianyzo[db];
raf.seek(0);
int hely = 0;
String datum = "";
for( sor = raf.readLine();sor != null; sor = raf.readLine() )
{
if( sor.charAt(0) == '#' )
{
datum = sor;
}
else
{
hianyzasok[hely] = new Hianyzo(sor.split(" "), datum);
hely++;
}
}
raf.close();
}
catch( IOException e )
{
System.out.println("HIBA");
}
// for( int i = 0; i < hianyzasok.length; i++ )
// {
// System.out.println(hianyzasok[i].toString());
// }
System.out.println("2. feladat");
System.out.println("A naploban " + hianyzasok.length
+ " bejegyzes van.");
System.out.println("3. feladat");
int igazolt = 0;
int igazolatlan = 0;
for( int i = 0; i < hianyzasok.length; i++ )
{
for( int j = 0; j < 7; j++ )
{
if( hianyzasok[i].getHianyzas().charAt(j) == 'X' )
{
igazolt++;
}
else if( hianyzasok[i].getHianyzas().charAt(j) == 'I')
{
igazolatlan++;
}
}
}
System.out.println("Az igazolt hianyzasok szama "
+ igazolt + ", az igazolatlanoke " + igazolatlan + " ora.");
System.out.println("5. feladat");
Scanner sc = new Scanner(System.in);
System.out.print("A honap sorszama=");
int honap = sc.nextInt();
System.out.print("A nap sorszama=");
int nap = sc.nextInt();
System.out.println("Az adott napon " + hetnapja(honap, nap) + " volt.");
System.out.println("6. feladat");
sc = new Scanner(System.in);
System.out.print("A nap neve=");
String napnev = sc.nextLine();
System.out.print("Az ora sorszama=");
int sorszam = sc.nextInt();
int hianyzasDb = 0;
for( int i = 0; i < hianyzasok.length; i++ )
{
if( hetnapja(hianyzasok[i].getHonap(), hianyzasok[i].getNap()).equals(napnev) )
{
if( hianyzasok[i].getHianyzas().charAt(sorszam - 1) == 'X'
|| hianyzasok[i].gethianyzas().charAt(sorszam - 1) == 'I' )
{
hianyzasDb++;
}
}
}
System.out.println("Ekkor osszesen " + hianyzasDb + " ora hianyzas tortent.");
System.out.println("7. feladat");
// kivalogatom az egyedi neveket
String[] nevek = new String[hianyzasok.length];
nevek[0] = hianyzasok[0].getNev();
int hely = 1;
for( int i = 1; i < hianyzasok.length; i++ )
{
boolean benne = false;
for( int j = 0; j < hely; j++ )
{
if( nevek[j].equals(hianyzasok[i].getNev()) )
{
benne = true;
break;
}
}
if( benne == false )
{
nevek[hely] = hianyzasok[i].getNev();
hely++;
}
}
// a hely valtozo azt is jelenti, hogy
// hany valodi nev van a nevek tombben
int[] diakHianyzas = new int[hely];
for( int i = 0; i < hianyzasok.length; i++ )
{
// megkeresem a hianyzashoz tartozo nevet a nevek tombben
// amikor megtalaltam, a diakhianyzas azonos helyere
// megszamolom az adott diak hianyzasat
for( int j = 0; j < hely; j++ )
{
if( nevek[j].equals(hianyzasok[i].getNev()) )
{
for( int k = 0; k < hianyzasok[i].getHianyzas().length(); k++ )
{
if( hianyzasok[i].getHianyzas().charAt(k) == 'X'
|| hianyzasok[i].getHianyzas().charAt(k) == 'I' )
{
diakHianyzas[j]++;
}
}
break;
}
}
}
for( int i = 0; i < diakHianyzas.length; i++ )
{
System.out.println(nevek[i] + " " + diakHianyzas[i]);
}
int max = 0;
for( int i = 1; i < hely; i++ )
{
if( diakHianyzas[i] > diakHianyzas[max] )
{
max = i;
}
}
System.out.print("A legtobbet hianyzo tanulok: ");
for( int i = 0; i < hely; i++ )
{
if( diakHianyzas[i] == diakHianyzas[max] )
{
System.out.print(nevek[i] + " ");
}
}
System.out.println();
}
// 4. feladat
public static String hetnapja(int honap, int nap)
{
String[] napev = {"vasarnap","hetfo","kedd","szerda"
,"csutortok","pentek","szombat"};
int[] napszam = {0,31,59,90,120,151,181,212,243,273,304,335};
int napsorszam = (napszam[honap-1] + nap) % 7;
return napev[napsorszam];
}
}
Ha hibát találsz benne, kérlek jelezd!
