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!
