Advertisement
THOMAS_SHELBY_18

Lab2_3(JAVA)

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