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!
