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!