Advertisement
dxvmxnd

Untitled

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