Advertisement
dxvmxnd

Untitled

Mar 2nd, 2024
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.02 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Scanner;
  3. public class Main {
  4. private static final Scanner scanner = new Scanner(System.in);
  5. public static void main(String[] args) {
  6. int[] array;
  7. int[] sortedArray;
  8. outputTaskEssence();
  9. array = sourceChoice();
  10. sortedArray = sorting(array);
  11. output(sortedArray);
  12. scanner.close();
  13. }
  14. public static void outputTaskEssence() {
  15. System.out.println("Данная программа сортирует массив методом подсчета.");
  16. }
  17. public static int[] sourceChoice() {
  18. int choiceNumber;
  19. boolean isIncorrect;
  20. int[] array = new int[0];
  21. choiceNumber = -1;
  22. System.out.println("Выберите, откуда будут вводиться данные: ");
  23. do {
  24. isIncorrect = false;
  25. System.out.println("Введите 0, если с консоли; 1, если с файла");
  26. try {
  27. choiceNumber = Integer.parseInt(scanner.nextLine());
  28. } catch (NumberFormatException exception) {
  29. isIncorrect = true;
  30. System.err.println("Неверный ввод данных!");
  31. }
  32. if (((choiceNumber != 0) && (choiceNumber != 1)) || (isIncorrect)) {
  33. isIncorrect = true;
  34. System.err.println("Число должно быть или 0, или 1");
  35. }
  36. } while (isIncorrect);
  37. if (choiceNumber == 0) {
  38. array = inputFromConsole();
  39. } else {
  40. array = inputFromFile();
  41. }
  42. return array;
  43. }
  44. public static int[] inputFromFile() {
  45. String path;
  46. int size;
  47. int[] array;
  48. System.out.println("При записи данных из файла, учтите, что на первой строке написано количество элементов массива, на второй - элементы массива через пробел.");
  49. path = pathChoice();
  50. size = inputSizeFromFile(path);
  51. array = new int[size];
  52. array = readArrayFromFile(path, size, array);
  53. return array;
  54. }
  55. public static String pathChoice() {
  56. String path;
  57. boolean isIncorrect;
  58. do {
  59. isIncorrect = false;
  60. System.out.println("Введите путь к файлу: ");
  61. path = scanner.nextLine();
  62. File file = new File(path);
  63. if (!file.exists()) {
  64. System.out.println("По указанном пути файл не найден.");
  65. isIncorrect = true;
  66. } else if (!getExtension(path).equals("txt")) {
  67. System.err.println("Ошибка, неправильный тип файла!");
  68. isIncorrect = true;
  69. }
  70. } while (isIncorrect);
  71. return path;
  72. }
  73. public static String getExtension(String path) {
  74. int pos = path.lastIndexOf('.');
  75. if (pos <= 0) {
  76. return "";
  77. }
  78. return path.substring(pos + 1);
  79. }
  80. public static int inputSizeFromFile(String path) {
  81. int size;
  82. boolean isIncorrect;
  83. System.out.println("Считывание размера массива...");
  84. size = 0;
  85. isIncorrect = false;
  86. try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
  87. try {
  88. size = Integer.parseInt(reader.readLine());
  89. } catch (NumberFormatException exception) {
  90. if ((size < 1) || (isIncorrect == true)) {
  91. isIncorrect = true;
  92. System.err.println("Неверный ввод данных! Введите данные с клавиатуры.");
  93. size = inputSizeFromConsole();
  94. }
  95. else {
  96. System.out.println(size);
  97. }
  98. }
  99. } catch (IOException ioException) {
  100. isIncorrect = true;
  101. }
  102. return size;
  103. }
  104. public static int[] readArrayFromFile(String path, int size, int[] array) {
  105. System.out.println("Считывание массива...");
  106. try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
  107. reader.readLine();
  108. String[] elements = reader.readLine().split(" ");
  109. for (int i = 0; i < size; i++) {
  110. try {
  111. array[i] = Integer.parseInt(elements[i]);
  112. } catch (NumberFormatException exception) {
  113. System.out.println("Неверный ввод данных! Введите данные с клавиатуры.");
  114. array[i] = exceptionRead(i);
  115. }
  116. }
  117. } catch (IOException ioException) {
  118. System.err.println("Неверный ввод данных! Измените входные данные и перезапустите программу.");
  119. }
  120. return array;
  121. }
  122. public static void output(int[] array) {
  123. String path;
  124. boolean isIncorrect;
  125. System.out.println("\nМассив, отсортированный методом подсчета: ");
  126. for (int i = 0; i < array.length; i++) {
  127. System.out.print(array[i] + " ");
  128. }
  129. path = outputPath();
  130. do {
  131. isIncorrect = false;
  132. try (FileWriter writer = new FileWriter(path, true)) {
  133. writer.write("Массив, отсортированный методом подсчета: \n");
  134. for (int i = 0; i < array.length; i++) {
  135. writer.write(array[i] + " ");
  136. }
  137. } catch (IOException ioException) {
  138. System.err.println("Ошибка при записи в файл");
  139. isIncorrect = true;
  140. }
  141. } while (isIncorrect);
  142. System.out.println("Данные записаны в файл.");
  143. }
  144. public static int[] sorting(int[] arr) {
  145. int minVal;
  146. int maxVal;
  147. int range;
  148. int[] count;
  149. int k, n;
  150.  
  151. n = arr.length;
  152.  
  153. minVal = arr[0];
  154. maxVal = arr[0];
  155.  
  156. for (int i = 1; i < n; i++) {
  157. if (arr[i] < minVal) {
  158. minVal = arr[i];
  159. }
  160. if (arr[i] > maxVal) {
  161. maxVal = arr[i];
  162. }
  163. }
  164.  
  165. range = maxVal - minVal + 1;
  166. count = new int[range];
  167. for (int i = 0; i < n; i++) {
  168. count[i] = 0;
  169. }
  170.  
  171. for (int i = 0; i < n; i++) {
  172. count[arr[i] - minVal]++;
  173. }
  174.  
  175. k = 0;
  176. for (int i = 0; i < range; i++) {
  177. for (int j = 0; j < count[i]; j++) {
  178. arr[k] = i + minVal;
  179. k++;
  180. }
  181. }
  182.  
  183. return arr;
  184. }
  185. public static String outputPath() {
  186. String path;
  187. boolean isIncorrect;
  188. do {
  189. isIncorrect = false;
  190. System.out.println("\nВведите путь к файлу для вывода: ");
  191. System.out.println();
  192. path = scanner.nextLine();
  193. File file = new File(path);
  194. if (!file.exists()) {
  195. System.out.println("По указанном пути файл не найден.");
  196. isIncorrect = true;
  197. } else if (!getExtension(path).equals("txt")) {
  198. System.err.println("Ошибка, неправильный тип файла!");
  199. isIncorrect = true;
  200. }
  201. } while (isIncorrect);
  202. return path;
  203. }
  204. public static int[] inputFromConsole() {
  205. int size;
  206. int[] array;
  207. size = inputSizeFromConsole();
  208. array = new int[size];
  209. array = readArrayFromConsole(size, array);
  210. return array;
  211. }
  212. public static int inputSizeFromConsole() {
  213. boolean isIncorrect;
  214. int size;
  215. size = 0;
  216. do {
  217. isIncorrect = false;
  218. System.out.print("Введите количество элементов массива: ");
  219. try {
  220. size = Integer.parseInt(scanner.nextLine());
  221. if (!isIncorrect && (size < 1)) {
  222. System.err.println("Неверный ввод данных!");
  223. isIncorrect = true;
  224. }
  225. } catch (NumberFormatException exception) {
  226. System.err.println("Неверный ввод данных!");
  227. isIncorrect = true;
  228. }
  229. } while (isIncorrect);
  230. return size;
  231. }
  232. public static int[] readArrayFromConsole(int size, int[] array) {
  233. boolean isIncorrect;
  234. for (int i = 0; i < size; i++) {
  235. do {
  236. isIncorrect = false;
  237. System.out.print("Введите " + (i+1) + " элемент массива: ");
  238. try {
  239. array[i] = Integer.parseInt(scanner.nextLine());
  240. } catch (NumberFormatException exception) {
  241. System.err.println("Неверный ввод данных!");
  242. isIncorrect = true;
  243. }
  244. } while (isIncorrect);
  245. }
  246. return array;
  247. }
  248. public static int exceptionRead(int i) {
  249. boolean isIncorrect;
  250. int number;
  251. number = 0;
  252. do {
  253. isIncorrect = false;
  254. System.out.print("Введите " + (i+1) + " элемент массива: ");
  255. try {
  256. number = Integer.parseInt(scanner.nextLine());
  257. } catch (NumberFormatException exception) {
  258. System.err.println("Неверный ввод данных!");
  259. isIncorrect = true;
  260. }
  261. } while (isIncorrect);
  262. return number;
  263. }
  264. }
  265.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement