A Fájlkezelés 4. feladat megoldása Java nyelven

A feladat aminek a megoldását itt közzéteszem, itt található. A feladatot csak forráskódként teszem közzé. Az utolsó feladat megoldását később teszem hozzá.

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

import java.io.IOException;
import java.io.RandomAccessFile;

public class Webotlet_Fajlkezeles04
{

  public static void main(String[] args)
  {
    RandomAccessFile raf;
    String sor;
    String[] nevek = null;
    try
    {
      raf = new RandomAccessFile("nevek.txt", "r");
      int db = 0;
      for (sor = raf.readLine(); sor != null; sor = raf.readLine())
      {
        db++;
      }
      nevek = new String[db];
      raf.seek(0);
      int hely = 0;
      for (sor = raf.readLine(); sor != null; sor = raf.readLine())
      {
        nevek[hely] = sor;
        hely++;
      }
    }
    catch(IOException e)
    {
      System.out.println("HIBA");
    }
     
//    for (int i = 0; i < nevek.length; i++)
//    {
//      System.out.println(nevek[i]);
//    }
//    System.out.println();
     
    System.out.println("1. feladat");
//  Kinek van a leghosszabb vezetékneve?
    String[] vezeteknevek;
    vezeteknevek = new String[nevek.length];
    for (int i = 0; i < vezeteknevek.length; i++)
    {
      vezeteknevek[i] = nevek[i].split(" ")[0];
    }
     
//    for (int i = 0; i < vezeteknevek.length; i++)
//    {
//      System.out.println(vezeteknevek[i]);
//    }
     
    int max = 0;
    for (int i = 1; i < vezeteknevek.length; i++)
    {
      if (vezeteknevek[i].length() > vezeteknevek[max].length())
      {
        max = i;
      }
    }
     
    System.out.println("A leghosszabb vezetekneve: "+nevek[max]);
     
    System.out.println("2. feladat");
// Kinek van két keresztneve?
    for( int i = 0;i < nevek.length; i++ )
    {
      if( nevek[i].split(" ").length > 2 )
      {
        System.out.println(nevek[i]);
      }
    }

    System.out.println("3. feladat");
// Hányadik a leghosszabb név a fájlban?
    int maxHosszHely = 0;
    for( int i = 1; i < nevek.length; i++ )
    {
      if( nevek[i].length() > nevek[maxHosszHely].length() )
      {
        maxHosszHely = i;
      }
    }
    
    System.out.println("A leghosszabb nev sorszama: "+(maxHosszHely+1));

    System.out.println("4. feladat");
// Melyik névben van a legtöbb n betű?
// 1. verzió (helyben megszámolva, darabszámok többe rakva)
    int[] nBetukDb = new int[nevek.length];
    for( int i = 0; i < nevek.length; i++ )
    {
      String nev = nevek[i].toLowerCase();
      int db = 0;
      for (int j = 0; j < nev.length(); j++)
      {
        if (nev.charAt(j) == 'n')
        {
          db++;
        }
      }
      nBetukDb[i] = db;
    }
    
    int maxN = 0;
    for( int i = 1; i < nBetukDb.length; i++ )
    {
      if( nBetukDb[i] > nBetukDb[maxN] )
      {
        maxN = i;
      }
    }
    
    System.out.println("A legtobb n betu ebben a nevben van: "+
        nevek[maxN]);

// 2. verzió (metódussal)
    int max2 = 0;
    for (int i = 1; i < nevek.length; i++)
    {
      if (nBetuk(nevek[i]) > nBetuk(nevek[max2]))
      {
        max2 = i;
      }
    }
    System.out.println("A legtobb n betu ebben a nevben van: "+
        nevek[max2]);
     
// 3. verzió (split finomságokkal)
    int max3 = 0;
    for( int i = 1; i < nevek.length; i++ )
    {
      if( nevek[i].split("n|N",-1).length-1 > 
          nevek[max3].split("n|N",-1).length-1)
      {
        max3 = i;
      }
    }
    System.out.println("A legtobb n betu ebben a nevben van: "+
        nevek[max3]);

    System.out.println("5. feladat");
// Vannak-e azonos vezetéknevű emberek?
 
// mindet mindegyikkel osszehasonlithatjuk
    boolean azonosVezetek = false;
    for (int i = 0; i < vezeteknevek.length-1; i++)
    {
      for (int j = i+1; j < vezeteknevek.length; j++)
      {
        if( vezeteknevek[i].equals(vezeteknevek[j]))
        {
           azonosVezetek = true;
           break;
        }
      }
    }
    
    if( azonosVezetek )
    {
      System.out.println("Vannak azonos vezeteknevu "
          + "emberek.");
    }
    else
    {
      System.out.println("Nincsenek azonos vezeteknevu "
          + "emberek.");
    }

    System.out.println("6. feladat");
//    Vannak-e azonos keresztnevű emberek?
//    (minden keresztnévnek egyeznie kell)
    String[] keresztnevek = new String[nevek.length];
    for( int i = 0; i < nevek.length; i++ )
    {
      keresztnevek[i] = nevek[i].split(" ",2)[1];
    }
    
// mindet mindegyikkel osszehasonlithatjuk
    boolean azonosKereszt = false;
    for (int i = 0; i < keresztnevek.length-1; i++)
    {
      for (int j = i+1; j < keresztnevek.length; j++)
      {
        if( keresztnevek[i].equals(keresztnevek[j]))
        {
           azonosKereszt = true;
           break;
        }
      }
    }
    
    if( azonosKereszt )
    {
      System.out.println("Vannak teljesen azonos "
          + "keresztnevu emberek.");
    }
    else
    {
      System.out.println("Nincsenek teljesenazonos "
          + "keresztnevu emberek.");
    }

// 7. feladat megoldása később
     
  }
   
  public static int nBetuk(String nev)
  {
//    hogy az n és N betűket ne különböztessük meg
    nev = nev.toLowerCase();
    int db = 0;
    for (int i = 0; i < nev.length(); i++)
    {
      if (nev.charAt(i) == 'n')
      {
        db++;
      }
    }
    return db;
  }  
}

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 .