Advertisement
Guest User

Untitled

a guest
May 31st, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.39 KB | None | 0 0
  1. 1package task3;
  2. 2
  3. 3import java.awt.EventQueue;
  4. 4import java.awt.event.ActionEvent;
  5. 5import java.awt.event.ActionListener;
  6. 6import java.io.File;
  7. 7import java.io.FileInputStream;
  8. 8import java.io.FileNotFoundException;
  9. 9import java.io.IOException;
  10. 10.
  11. 11. import javax.swing.JButton;
  12. 12. import javax.swing.JFileChooser;
  13. 13. import javax.swing.JFrame;
  14. 14. import javax.swing.JPanel;
  15. 15. import javax.swing.border.EmptyBorder;
  16. 16.
  17. 17. public class Task3 extends JFrame {
  18. 18.
  19. 19.     private static final long serialVersionUID = 1L;
  20. 20.     private JPanel contentPane;
  21. 21.     private long lenOld;
  22. 22.     private long lenNew;
  23. 23.     private File file;
  24. 24.     static char[] Alph;
  25. 25.     static double[] cum_freq;
  26. 26.     static String tab;
  27. 27.     private static char[] chars;
  28. 28.
  29. 29.     static double low = 0.0;
  30. 30.     static double high = 1.0;
  31. 31.
  32. 32.     private static void encode_symbol(int symbol) {
  33. 33.         double range = high - low;
  34. 34.         high = low + range * cum_freq[symbol];
  35. 35.         if (symbol == 0) {
  36. 36.             low = low + range * 0;
  37. 37.         } else {
  38. 38.             low = low + range * cum_freq[symbol - 1];
  39. 39.         }
  40. 40.         System.out.println(low + " - " + high);
  41. 41.     }
  42. 42.
  43. 43.     private static void sortik(double[] arr) {
  44. 44.         for (int i = arr.length - 1; i > 0; i--) {
  45. 45.             for (int j = 0; j < i; j++) {
  46. 46.                 if (arr[j] < arr[j + 1]) {
  47. 47.                     double tmp = arr[j];
  48. 48.                     arr[j] = arr[j + 1];
  49. 49.                     arr[j + 1] = tmp;
  50. 50.                 }
  51. 51.             }
  52. 52.         }
  53. 53.     }
  54. 54.
  55. 55.     private static void encode(String source) {
  56. 56.         char[] etap = source.toCharArray();
  57. 57.         tab = "";
  58. 58.         for (int i = 0; i < etap.length - 1; i++) {
  59. 59.             if (tab.contains(source.substring(i, i + 1))) {
  60. 60.                 continue;
  61. 61.             } else {
  62. 62.                 tab += etap[i];
  63. 63.             }
  64. 64.         }
  65. 65.         int nums = tab.length();
  66. 66.         int counter = 0;
  67. 67.         Alph = new char[nums];
  68. 68.         cum_freq = new double[nums];
  69. 69.         double[] cum = new double[nums];
  70. 70.         char[] table = tab.toCharArray();
  71. 71.         for (int i = 0; i < tab.length(); i++) {
  72. 72.             Alph[i] = table[i];
  73. 73.             System.out.println(Alph[i]);
  74. 74.         }
  75. 75.         chars = source.toCharArray();
  76. 76.         for (int i = 0; i < nums; i++) {
  77. 77.             for (int j = 0; j < chars.length; j++) {
  78. 78.                 if (Alph[i] == chars[j])
  79. 79.                     counter++;
  80. 80.             }
  81. 81.             cum[i] = (double) counter / chars.length;
  82. 82.             counter = 0;
  83. 83.         }
  84. 84.         sortik(cum);
  85. 85.
  86. 86.         counter = 0;
  87. 87.         for (int i = 0; i < nums; i++) {
  88. 88.             counter = i;
  89. 89.             if (counter == 0) {
  90. 90.                 cum_freq[i] = cum[i];
  91. 91.             } else {
  92. 92.                 while (counter >= 0) {
  93. 93.                     cum_freq[i] += cum[counter];
  94. 94.                     counter--;
  95. 95.                 }
  96. 96.             }
  97. 97.         }
  98. 98.     }
  99. 99.
  100. 100.        public Task3() {
  101. 101.            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  102. 102.            setSize(360, 200);
  103. 103.            contentPane = new JPanel();
  104. 104.            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  105. 105.            setContentPane(contentPane);
  106. 106.            contentPane.setLayout(null);
  107. 107.   
  108. 108.            JButton btnEncode = new JButton("Шифр");
  109. 109.   
  110. 110.            JButton btnChoose = new JButton("Файл");
  111. 111.            btnChoose.addActionListener(new ActionListener() {
  112. 112.                public void actionPerformed(ActionEvent arg0) {
  113. 113.                    JFileChooser fileopen = new JFileChooser();
  114. 114.                    int ret = fileopen.showDialog(null, "Открыть файл");
  115. 115.                    if (ret == JFileChooser.APPROVE_OPTION) {
  116. 116.                        file = fileopen.getSelectedFile();
  117. 117.                        String name = file.getName();
  118. 118.                        if (name.contains(".txt")) {
  119. 119.                            System.out.println("Имя файла " + name);
  120. 120.                            btnEncode.setEnabled(true);
  121. 121.                            lenOld = file.length();
  122. 122.                            System.out.println("Старый размер " + lenOld + "b");
  123. 123.                        } else {
  124. 124.                            System.out.println("Ошибка");
  125. 125.                        }
  126. 126.                    }
  127. 127.                }
  128. 128.            });
  129. 129.            btnChoose.setBounds(110, 6, 89, 23);
  130. 130.            contentPane.add(btnChoose);
  131. 131.   
  132. 132.            btnEncode.addActionListener(new ActionListener() {
  133. 133.                public void actionPerformed(ActionEvent arg0) {
  134. 134.                    String path = file.getPath();
  135. 135.                    String textOld = "";
  136. 136.   
  137. 137.                    try {
  138. 138.                        @SuppressWarnings("resource")
  139. 139.                        FileInputStream inFile = new FileInputStream(path);
  140. 140.                        byte[] str = new byte[inFile.available()];
  141. 141.                        inFile.read(str);
  142. 142.                        textOld = new String(str);
  143. 143.                        encode(textOld);
  144. 144.                    } catch (FileNotFoundException e) {
  145. 145.                        System.out.println("Ошибка");
  146. 146.                        System.out.println("Ошибка");
  147. 147.                        e.printStackTrace();
  148. 148.                    } catch (IOException e) {
  149. 149.                        System.out.println("Ошибка");
  150. 150.                        System.out.println("Ошибка");
  151. 151.                        e.printStackTrace();
  152. 152.                    }
  153. 153.   
  154. 154.                    lenNew = file.length();
  155. 155.                    System.out.println("Новый размер " + lenNew + "b");
  156. 156.                    System.out.println((lenOld - lenNew) + "b");
  157. 157.   
  158. 158.                    btnEncode.setEnabled(false);
  159. 159.   
  160. 160.                    btnChoose.setEnabled(false);
  161. 161.                }
  162. 162.            });
  163. 163.            btnEncode.setBounds(110, 36, 89, 23);
  164. 164.            btnEncode.setEnabled(false);
  165. 165.            contentPane.add(btnEncode);
  166. 166.        }
  167. 167.   
  168. 168.        public static void main(String[] args) {
  169. 169.            EventQueue.invokeLater(new Runnable() {
  170. 170.                public void run() {
  171. 171.                    try {
  172. 172.                        Task3 frame = new Task3();
  173. 173.                        frame.setVisible(true);
  174. 174.                    } catch (Exception e) {
  175. 175.                        e.printStackTrace();
  176. 176.                    }
  177. 177.                }
  178. 178.            });
  179. 179.        }
  180. 180.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement