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 már belül sok feladatot előkészítek, és a végső megoldásban csak ezeket használom.
Az első két feladat megoldását sokkal elegánsabban is meg lehetne írni statikus metódusokkal. A rengeteg if-else szerkezetet sokkal tömörebben és egyszerűbben is meg lehet oldani. Ezeket a 2. verzióban mutatom meg.
Adattároló osztály:
/** * * @author https://webotlet.hu */ package webotlet_06feb_szamla_java; public class Hivas { private int kOra; private int kPerc; private int kMperc; private int vOra; private int vPerc; private int vMperc; private String szam; private boolean mobil; private boolean csucs; private int hosszPercek; private double koltseg; public Hivas( String[] tomb, String szam ) { kOra = Integer.parseInt(tomb[0]); kPerc = Integer.parseInt(tomb[1]); kMperc = Integer.parseInt(tomb[2]); vOra = Integer.parseInt(tomb[3]); vPerc = Integer.parseInt(tomb[4]); vMperc = Integer.parseInt(tomb[5]); this.szam = szam; // mobilhivas vagy nem if( szam.startsWith( "39" ) || szam.startsWith( "41" ) || szam.startsWith( "71" ) ) { mobil = true; } else { mobil = false; } // csucsideju vagy nem if( kOra >= 7 && kOra < 18 ) { csucs = true; } else { csucs = false; } // a hivas hossza percekben int hosszMp = (vOra * 3600 + vPerc * 60 + vMperc) - (kOra * 3600 + kPerc * 60 + kMperc); hosszPercek = hosszMp / 60; if( hosszMp % 60 != 0 ) { hosszPercek++; } // hivaskoltsegek kiszamitasa if( csucs && mobil ) { koltseg = 69.175 * hosszPercek; } else if( csucs && !mobil ) { koltseg = 30 * hosszPercek; } // ez a ketto felesleges a feladat szempontjabol, // de inkabb ne maradjon ekkor sem ures a koltseg else if( !csucs && mobil ) { koltseg = 46.675 * hosszPercek; } else { koltseg = 15 * hosszPercek; } } public String getSzam() { return szam; } public boolean isMobil() { return mobil; } public boolean isCsucs() { return csucs; } public int getHosszPercek() { return hosszPercek; } public double getKoltseg() { return koltseg; } @Override public String toString() { return "Hivas{" + "kOra=" + kOra + ", kPerc=" + kPerc + ", kMperc=" + kMperc + ", vOra=" + vOra + ", vPerc=" + vPerc + ", vMperc=" + vMperc + ", szam=" + szam + ", mobil=" + mobil + ", csucs=" + csucs + ", hossz=" + hosszPercek + ", koltseg=" + koltseg + '}'; } }
A feladat megoldásai:
/** * * @author https://webotlet.hu */ package webotlet_06feb_szamla_java; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scanner; public class Webotlet_06feb_szamla_java { public static void main( String[] args ) { Hivas[] hivasok = null; // 1. feladat System.out.println( "1. feladat" ); Scanner sc = new Scanner(System.in); System.out.print( "Adj meg egy telefonszamot: " ); String szam = sc.nextLine(); if( szam.startsWith( "39" ) || szam.startsWith( "41" ) || szam.startsWith( "71" ) ) { System.out.println( "A telefonszam mobil." ); } else { System.out.println( "A telefonszam NEM mobil." ); } // 2. feladat System.out.println( "2. feladat" ); System.out.println( "Add meg egy hivas kezdesi es befejezesi "+ "idopontjat" ); System.out.print("ora: "); int kOra = sc.nextInt(); System.out.print("perc: "); int kPerc = sc.nextInt(); System.out.print("mp: "); int kMperc = sc.nextInt(); System.out.print("ora: "); int vOra = sc.nextInt(); System.out.print("perc: "); int vPerc = sc.nextInt(); System.out.print("mp: "); int vMperc = sc.nextInt(); int hossz = vOra * 3600 + vPerc * 60 + vMperc - kOra * 3600 + kPerc * 60 + kMperc; int percek = hossz / 60; if( hossz % 60 != 0 ) { percek++; } System.out.println( "A hivas hossza percben: "+percek ); try { // 3. feladat int db; String sor; RandomAccessFile raf = new RandomAccessFile("hivasok.txt","r"); db = 0; for( sor = raf.readLine(); sor != null; sor = raf.readLine() ) { db++; } hivasok = new Hivas[db/2]; raf.seek(0); int hely = 0; for( sor = raf.readLine(); sor != null; sor = raf.readLine() ) { hivasok[hely] = new Hivas( sor.split(" "), raf.readLine() ); hely++; } raf.close(); RandomAccessFile ki = new RandomAccessFile("percek.txt","rw"); ki.setLength(0); for( int i = 0; i < hivasok.length; i++ ) { ki.writeBytes( hivasok[i].getHosszPercek()+" "+hivasok[i].getSzam()+"\n" ); } ki.close(); } catch( IOException e ) { System.err.println( "HIBA" ); } // 4. feladat System.out.println( "4. feladat" ); int csucsdb = 0; for( int i = 0; i < hivasok.length; i++ ) { if( hivasok[i].isCsucs() ) { csucsdb++; } } System.out.println( "Csucsidobeli hivas: "+csucsdb+" db" ); System.out.println( "Csucsidon kivuli hivas: "+(hivasok.length-csucsdb)+" db" ); // 5. feladat System.out.println( "5. feladat" ); int vezperc = 0; int mobilperc = 0; for( int i = 0; i < hivasok.length; i++ ) { if( hivasok[i].isMobil() ) { mobilperc += hivasok[i].getHosszPercek(); } else { vezperc += hivasok[i].getHosszPercek(); } } System.out.println( "Mobil percek: "+mobilperc+" perc" ); System.out.println( "Vezetekes percek: "+vezperc+" perc" ); // 6. feladat System.out.println( "6. feladat" ); double cskoltseg = 0; for( int i = 0; i < hivasok.length; i++ ) { if( hivasok[i].isCsucs() ) { cskoltseg += hivasok[i].getKoltseg(); } } System.out.println( "A csucsidos hivasok koltsege: "+cskoltseg ); } }
Ha hibát találsz benne, kérlek jelezd!