A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás listával, és ahol lehet, foreach ciklusokkal dolgozik. Az adattároló osztályban néhány feladatot előkészítek, és a végső megoldásban ezeket használom. Az adattároló osztályban több új tulajdonságot is felveszek, az egyiket pedig az utolsó feladatban még módosítom is. A kiíratásokhoz is írtam egy metódust a vége felé.
Adattároló osztály:
/**
*
* @author https://webotlet.hu
*/
package webotlet_09okt_utepites_java_v2;
public class Jarmu
{
private int ora;
private int perc;
private int mperc;
private int utIdo;
private String honnan;
private String hova;
private int indulas;
private double sebesseg;
private int erkezes;
public Jarmu(String[] tomb)
{
ora = Integer.parseInt(tomb[0]);
perc = Integer.parseInt(tomb[1]);
mperc = Integer.parseInt(tomb[2]);
utIdo = Integer.parseInt(tomb[3]);
honnan = tomb[4];
if( honnan.equals("A"))
{
hova = "F";
}
else
{
hova = "A";
}
indulas = ora * 3600 + perc * 60 + mperc;
sebesseg = 1000.0 / utIdo;
erkezes = indulas + utIdo;
}
public int getOra()
{
return ora;
}
public int getPerc()
{
return perc;
}
public int getMperc()
{
return mperc;
}
public int getUtIdo()
{
return utIdo;
}
public String getHonnan()
{
return honnan;
}
public String getHova()
{
return hova;
}
public int getIndulas()
{
return indulas;
}
public double getSebesseg()
{
return sebesseg;
}
public int getErkezes()
{
return erkezes;
}
public void setErkezes(int erkezes)
{
this.erkezes = erkezes;
}
@Override
public String toString()
{
return "Jarmu{" + "ora=" + ora + ", perc="
+ perc + ", mperc=" + mperc + ", utIdo="
+ utIdo + ", honnan=" + honnan + ", hova="
+ hova + ", indulas=" + indulas + ", sebesseg="
+ sebesseg + ", erkezes=" + erkezes + '}';
}
public String leggyorsabbToString()
{
return ora + " " + perc + " " + mperc
+ " " + honnan + " " + String.format("%.1f", sebesseg);
}
public String autoAdat()
{
return ora + ":" + perc + ":" + mperc + " " + erkezes;
}
public String idoFormaz(int ido)
{
int ora;
int perc;
int mperc;
ora = ido / 3600;
ido = ido % 3600;
perc = ido / 60;
mperc = ido % 60;
return ora + ":" + perc + ":" + mperc;
}
}
A feladat megoldásai:
/**
*
* @author https://webotlet.hu
*/
package webotlet_09okt_utepites_java_v2;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Scanner;
public class Webotlet_09okt_utepites_java_v2
{
public static void main(String[] args)
{
ArrayList<Jarmu> jarmuvek = new ArrayList<>();
try
{
RandomAccessFile raf = new RandomAccessFile("forgalom.txt", "r");
String sor;
raf.readLine();
for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
{
jarmuvek.add(new Jarmu(sor.split(" ")));
}
raf.close();
}
catch( IOException e )
{
System.out.println("HIBA");
}
// for( int i = 0; i < jarmuvek.length; i++ )
// {
// System.out.println(jarmuvek[i].toString());
// }
// 2. feladat
System.out.println("2. feladat Adja meg a jarmu sorszamat!");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(jarmuvek.get(n - 1).getHova());
// 3. feladat
System.out.println("3. feladat");
// 1. verzió
// feltételezzük hogy van legalább 2 ilyen jármű!
int utolso = -1;
int utolsoElotti = -1;
for( int i = jarmuvek.size() - 1; i >= 0; i-- )
{
if( jarmuvek.get(i).getHova().equals("F"))
{
if( utolso == -1 )
{
utolso = i;
}
else if( utolsoElotti == -1 )
{
utolsoElotti = i;
break;
}
}
}
System.out.println(jarmuvek.get(utolso).getIndulas() - jarmuvek.get(utolsoElotti).getIndulas());
// 2. verzió
// feltételezzük hogy van legalább 2 ilyen jármű!
Jarmu jUtolso = null;
Jarmu jUtolsoE = null;
int idx = jarmuvek.size() - 1;
while( jUtolsoE == null )
{
if( jarmuvek.get(idx).getHova().equals("F") )
{
if( jUtolso == null )
{
jUtolso = jarmuvek.get(idx);
}
else
{
jUtolsoE = jarmuvek.get(idx);
}
}
idx--;
}
System.out.println(jUtolso.getIndulas() - jUtolsoE.getIndulas());
// 4. feladat
System.out.println("4. feladat");
int[] alsoOraDb = new int[24];
int[] felsoOraDb = new int[24];
for( Jarmu jarmu : jarmuvek)
{
if( jarmu.getHonnan().equals("A") )
{
alsoOraDb[jarmu.getOra()]++;
}
else
{
felsoOraDb[jarmu.getOra()]++;
}
}
for( int i = 0; i < alsoOraDb.length; i++ )
{
if( alsoOraDb[i] > 0 || felsoOraDb[i] > 0 )
{
System.out.println(i + " " + alsoOraDb[i] + " " + felsoOraDb[i]);
}
}
// 5. feladat
System.out.println("5. feladat");
// másolat az eredeti listáról, hogy annak a sorrendje ne változzon
ArrayList<Jarmu> masolat = new ArrayList<>(jarmuvek);
for( int i = 0; i < masolat.size() - 1; i++ )
{
for( int j = i + 1; j < masolat.size(); j++ )
{
if( masolat.get(i).getSebesseg() < masolat.get(j).getSebesseg() )
{
Jarmu csere = masolat.get(i);
masolat.set(i, masolat.get(j));
masolat.set(j, csere);
}
}
}
for( int i = 0; i < 10; i++ )
{
System.out.println(masolat.get(i).leggyorsabbToString() );
}
// 6. feladat
ArrayList<Jarmu> alsoba = new ArrayList<>();
for( Jarmu jarmu : jarmuvek)
{
if( jarmu.getHova().equals("A") )
{
alsoba.add(jarmu);
}
}
try
{
RandomAccessFile ki = new RandomAccessFile("also.txt","rw");
ki.setLength(0);
ki.writeBytes(alsoba.get(0).idoFormaz(alsoba.get(0).getErkezes()) + "\n");
for( int i = 1; i < alsoba.size(); i++ )
{
if( alsoba.get(i).getErkezes() < alsoba.get(i - 1).getErkezes() )
{
alsoba.get(i).setErkezes(alsoba.get(i - 1).getErkezes());
}
ki.writeBytes(alsoba.get(i).idoFormaz(alsoba.get(i).getErkezes()) + "\n");
}
}
catch( IOException e )
{
System.out.println("HIBA");
}
}
}
Ha hibát találsz benne, kérlek jelezd!
