Advertisement
Karolina99

Anagramy

Apr 10th, 2020
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.89 KB | None | 0 0
  1. package Main;
  2.  
  3. /*
  4. Dla interfejsu IAnagramChecker zaimplementuj klasę AnagramChecker implementującą ten interfejs.
  5. Napisz test sprawdzający działanie tej klasy.
  6. */
  7.  
  8. import Files.AnagramChecker;
  9.  
  10. public class Main
  11. {
  12.     public static void main(String[] args)
  13.     {
  14.         AnagramChecker anagram1 = new AnagramChecker("adam", "dama");
  15.         boolean b1 = anagram1.isAnagram();
  16.  
  17.         AnagramChecker anagram2 = new AnagramChecker("samochod", "auto");
  18.         boolean b2 = anagram2.isAnagram();
  19.  
  20.         if(b1)
  21.         {
  22.             System.out.println(anagram1.getWord1() + " oraz " + anagram1.getWord2() + " sa anagramami");
  23.         }
  24.         else
  25.         {
  26.             System.out.println(anagram1.getWord1() + " oraz " + anagram1.getWord2() + " nie sa anagramami");
  27.         }
  28.  
  29.         System.out.println(" ");
  30.  
  31.         if(b2)
  32.         {
  33.             System.out.println(anagram2.getWord1() + " oraz " + anagram2.getWord2() + " sa anagramami");
  34.         }
  35.         else
  36.         {
  37.             System.out.println(anagram2.getWord1() + " oraz " + anagram2.getWord2() + " nie sa anagramami");
  38.         }
  39.     }
  40. }
  41.  
  42. package Files;
  43.  
  44. /*
  45. Interfejs obiektu który sprawdza czy dane słowa są anagramami.
  46. Anagram jest słowem lub frazą, która powstała
  47. przez zmianę kolejności liter w oryginalnym słowie lub frazie.
  48. Zobacz kilka przykładów na http://www.wordsmith.org/anagram/hof.html
  49. */
  50.  
  51. public interface IAnagramChecker
  52. {
  53.     /** Sprawdza czy jedno slowo jest anagramem drugiego.
  54.      * Wszystkie niealfanumeryczne znaki są ignorowane.
  55.      * Wielkość liter nie ma znaczenia.
  56.      * //@param word1 dowolny niepusty string różny od null.
  57.      * //@param word2 dowolny niepusty string różny od null.
  58.      * @return true wtedy i tylko wtedy gdy word1 jest anagramem word2.
  59.      */
  60.     //zmienilam i ta metoda nie przyjmuje zadnych argumentow, bo korzystam z konstruktora w klasie AnagramChecker
  61.     public boolean isAnagram();
  62. }
  63.  
  64. package Files;
  65.  
  66. //adam jest anagramem dama
  67. //anagramy powstaja poprzez zmiane kolejnosci liter
  68. //czyli oba slowa musza miec taka sama dlugosc i skladac sie z tych samych liter
  69.  
  70. public class AnagramChecker implements IAnagramChecker
  71. {
  72.     private String word1;
  73.     private String word2;
  74.  
  75.     public AnagramChecker(String word1, String word2)
  76.     {
  77.         this.word1 = word1;
  78.         this.word2 = word2;
  79.     }
  80.  
  81.     public String getWord1()
  82.     {
  83.         return this.word1;
  84.     }
  85.  
  86.     public String getWord2()
  87.     {
  88.         return this.word2;
  89.     }
  90.  
  91.     public void sort(char[] tab, int n) //sortowanie babelkowe, bubblesort
  92.     {
  93.         char temp;
  94.         int i, zmiana;
  95.         do
  96.         {
  97.             zmiana = 0;
  98.             i = n - 1;
  99.             do
  100.             {
  101.                 i--;
  102.                 if (tab[i + 1] < tab[i])
  103.                 {
  104.                     temp = tab[i];
  105.                     tab[i] = tab[i + 1];
  106.                     tab[i + 1] = temp;
  107.                     zmiana = 1;
  108.                 }
  109.             } while (i != 0);
  110.         } while (zmiana != 0);
  111.     }
  112.  
  113.     public boolean isAnagram()
  114.     {
  115.         int l1 = word1.length();
  116.         int l2 = word2.length();
  117.  
  118.         char[] w1 = new char[l1];
  119.         char[] w2 = new char[l2];
  120.  
  121.         for (int i=0; i<l1; i++)
  122.         {
  123.             w1[i] = word1.charAt(i);
  124.         }
  125.  
  126.         for(int i=0; i<l2; i++)
  127.         {
  128.             w2[i] = word2.charAt(i);
  129.         }
  130.  
  131.         //jesli stringi sa roznej dlugosci nie moga byc anagramami
  132.         if(l1 != l2)
  133.             return false;
  134.  
  135.         //teraz trzeba oba stringi posortowac, czyli posortowac tablice w1 i w2
  136.         //uzyje sortowania babelkowego
  137.  
  138.         sort(w1, l1);
  139.         sort(w2, l2);
  140.  
  141.         //porownanie obu stringow
  142.         for(int i=0; i<l1; i++) //bo l1=l2
  143.         {
  144.             if(w1[i] != w2[i])
  145.                 return false;
  146.         }
  147.  
  148.         return true;
  149.     }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement