Java programozás – 2006 októberi emelt informatika érettségi programozási feladatának megoldása (2. verzió)

A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ezzel a feladattal viszont több bajom van, amiket az 1. verzió megoldásánál leírtam. Ez a megoldás listával dolgozik, sok helyen foreach ciklust használok, és egy helyen bemutatok egy switch utasítást működés közben.

Adattároló osztály:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_06okt_zenei_adok_java_v2;

public class Zene
{
  private int radio;
  private int perc;
  private int mperc;
  private String azonosito;
  private String eloado;
  private String cim;
  
  
  private int hosszMp;
  private int kezd;
  private int vege;
  
  public Zene( String[] tomb )
  {
    radio = Integer.parseInt(tomb[0]);
    perc = Integer.parseInt(tomb[1]);
    mperc = Integer.parseInt(tomb[2]);
    azonosito = tomb[3];
    String[] tmp = azonosito.split(":");
    eloado = tmp[0];
    cim = tmp[1];
    
    hosszMp = perc * 60 + mperc;
  }

  public int getRadio()
  {
    return radio;
  }

  public int getPerc()
  {
    return perc;
  }

  public int getMperc()
  {
    return mperc;
  }

  public String getAzonosito()
  {
    return azonosito;
  }
  
  public String getEloado()
  {
    return eloado;
  }

  public String getCim()
  {
    return cim;
  }

  public int getHosszMp()
  {
    return hosszMp;
  }

  public int getKezd()
  {
    return kezd;
  }

  public int getVege()
  {
    return vege;
  }
  
  public void setKezd(int kezd)
  {
    this.kezd = kezd;
    this.vege = kezd + hosszMp;
  }

  @Override
  public String toString()
  {
    return "Zene{" + "radio=" + radio + ", perc=" + perc
      + ", mperc=" + mperc + ", azonosito=" + azonosito + ", eloado="
      + eloado + ", cim=" + cim + ", hosszMp=" + hosszMp
      + ", kezd=" + kezd + ", vege=" + vege + '}';
  }
}

A feladat megoldása:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_06okt_zenei_adok_java_v2;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Scanner;

public class Webotlet_06okt_zenei_adok_java_v2
{
  public static void main(String[] args)
  {
    // 1. feladat
    ArrayList<Zene> zenek = new ArrayList<>();
    
    try
    {
      RandomAccessFile raf = new RandomAccessFile("musor.txt", "r");
      raf.readLine();
      String sor;
      
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        zenek.add(new Zene(sor.split(" ", 4)));
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }

    
    // 2. feladat
    System.out.println("2. feladat");
    
    int[] dbRadiok = new int[4];
    
    for( Zene zene : zenek)
    {
      dbRadiok[zene.getRadio()]++;
    }
        
    for( int i = 1; i < dbRadiok.length; i++ )
    {
      System.out.println(i + ". radio: " + dbRadiok[i]);
    }
    
    // 3. feladat
    System.out.println("3. feladat");
    
    int elsoEric = 0;
    int utolsoEric = 0;
    
    for( int i = 0; i < zenek.size(); i++ )
    {
      if( zenek.get(i).getRadio() == 1 && zenek.get(i).getEloado().equals("Eric Clapton"))
      {
        elsoEric = i;
        break;
      }
    }

    for( int i = zenek.size() - 1; i >= 0; i-- )
    {
      if( zenek.get(i).getRadio() == 1 && zenek.get(i).getEloado().equals("Eric Clapton"))
      {
        utolsoEric = i;
        break;
      }
    }
    
    int ido = 0;
    
    for( int i = elsoEric; i <= utolsoEric; i++ )
    {
      if( zenek.get(i).getRadio() == 1 )
      {
        ido += zenek.get(i).getHosszMp();
      }
    }

    System.out.println(idoFormaz(ido));
    
    // 4. feladat
    System.out.println("4. feladat");
    
    int radio1 = 0;
    int radio2 = 0;
    int radio3 = 0;
    
    for( Zene zene : zenek)
    {
      switch( zene.getRadio() )
      {
        case 1:
          zene.setKezd(radio1);
          radio1 += zene.getHosszMp();
          break;
        case 2:
          zene.setKezd(radio2);
          radio2 += zene.getHosszMp();
          break;
        default:
          zene.setKezd(radio3);
          radio3 += zene.getHosszMp();
          break;
      }
    }
    
    Zene omega = null;

    for( Zene zene : zenek)
    {
      if( zene.getAzonosito().equals("Omega:Legenda") )
      {
        omega = zene;
        break;
      }
    }
    
    System.out.println("Az Omega:Legenda zene a "
      + omega.getRadio() + ". radion szolt.");
    
    for( Zene zene : zenek)
    {
      if( zene.getRadio() != omega.getRadio() )
      {
        if( omega.getKezd() >= zene.getKezd()
          && omega.getKezd() <= zene.getVege() )
        {
          System.out.println(zene.getRadio() + ": " 
            + zene.getEloado() + "-" + zene.getCim());
        }
      }
    }
    
    // 5. feladat
    System.out.println("5. feladat");
    
    Scanner sc = new Scanner(System.in);
    System.out.println("Add meg a felismert karaktereket!");
    String mintasor = sc.nextLine().toLowerCase();
    
    char[] minta = mintasor.toCharArray();
    try
    {
      RandomAccessFile ki =new RandomAccessFile("keres.txt", "rw");
      ki.setLength(0);
      ki.writeBytes(mintasor + "\n");
      
      for( Zene zene : zenek)
      {
        String dal = zene.getAzonosito().toLowerCase();
        int talalt = 0;
        for( int j = 0; j < dal.length(); j++ )
        {
          if( talalt < minta.length && dal.charAt(j) == minta[talalt])
          {
            talalt++;
          }
        }
        
        if( talalt == minta.length )
        {
          ki.writeBytes(zene.getAzonosito()+"\n");
        }
      }
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }

    // 6. feladat
    System.out.println("6. feladat");
    int musorido = 0;
    
    for( Zene zene : zenek)
    {
      if( zene.getRadio() == 1 )
      {
        if( 3600 - (musorido % 3600) < (60 + zene.getHosszMp()) )
        {
          musorido += 3600 - (musorido % 3600);
          musorido += 180;
        }
        musorido += 60 + zene.getHosszMp();
      }
    }
    
    System.out.println(idoFormaz(musorido));
  }
  
  public static String idoFormaz(int hossz)
  {
    int ora;
    int perc;
    int mperc;
    
    ora = hossz / 3600;
    hossz = hossz % 3600;
    perc = hossz / 60;
    mperc = hossz % 60;
    return ora + ":" + perc + ":" + mperc;
  }
}

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 .