Java programozás – 2009 októberi emelt informatika érettségi – útépítés (2. verzió)

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!

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .