Java programozás – 2013 májusi 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. Ez a megoldás listával dolgozik, használok benne HashSet-et, foreach ciklust (ahol lehet), és OO szemléletből kicsit több található benne.

Adattároló osztály:

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

public class Jelolt
{
  private int kerulet;
  private int szavazatok;
  private String nev;
  private String part;
  
  public Jelolt( String[] tomb )
  {
    kerulet = Integer.parseInt(tomb[0]);
    szavazatok = Integer.parseInt(tomb[1]);
    nev = tomb[2] + " " + tomb[3];
    part = tomb[4];
    if( part.equals("-"))
    {
      part = "fuggetlen";
    }
  }

  public int getKerulet()
  {
    return kerulet;
  }

  public int getSzavazatok()
  {
    return szavazatok;
  }

  public String getNev()
  {
    return nev;
  }

  public String getPart()
  {
    return part;
  }

  @Override
  public String toString()
  {
    return "Jelolt{" + "kerulet=" + kerulet 
      + ", szavazatok=" + szavazatok + ", nev="
      + nev + ", part=" + part + '}';
  }
}

Párt osztály (egy konkrét feladathoz):

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

import java.util.ArrayList;

public class Part
{
  private String nev;
  private String rovid;
  private ArrayList<Jelolt> jeloltek;
  private int osszSzavazat;
  
  public Part( String nev, String rovid )
  {
    this.nev = nev;
    this.rovid = rovid;
    jeloltek = new ArrayList<>();
    osszSzavazat = 0;
  }

  public String getNev()
  {
    return nev;
  }

  public String getRovid()
  {
    return rovid;
  }

  public ArrayList<Jelolt> getJeloltek()
  {
    return jeloltek;
  }

  public int getOsszSzavazat()
  {
    return osszSzavazat;
  }

  @Override
  public String toString()
  {
    return "Part{" + "nev=" + nev + ", rovid="
      + rovid + ", jeloltek=" + jeloltek + '}';
  }

  public void addJelolt(Jelolt jelolt)
  {
    jeloltek.add(jelolt);
    osszSzavazat += jelolt.getSzavazatok();
  }
}

A feladat megoldásai:

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

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

public class webotlet_13maj_valasztasok_v2
{
  public static void main(String[] args)
  {
    System.out.println("1. feladat");
    ArrayList<Jelolt> jeloltek = new ArrayList<>();
    
    try
    {
      RandomAccessFile raf = new RandomAccessFile("szavazatok.txt","r");
      String sor;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        jeloltek.add(new Jelolt(sor.split(" ")));
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < jeloltek.length; i++ )
//    {
//      System.out.println(jeloltek[i].toString());
//    }
    System.out.println("2. feladat");
    System.out.println("A helyhatosagi valasztason " 
      + jeloltek.size() + " kepviselojelolt indult.");
    
    System.out.println("3. feladat");
    Scanner sc = new Scanner(System.in);
    System.out.println("Adja meg egy jelolt nevet:");
    String nev = sc.nextLine();
    boolean vanNev = false;
    
    for( Jelolt jelolt : jeloltek )
    {
      if( jelolt.getNev().equals(nev))
      {
        System.out.println("A jelolt " 
          + jelolt.getSzavazatok() + " szavazatot kapott.");
        vanNev = true;
        break;
      }
    }
    if( !vanNev )
    {
      System.out.println("Ilyen nevu kepviselojelolt "
        + "nem szerepel a nyilvantartasban!");
    }
        
    System.out.println("4. feladat");
    int osszSzavazat = 0;
    for( Jelolt jelolt : jeloltek)
    {
      osszSzavazat += jelolt.getSzavazatok();
    }
    
    double szazalek = (osszSzavazat / (double)12345) * 100;
    System.out.println(String.format("A valasztason %d "
      + "allampolgar, a jogosultak %.2f%%-a vett reszt.",
      osszSzavazat, szazalek));
    
    
    System.out.println("5. feladat");
    // GYEP, HEP, TISZ, ZEP, fuggetlen
    HashMap<String, Part> partok = new HashMap<>();
    
    partok.put( "GYEP", new Part("Gyumolcsevok Partja","GYEP"));
    partok.put( "HEP", new Part("Husevok Partja","HEP"));
    partok.put( "TISZ", new Part("Tejivok Partja","TISZ"));
    partok.put( "ZEP", new Part("Zoldsegevok Partja","ZEP"));
    partok.put( "fuggetlen", new Part("Fuggetlen jeloltek","fuggetlen"));
    
    for( Jelolt jelolt : jeloltek)
    {
      partok.get(jelolt.getPart()).addJelolt(jelolt);
    }
    
    for( Part part : partok.values())
    {
      szazalek = (part.getOsszSzavazat() / (double)osszSzavazat) * 100;
      System.out.println(String.format("%s= %.2f%%", part.getNev(), szazalek));
    }
    
    System.out.println("6. feladat");
    
    int maxSzavazat = jeloltek.get(0).getSzavazatok();
    for( Jelolt jelolt : jeloltek)
    {
      if( jelolt.getSzavazatok() > maxSzavazat )
      {
        maxSzavazat = jelolt.getSzavazatok();
      }
    }

    for( Jelolt jelolt : jeloltek)
    {
      if( jelolt.getSzavazatok() == maxSzavazat )
      {
        System.out.println( jelolt.getNev() + " " + jelolt.getPart());
      }
    }

// 7. feladat
    Jelolt[] nyertesek = new Jelolt[9];
    
    for( Jelolt jelolt : jeloltek)
    {
      if( nyertesek[ jelolt.getKerulet() ] == null ||
          nyertesek[ jelolt.getKerulet() ].getSzavazatok() <
        jelolt.getSzavazatok() )
      {
        nyertesek[ jelolt.getKerulet() ] = jelolt;
      }
    }

    try
    {
      RandomAccessFile out = new RandomAccessFile("kepviselok.txt", "rw");
// ha esetleg többször hoznánk létre a fájlt,
// töröljük az előző tartalmát
      out.setLength(0);
      for( int i = 1; i < nyertesek.length; i++ )
      {
        out.writeBytes(i + " " + nyertesek[i].getNev() + " "
          + nyertesek[i].getPart() + "\n");
      }
      out.close();
    }
    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 .