Advertisement
THOMAS_SHELBY_18

Lab2_4 Javka

Nov 3rd, 2023
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.84 KB | None | 0 0
  1. package com.company;
  2. import java.util.NoSuchElementException;
  3. import java.util.Scanner;
  4. import java.io.*;
  5.  
  6. public class Main {
  7. private static final Scanner scan = new Scanner(System.in);
  8.  
  9. public static void printCondition() {
  10. System.out.println("Дан массив А, состоящий из n-натуральных чисел. Определить максимальное число идущих подряд элементов, равных 1.");
  11. }
  12.  
  13. public static int readNum(int min, int max) {
  14. int n;
  15. boolean isNotCorrect;
  16. n = 0;
  17. do {
  18. isNotCorrect = false;
  19. try {
  20. n = Integer.parseInt(scan.nextLine());
  21. }
  22. catch (Exception err) {
  23. System.out.println("Вы ввели некорректные данные. Попробуйте снова");
  24. isNotCorrect = true;
  25. }
  26. if (!isNotCorrect && (n < min || n > max)) {
  27. System.out.println("Введено значение не входящее в диапазон допустимых значений");
  28. isNotCorrect = true;
  29. }
  30. } while (isNotCorrect);
  31. return n;
  32. }
  33.  
  34. public static boolean checkFile(File file) {
  35. int n, i, buf;
  36. int[] checkArr;
  37. boolean isFileCorrect;
  38. final int MIN_ARR_LENGTH = 1, MAX_ARR_LENGTH = 20, MIN_ARR_VALUE = 1, MAX_ARR_VALUE = 100;
  39.  
  40. isFileCorrect = true;
  41.  
  42. if (!file.isFile()) {
  43. System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
  44. isFileCorrect = false;
  45. }
  46. if (isFileCorrect && !file.canRead() ) {
  47. System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
  48. isFileCorrect = false;
  49. }
  50. if (isFileCorrect) {
  51. try (Scanner fileScan = new Scanner(file)) {
  52. n = Integer.parseInt(fileScan.nextLine());
  53. checkArr = new int[n];
  54. if (n < MIN_ARR_LENGTH || n > MAX_ARR_LENGTH) {
  55. System.out.println("Недопустимое значение для количества элементов массива!");
  56. isFileCorrect = false;
  57. }
  58. else {
  59. i = 0;
  60. do {
  61. buf = fileScan.nextInt();
  62. if (buf < MIN_ARR_VALUE || buf > MAX_ARR_VALUE) {
  63. System.out.println("Значение элемента выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!");
  64. isFileCorrect = false;
  65. }
  66. else
  67. checkArr[i] = buf;
  68. i++;
  69. } while (isFileCorrect && i < n);
  70. }
  71.  
  72. }
  73. catch (FileNotFoundException e) {
  74. System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
  75. isFileCorrect = false;
  76. }
  77. catch (NoSuchElementException e) {
  78. System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  79. isFileCorrect = false;
  80. }
  81. catch (Exception e) {
  82. System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  83. isFileCorrect = false;
  84. }
  85. }
  86.  
  87. return isFileCorrect;
  88. }
  89. public static int[] inputArrFromFile(File file) {
  90. int n;
  91. int[] arr;
  92. arr = null;
  93. try (Scanner fileScan = new Scanner(file)) {
  94. n = Integer.parseInt(fileScan.nextLine());
  95. arr = new int[n];
  96. for (int i = 0; i < n; i++)
  97. arr[i] = fileScan.nextInt();
  98. }
  99. catch (IOException e) {
  100. System.out.println("Не удалось считать данные из файла!");
  101. }
  102. return arr;
  103. }
  104.  
  105. public static int[] inputArrFromConsole(int length) {
  106. final int MIN_ARR_VALUE = 1, MAX_ARR_VALUE = 100;
  107. int i;
  108. int[] arr;
  109. arr = new int [length];
  110. System.out.println("Введите все элементы массива");
  111. for (i = 0; i < length; i++)
  112. {
  113. System.out.println("Введите элемент последовательности №" + (i + 1) + ":");
  114. arr[i] = readNum(MIN_ARR_VALUE, MAX_ARR_VALUE);
  115. }
  116. return arr;
  117. }
  118.  
  119. public static int[] inputArr() {
  120. final int MIN_ARR_LENGTH = 1, MAX_ARR_LENGTH = 20, MIN_ARR_VALUE = 1, MAX_ARR_VALUE = 100;
  121. int choice, n;
  122. int[] arr;
  123. boolean isFileCorrect;
  124. String pathFile;
  125. File inputFile;
  126.  
  127. System.out.println("Допустимые значения:");
  128. System.out.println("Количество элементов - натуральное число от " + MIN_ARR_LENGTH + " до " + MAX_ARR_LENGTH);
  129. System.out.println("Элементы массива - натуральные числа от " + MIN_ARR_VALUE + " до " + MAX_ARR_VALUE);
  130.  
  131. System.out.println("Выберите вариант ввода:");
  132. System.out.println("1.Ввод из консоли");
  133. System.out.println("2.Ввод из файла");
  134. choice = readNum(1, 2);
  135.  
  136. if (choice == 1) {
  137. System.out.println("Введите количество элементов массива");
  138. n = readNum(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  139. arr = inputArrFromConsole(n);
  140. }
  141. else {
  142. System.out.println("Данные в файле должны содержать натуральное число");
  143. do {
  144. System.out.print("Введите путь к файлу с его раcширением:");
  145. pathFile = scan.nextLine() ;
  146. inputFile = new File(pathFile);
  147. isFileCorrect = checkFile(inputFile);
  148. } while(!isFileCorrect);
  149. arr = inputArrFromFile(inputFile);
  150. }
  151. return arr;
  152. }
  153.  
  154. public static void outputData(int count) {
  155.  
  156. int choice;
  157. String path;
  158. boolean isFileIncorrect;
  159.  
  160. System.out.println("Выберите вариант вывода: ");
  161. System.out.println("1. Вывод в консоль");
  162. System.out.println("2. Вывод в файл");
  163. System.out.print("Использовать вариант: ");
  164. choice = readNum(1, 2);
  165.  
  166. if (choice == 1) {
  167. if (count == 0) {
  168. System.out.println("Среди элементов массива чисел равных 1 нет");
  169. }
  170. else {
  171. System.out.println("Максимальное количество подряд идущих чисел равных 1 в массиве: " + count);
  172. }
  173. }
  174. else {
  175. System.out.println("Для вывода введите путь к файлу и его имя." + '\n' + "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию).");
  176. do {
  177. isFileIncorrect = false;
  178. System.out.print("Введите путь к файлу и его имя c расширением: ");
  179. path = scan.nextLine();
  180. File outputFile = new File(path);
  181. try {
  182. if (outputFile.isFile()) {
  183. if (outputFile.canWrite()) {
  184. try (FileWriter writer = new FileWriter(outputFile)) {
  185. if (count == 0) {
  186. writer.write("Среди элементов массива чисел равных 1 нет");
  187. }
  188. else {
  189. writer.write("Максимальное количество подряд идущих чисел равных 1 в массиве: " + count);
  190. }
  191. }
  192. } else {
  193. System.out.println("Файл доступен только для чтения!");
  194. isFileIncorrect = true;
  195. }
  196. } else {
  197. outputFile.createNewFile();
  198. try (FileWriter writer = new FileWriter(outputFile)) {
  199. if (count == 0) {
  200. writer.write("Среди элементов массива чисел равных 1 нет");
  201. }
  202. else {
  203. writer.write("Максимальное количество подряд идущих чисел равных 1 в массиве: " + count);
  204. }
  205. }
  206. }
  207. }
  208. catch (IOException e) {
  209. System.out.println("Не удалось вывести в файл!");
  210. isFileIncorrect = true;
  211. }
  212. } while (isFileIncorrect);
  213. System.out.println("Вывод данных... успешно!");
  214. }
  215. }
  216.  
  217. public static int solveTheTask(int[] arr) {
  218. int count;
  219. int maxCount;
  220.  
  221. count = 0;
  222. maxCount = 0;
  223. for (int i = 0; i < arr.length; i++) {
  224. if (arr[i] == 1) {
  225. count++;
  226. if (count > maxCount)
  227. maxCount = count;
  228. }
  229. else
  230. count = 0;
  231. }
  232. return maxCount;
  233. }
  234.  
  235. public static void main(String[] args) {
  236. int[] arrA;
  237. int maxCount;
  238. printCondition();
  239. arrA = inputArr();
  240. maxCount = solveTheTask(arrA);
  241. outputData(maxCount);
  242. scan.close();
  243. }
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement