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. 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;
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;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
public class Webotlet_09okt_utepites_java
{
public static void main(String[] args)
{
Jarmu[] jarmuvek = null;
try
{
RandomAccessFile raf = new RandomAccessFile("forgalom.txt", "r");
jarmuvek = new Jarmu[Integer.parseInt(raf.readLine())];
String sor;
int hely = 0;
for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
{
jarmuvek[hely] = new Jarmu(sor.split(" "));
hely++;
}
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[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.length - 1; i >= 0; i-- )
{
if( jarmuvek[i].getHova().equals("F"))
{
if( utolso == -1 )
{
utolso = i;
}
else if( utolsoElotti == -1 )
{
utolsoElotti = i;
break;
}
}
}
System.out.println(jarmuvek[utolso].getIndulas()
- jarmuvek[utolsoElotti].getIndulas());
// 2. verzió
// feltételezzük hogy van legalább 2 ilyen jármű!
Jarmu jUtolso = null;
Jarmu jUtolsoE = null;
int idx = jarmuvek.length - 1;
while( jUtolsoE == null )
{
if( jarmuvek[idx].getHova().equals("F") )
{
if( jUtolso == null )
{
jUtolso = jarmuvek[idx];
}
else
{
jUtolsoE = jarmuvek[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( int i = 0; i < jarmuvek.length; i++ )
{
if( jarmuvek[i].getHonnan().equals("A") )
{
alsoOraDb[jarmuvek[i].getOra()]++;
}
else
{
felsoOraDb[jarmuvek[i].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 tömbről, hogy annak a sorrendje ne változzon
Jarmu[] masolat = new Jarmu[jarmuvek.length];
for( int i = 0; i < jarmuvek.length; i++ )
{
masolat[i] = jarmuvek[i];
}
for( int i = 0; i < masolat.length - 1; i++ )
{
for( int j = i + 1; j < masolat.length; j++ )
{
if( masolat[i].getSebesseg() < masolat[j].getSebesseg() )
{
Jarmu csere = masolat[i];
masolat[i] = masolat[j];
masolat[j] = csere;
}
}
}
for( int i = 0; i < 10; i++ )
{
System.out.println(masolat[i].leggyorsabbToString() );
}
// 6. feladat
int alsoDb = 0;
for( int i = 0; i < jarmuvek.length; i++ )
{
if( jarmuvek[i].getHova().equals("A") )
{
alsoDb++;
}
}
Jarmu[] alsoba = new Jarmu[alsoDb];
int hely = 0;
for( int i = 0; i < jarmuvek.length; i++ )
{
if( jarmuvek[i].getHova().equals("A") )
{
alsoba[hely] = jarmuvek[i];
hely++;
}
}
try
{
RandomAccessFile ki = new RandomAccessFile("also.txt","rw");
ki.setLength(0);
ki.writeBytes(alsoba[0].idoFormaz(alsoba[0].getErkezes()) + "\n");
for( int i = 1; i < alsoba.length; i++ )
{
if( alsoba[i].getErkezes() < alsoba[i - 1].getErkezes() )
{
alsoba[i].setErkezes(alsoba[i - 1].getErkezes());
}
ki.writeBytes(alsoba[i].idoFormaz(alsoba[i].getErkezes()) + "\n");
}
}
catch( IOException e )
{
System.out.println("HIBA");
}
}
}
Ha hibát találsz benne, kérlek jelezd!
