Java programozás – 2010 októberi emelt informatika érettségi – anagramma (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. Foreach ciklusokat is használok benne, és tettem egy statikus metódust az adattároló osztályba.

Adattároló osztály:

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

public class Szo
{
  private String szo;
  private String abc;
  
  public Szo(String szo)
  {
    this.szo = szo;
    
    abc = rendezett(szo);
  }

  public String getAbc()
  {
    return abc;
  }

  public String getSzo()
  {
    return szo;
  }

  @Override
  public String toString()
  {
    return "Szo{" + "szo=" + szo + ", abc=" + abc + '}';
  }
  
    // egy tetszoleges szo betuinek abc rendezese
  public static String rendezett( String szo )
  {
    char[] tomb = szo.toCharArray();
    for( int i = 0; i < tomb.length - 1; i++ )
    {
      for( int j = i + 1; j < tomb.length; j++ )
      {
        if(tomb[i] > tomb[j])
        {
          char csere = tomb[i];
          tomb[i] = tomb[j];
          tomb[j] = csere;
        }
      }
    }
    return new String(tomb);
  }
}

A feladat megoldásai:

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

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

public class Webotlet_10okt_anagram_v2
{

  public static void main(String[] args)
  {
    
    System.out.println("1. feladat");
    System.out.println("Adja meg a szoveget:");
    Scanner sc = new Scanner(System.in);
    String szo = sc.nextLine();
    
    char[] betuk = szo.toCharArray();
    
    int[] betukDb = new int[((int)'z') + 1];
    
    for( int i = 0; i < betuk.length; i++)
    {
      betukDb[ (int)betuk[i] ]++;
    }
    
    for( int i = 0; i < betukDb.length; i++ )
    {
      if(betukDb[i] > 0)
      {
        System.out.println(betukDb[i] + " " + (char)i);
      }
    }
    
    RandomAccessFile raf;
    String sor;
    ArrayList<Szo> szavak = new ArrayList<>();
    
    try
    {
      raf = new RandomAccessFile("szotar.txt", "r");
      for(sor = raf.readLine(); sor != null; sor = raf.readLine())
      {
        szavak.add(new Szo(sor));
      }
      raf.close();
    }
    catch(IOException e)
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < szavak.length; i++ )
//    {
//      System.out.println(szavak[i].toString());
//    }
    
    try
    {
      RandomAccessFile ki = new RandomAccessFile("abc.txt", "rw");
      ki.setLength(0);
      
      for( int i = 0; i < szavak.size(); i++ )
      {
        ki.writeBytes(szavak.get(i).getAbc() + "\n");
      }
      ki.close();
    }
    catch(IOException e)
    {
      System.out.println("HIBA");
    }
    
    System.out.println("4. feladat");
    
    String szo1;
    String szo2;
    System.out.print("1. szo: ");
    szo1 = sc.nextLine();
    System.out.print("2. szo: ");
    szo2 = sc.nextLine();
    
    if( Szo.rendezett(szo1).equals(Szo.rendezett(szo2 )) )
    {
      System.out.println("Anagramma");
    }
    else
    {
      System.out.println("Nem anagramma");
    }

    System.out.println("5. feladat Adj meg egy szot!");
      
    Scanner sc2 = new Scanner(System.in);
    String feladat5 = sc2.nextLine();
    
    feladat5 = Szo.rendezett(feladat5);
     
    for( int i = 0; i < szavak.size(); i++ )
    {
      if( szavak.get(i).getAbc().equals(feladat5) )
      {
        System.out.println(szavak.get(i).getSzo());
      }
    }
    
    System.out.println("6. feladat");
    int maxhossz = szavak.get(0).getSzo().length();
    for( int i = 0; i < szavak.size(); i++ )
    {
      if( szavak.get(i).getSzo().length() > maxhossz )
      {
        maxhossz = szavak.get(i).getSzo().length();
      }
    }
    
    ArrayList<Szo> leghosszabb = new ArrayList<>();
    for( int i = 0; i < szavak.size(); i++ )
    {
      if( szavak.get(i).getSzo().length() == maxhossz )
      {
        leghosszabb.add(szavak.get(i));
      }
    }
    
    for( int i = 0; i < leghosszabb.size() - 1; i++ )
    {
      for( int j = i + 1; j < leghosszabb.size(); j++ )
      {
        if( leghosszabb.get(i).getAbc().compareTo(leghosszabb.get(j).getAbc()) > 0)
        {
          Szo csere = leghosszabb.get(i);
          leghosszabb.set(i, leghosszabb.get(j));
          leghosszabb.set(j, csere);
        }
      }
    }
    
    for( Szo sz : leghosszabb)
    {
      System.out.println(sz.getSzo());
    }
    

    for( int i = 0; i < szavak.size() - 1; i++ )
    {
      for( int j = i + 1; j < szavak.size(); j++ )
      {
        if( szavak.get(i).getSzo().length() > szavak.get(j).getSzo().length()
          || (szavak.get(i).getSzo().length() == szavak.get(j).getSzo().length()
              && szavak.get(i).getAbc().compareTo(szavak.get(j).getAbc()) > 0 ) )
        {
          Szo csere = szavak.get(i);
          szavak.set(i, szavak.get(j));
          szavak.set(j, csere);
        }
      }
    }

    try
    {
      RandomAccessFile ki = new RandomAccessFile("rendezve.txt", "rw");
      ki.setLength(0);
      
      ki.writeBytes(szavak.get(0).getSzo());
      for( int i = 1; i < szavak.size(); i++ )
      {
        if( szavak.get(i).getAbc().equals(szavak.get(i - 1).getAbc()))
        {
          ki.writeBytes(" " + szavak.get(i).getSzo());
        }
        else if( szavak.get(i).getSzo().length() == szavak.get(i - 1).getSzo().length() )
        {
          ki.writeBytes("\n" + szavak.get(i).getSzo());
        }
        else
        {
          ki.writeBytes("\n\n" + szavak.get(i).getSzo());
        }
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.out.println(e.getMessage());
      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 .