A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás tömbbel dolgozik.
Adattároló osztály:
/** * * @author https://webotlet.hu */ package webotlet_10okt_anagram; public class Szo { private String szo; private String abc; public Szo(String szo) { this.szo = szo; // minden szo betuit mar a letrehozasakor rendezzuk 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; } } } abc = new String(tomb); } public String getAbc() { return abc; } public String getSzo() { return szo; } @Override public String toString() { return "Szo{" + "szo=" + szo + ", abc=" + abc + '}'; } }
A feladat megoldásai:
/** * * @author https://webotlet.hu */ package webotlet_10okt_anagram; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scanner; public class Webotlet_10okt_anagram { 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; Szo[] szavak = null; try { raf = new RandomAccessFile("szotar.txt", "r"); int db = 0; for(sor = raf.readLine(); sor != null; sor = raf.readLine()) { db++; } raf.seek(0); szavak = new Szo[db]; int hely = 0; for(sor = raf.readLine(); sor != null; sor = raf.readLine()) { szavak[hely] = new Szo(sor); hely++; } 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.length; i++ ) { ki.writeBytes(szavak[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( rendezett(szo1).equals(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 = rendezett(feladat5); for( int i = 0; i < szavak.length; i++ ) { if( szavak[i].getAbc().equals(feladat5) ) { System.out.println(szavak[i].getSzo()); } } System.out.println("6. feladat"); int maxhossz = szavak[0].getSzo().length(); for( int i = 0; i < szavak.length; i++ ) { if( szavak[i].getSzo().length() > maxhossz ) { maxhossz = szavak[i].getSzo().length(); } } int db = 0; for( int i = 0; i < szavak.length; i++ ) { if( szavak[i].getSzo().length() == maxhossz ) { db++; } } Szo[] leghosszabb = new Szo[db]; int hely = 0; for( int i = 0; i < szavak.length; i++ ) { if( szavak[i].getSzo().length() == maxhossz ) { leghosszabb[hely] = szavak[i]; hely++; } } for( int i = 0; i < leghosszabb.length - 1; i++ ) { for( int j = i + 1; j < leghosszabb.length; j++ ) { if( leghosszabb[i].getAbc().compareTo(leghosszabb[j].getAbc()) > 0) { Szo csere = leghosszabb[i]; leghosszabb[i] = leghosszabb[j]; leghosszabb[j] = csere; } } } for( int i = 0; i < leghosszabb.length; i++ ) { System.out.println(leghosszabb[i].getSzo()); } Szo[] rendezett = new Szo[szavak.length]; for( int i = 0; i < szavak.length - 1; i++ ) { for( int j = i + 1; j < szavak.length; j++ ) { if( szavak[i].getSzo().length() > szavak[j].getSzo().length() || (szavak[i].getSzo().length() == szavak[j].getSzo().length() && szavak[i].getAbc().compareTo(szavak[j].getAbc()) > 0 ) ) { Szo csere = szavak[i]; szavak[i] = szavak[j]; szavak[j] = csere; } } } try { RandomAccessFile ki = new RandomAccessFile("rendezve.txt", "rw"); ki.setLength(0); ki.writeBytes(szavak[0].getSzo()); for( int i = 1; i < szavak.length; i++ ) { if( szavak[i].getAbc().equals(szavak[i - 1].getAbc())) { ki.writeBytes(" " + szavak[i].getSzo()); } else if( szavak[i].getSzo().length() == szavak[i - 1].getSzo().length() ) { ki.writeBytes("\n" + szavak[i].getSzo()); } else { ki.writeBytes("\n\n" + szavak[i].getSzo()); } } ki.close(); } catch( IOException e ) { System.out.println(e.getMessage()); System.out.println("HIBA"); } } // 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); } }
Ha hibát találsz benne, kérlek jelezd!