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!