A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás listával dolgozik. Most idő hiányában nem szedtem szét két változatra a megoldásom, bizonyos feladatrészeket 2 módon is megoldottam.
Adattároló osztály:
/** * * @author https://webotlet.hu */ package webotlet_17majma_furdo; public class Mozgas { int azon; int honnan; int irany; int ora; int perc; int mperc; String ido; int masodpercek; public Mozgas(String[] tomb) { azon = Integer.parseInt(tomb[0]); honnan = Integer.parseInt(tomb[1]); irany = Integer.parseInt(tomb[2]); ora = Integer.parseInt(tomb[3]); perc = Integer.parseInt(tomb[4]); mperc = Integer.parseInt(tomb[5]); ido = String.format("%d:%d:%d", ora, perc, mperc); masodpercek = ora * 3600 + perc * 60 + mperc; } @Override public String toString() { return "Mozgas{" + "azon=" + azon + ", honnan=" + honnan + ", irany=" + irany + ", ora=" + ora + ", perc=" + perc + ", mperc=" + mperc + ", ido=" + ido + ", masodpercek=" + masodpercek + '}'; } public boolean oltozobolKi() { return honnan == 0 && irany == 1; } public boolean oltozobeBe() { return honnan == 0 && irany == 0; } public boolean szaunabaBe() { return honnan == 2 && irany == 0; } public boolean szaunabolKi() { return honnan == 2 && irany == 1; } }
A feladat megoldása:
/** * * @author https://webotlet.hu */ package webotlet_17majma_furdo; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; public class Webotlet_17majma_furdo; { public static void main(String[] args) { ArrayList<Mozgas> mozgasok = new ArrayList<>(); try { RandomAccessFile raf = new RandomAccessFile("furdoadat.txt", "r"); String sor; for (sor = raf.readLine(); sor != null; sor = raf.readLine()) { mozgasok.add(new Mozgas(sor.split(" "))); } raf.close(); } catch (IOException e) { System.out.println("HIBA"); } // for (int i = 0; i < mozgasok.size(); i++) // { // System.out.println(mozgasok.get(i).toString()); // } System.out.println("2. feladat"); System.out.format("Az elso vendeg %s-kor lepett ki az oltozobol.%n", mozgasok.get(0).ido); for (int i = mozgasok.size() - 1; i >= 0; i--) { if (mozgasok.get(i).honnan == 0 && mozgasok.get(i).irany == 1) { System.out.format("Az utolso vendeg %s-kor lepett ki az " + "oltozobol.%n", mozgasok.get(i).ido); break; } } // 2. megoldas int utolso = -1; for (int i = 0; i < mozgasok.size(); i++) { if (mozgasok.get(i).honnan == 0 && mozgasok.get(i).irany == 1) { utolso = i; } } System.out.format("Az utolso vendeg %s-kor lepett ki az oltozobol.%n", mozgasok.get(utolso).ido); System.out.println("3. feladat"); // 1. változat listával ArrayList<Integer> azonositok = new ArrayList<>(); for (int i = 0; i < mozgasok.size(); i++) { if (!azonositok.contains(mozgasok.get(i).azon)) { azonositok.add(mozgasok.get(i).azon); } } int[] azonositokDb = new int[azonositok.size()]; for (int i = 0; i < mozgasok.size(); i++) { azonositokDb[azonositok.indexOf(mozgasok.get(i).azon)]++; } int db4 = 0; for (int i = 0; i < azonositokDb.length; i++) { if (azonositokDb[i] == 4) { db4++; } } System.out.format("A furdoben %d vendeg jart csak egy reszlegben%n", db4); // 2. változat HashMap-pel System.out.println("-----"); System.out.println("2. valtozat"); HashMap<Integer, Integer> eredmenyekDb = new HashMap<>(); for (int i = 0; i < mozgasok.size(); i++) { if (eredmenyekDb.containsKey(mozgasok.get(i).azon)) { eredmenyekDb.put(mozgasok.get(i).azon, eredmenyekDb.get(mozgasok.get(i).azon) + 1); } else { eredmenyekDb.put(mozgasok.get(i).azon, 1); } } int vendeg4 = 0; for (Integer key : eredmenyekDb.keySet()) { if (eredmenyekDb.get(key) == 4) { vendeg4++; } } System.out.format("A furdoben %d vendeg jart csak egy reszlegben%n", vendeg4); System.out.println("4. feladat"); int maxHossz = 0; int maxVendeg = -1; for (int i = 0; i < mozgasok.size() - 1; i++) { for (int j = i + 1; j < mozgasok.size(); j++) { if (mozgasok.get(i).oltozobolKi() && mozgasok.get(j).oltozobeBe()) { int hossz = mozgasok.get(j).masodpercek - mozgasok.get(i).masodpercek; if (hossz > maxHossz) { maxHossz = hossz; maxVendeg = mozgasok.get(i).azon; } break; } } } System.out.println("A legtobb idot eltolto vendeg:"); System.out.format("%d. vendeg %s%n", maxVendeg, idoformatum(maxHossz)); int erkezes = 0; for (int i = 0; i < mozgasok.size() - 1; i++) { if (mozgasok.get(i).oltozobolKi()) { // kiszámolom az i. és erkezes. időkülönbség // összehasonlítom a max-szal erkezes = i + 1; } } System.out.println("5. feladat"); int db6 = 0; int db9 = 0; int db16 = 0; for (int i = 0; i < mozgasok.size(); i++) { if (mozgasok.get(i).oltozobolKi()) { if (mozgasok.get(i).ora < 9) { db6++; } else if (mozgasok.get(i).ora < 16) { db9++; } else { db16++; } } } System.out.println("6-9 ora kozott " + db6 + " vendeg"); System.out.println("9-16 ora kozott " + db9 + " vendeg"); System.out.println("16-20 ora kozott " + db16 + " vendeg"); System.out.println("6. feladat"); // 1. változat, többszörös megszámlálás listával int[] szaunaIdok = new int[azonositok.size()]; for (int i = 0; i < mozgasok.size() - 1; i++) { for (int j = i + 1; j < mozgasok.size(); j++) { if (mozgasok.get(i).szaunabaBe() && mozgasok.get(j).szaunabolKi()) { int hossz = mozgasok.get(j).masodpercek - mozgasok.get(i).masodpercek; szaunaIdok[azonositok.indexOf(mozgasok.get(i).azon)] += hossz; break; } } } try { RandomAccessFile ki = new RandomAccessFile("szauna.txt", "rw"); ki.setLength(0); for (int i = 0; i < azonositok.size(); i++) { if (szaunaIdok[i] > 0) { ki.writeBytes(azonositok.get(i) + " " + szaunaIdok[i] + "\n"); } } ki.close(); } catch (IOException e) { System.out.println("HIBA"); } System.out.println("7. feladat"); // 1. változat listával ArrayList<Integer> uszoda = new ArrayList<>(); ArrayList<Integer> szauna = new ArrayList<>(); ArrayList<Integer> gyogyviz = new ArrayList<>(); ArrayList<Integer> strand = new ArrayList<>(); for (int i = 0; i < mozgasok.size(); i++) { if (mozgasok.get(i).honnan == 1 && mozgasok.get(i).irany == 0) { if (!uszoda.contains(mozgasok.get(i).azon)) { uszoda.add(mozgasok.get(i).azon); } } else if (mozgasok.get(i).honnan == 2 && mozgasok.get(i).irany == 0) { if (!szauna.contains(mozgasok.get(i).azon)) { szauna.add(mozgasok.get(i).azon); } } else if (mozgasok.get(i).honnan == 3 && mozgasok.get(i).irany == 0) { if (!gyogyviz.contains(mozgasok.get(i).azon)) { gyogyviz.add(mozgasok.get(i).azon); } } else if (mozgasok.get(i).honnan == 4 && mozgasok.get(i).irany == 0) { if (!strand.contains(mozgasok.get(i).azon)) { strand.add(mozgasok.get(i).azon); } } } System.out.println("Uszoda: " + uszoda.size()); System.out.println("Szaunak: " + szauna.size()); System.out.println("Gyogyvizes medencek: " + gyogyviz.size()); System.out.println("Strand: " + strand.size()); // 2. változat HashSet-tel System.out.println("-----"); System.out.println("2. valtozat"); HashSet<Integer> usz = new HashSet<>(); HashSet<Integer> sza = new HashSet<>(); HashSet<Integer> gyo = new HashSet<>(); HashSet<Integer> str = new HashSet<>(); for (int i = 0; i < mozgasok.size(); i++) { if (mozgasok.get(i).honnan == 1 && mozgasok.get(i).irany == 0) { usz.add(mozgasok.get(i).azon); } else if (mozgasok.get(i).honnan == 2 && mozgasok.get(i).irany == 0) { sza.add(mozgasok.get(i).azon); } else if (mozgasok.get(i).honnan == 3 && mozgasok.get(i).irany == 0) { gyo.add(mozgasok.get(i).azon); } else if (mozgasok.get(i).honnan == 4 && mozgasok.get(i).irany == 0) { str.add(mozgasok.get(i).azon); } } System.out.println("Uszoda: " + usz.size()); System.out.println("Szaunak: " + sza.size()); System.out.println("Gyogyvizes medencek: " + gyo.size()); System.out.println("Strand: " + str.size()); } public static String idoformatum(int mp) { int ora; int perc; ora = mp / 3600; mp = mp % 3600; perc = mp / 60; mp = mp % 60; return ora + ":" + perc + ":" + mp; } }
Ha hibát találsz benne, kérlek jelezd!