A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. A megoldást listával dolgozik, a 7-es feladatnál pedig már egy kis HashMap mágia van. Az adattároló osztályt is bővítettem, a hiányzások számát már közvetlenül ott kiszámoltam, úgyis szükség lesz rá a 7-es feladatban.
Adattároló osztály:
/** * * @author https://webotlet.hu */ package webotlet_17okt_hianyzasok_v3; public class Hianyzo { private String nev; private int honap; private int nap; private String hianyzas; private int hianyzasDb; 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]; for( int i = 0; i < hianyzas.length(); i++ ) { if( hianyzas.charAt(i) == 'X' || hianyzas.charAt(i) == 'I' ) { hianyzasDb++; } } } public String getNev() { return nev; } public int getHonap() { return honap; } public int getNap() { return nap; } public String getHianyzas() { return hianyzas; } public int getHianyzasDb() { return hianyzasDb; } @Override public String toString() { return "Hianyzo{" + "nev=" + nev + ", honap=" + honap + ", nap=" + nap + ", hianyzas=" + hianyzas + ", hianyzasDb=" + hianyzasDb + '}'; } }
A feladat megoldásai:
/** * * @author https://webotlet.hu */ package webotlet_17okt_hianyzasok_v3; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Webotlet_17okt_hianyzasok_v3 { public static void main(String[] args) { ArrayList<Hianyzo> hianyzasok = new ArrayList<>(); try { RandomAccessFile raf = new RandomAccessFile("naplo.txt", "r"); String sor; String datum = ""; for( sor = raf.readLine();sor != null; sor = raf.readLine() ) { if( sor.charAt(0) == '#' ) { datum = sor; } else { hianyzasok.add(new Hianyzo(sor.split(" "), datum)); } } 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.size() + " bejegyzes van."); System.out.println("3. feladat"); int igazolt = 0; int igazolatlan = 0; for( Hianyzo hianyzo : hianyzasok) { for( int j = 0; j < 7; j++ ) { if( hianyzo.getHianyzas().charAt(j) == 'X' ) { igazolt++; } else if( hianyzo.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( Hianyzo hianyzo : hianyzasok) { if( hetnapja(hianyzo.getHonap(), hianyzo.getNap()).equals(napnev) ) { if( hianyzo.getHianyzas().charAt(sorszam - 1) == 'X' || hianyzo.getHianyzas().charAt(sorszam - 1) == 'I' ) { hianyzasDb++; } } } System.out.println("Ekkor osszesen " + hianyzasDb + " ora hianyzas tortent."); System.out.println("7. feladat"); HashMap<String, Integer> diakHianyzas = new HashMap<>(); int max = 0; for( Hianyzo hianyzo : hianyzasok) { int hianyzas = hianyzo.getHianyzasDb(); if( diakHianyzas.containsKey(hianyzo.getNev()) ) { hianyzas += diakHianyzas.get(hianyzo.getNev()); } diakHianyzas.put(hianyzo.getNev(), hianyzas); if( hianyzas > max ) { max = hianyzas; } } System.out.print("A legtobbet hianyzo tanulok: "); for( Map.Entry<String, Integer> entry : diakHianyzas.entrySet()) { if( entry.getValue() == max ) { System.out.print(entry.getKey() + " "); } } 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!
Szia! Szeretnék kérni egy kis magyarázatot a 6. feladatrészhez. Hogyan nyerünk ki adatokat a következő kódrészlet segítségével? Nem értem.
for( Hianyzo hianyzo : hianyzasok)
{
if( hetnapja(hianyzo.getHonap(), hianyzo.getNap()).equals(napnev) )
A hetnapja metódus egy adott hónap és nap sorszáma alapján visszaadja, hogy az a hét melyik napjára esik (hetfo, kedd, stb).
A 6-os feladatban be kell kérni egy nap nevét (pl hetfo). Ez a rész azt vizsgálja, hogy az éppen vizsgált hiányzás hónap és nap szerint a hétnek a bekért napjára esik-e. Ha ez igaz, akkor az a hiányzás azon a napon lett rögzítve, amit a felhasználótól beolvastunk.
Köszönöm szépen. Feltölthetem ide a saját verziómat és az alapján megnézni, hogy mit rontok el a 6. pontban?
Hogyne, tedd fel, megnézem.