Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.NoSuchElementException;
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- private static final Scanner scan = new Scanner(System.in);
- public static void printCondition() {
- System.out.println("Найти наибольшую сумму модулей элементов строк заданной матрицы.");
- }
- public static int readNum(int min, int max) {
- int n;
- boolean isNotCorrect;
- n = 0;
- do {
- isNotCorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- }
- catch (Exception err) {
- System.out.println("Вы ввели некорректные данные. Попробуйте снова");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (n < min || n > max)) {
- System.out.println("Введено значение не входящее в диапазон допустимых значений");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return n;
- }
- public static boolean checkFile(File file) {
- int n, m, i, j, buf;
- int[][] checkMatrix;
- boolean isFileCorrect;
- final int MIN_SIZE = 1, MAX_SIZE = 20, MIN_VALUE = -100, MAX_VALUE = 100;
- m = 0;
- isFileCorrect = true;
- if (!file.isFile()) {
- System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
- isFileCorrect = false;
- }
- if (isFileCorrect && !file.canRead() ) {
- System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
- isFileCorrect = false;
- }
- if (isFileCorrect) {
- try (Scanner fileScan = new Scanner(file)) {
- n = Integer.parseInt(fileScan.nextLine());
- if (n < MIN_SIZE || n > MAX_SIZE) {
- System.out.println("Недопустимое значение для количества cтрок!");
- isFileCorrect = false;
- }
- if (isFileCorrect) {
- m = Integer.parseInt(fileScan.nextLine());
- if (m < MIN_SIZE || m > MAX_SIZE) {
- System.out.println("Недопустимое значение для количества cтолбцов!");
- isFileCorrect = false;
- }
- }
- if (isFileCorrect) {
- checkMatrix = new int[n][m];
- i = 0;
- do {
- j = 0;
- do {
- buf = fileScan.nextInt();
- if (buf < MIN_VALUE || buf > MAX_VALUE) {
- System.out.println("Значение элемента выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!");
- isFileCorrect = false;
- } else
- checkMatrix[i][j] = buf;
- j++;
- } while (isFileCorrect && j < m);
- i++;
- } while (isFileCorrect && i < n);
- }
- }
- catch (FileNotFoundException e) {
- System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
- isFileCorrect = false;
- }
- catch (NoSuchElementException e) {
- System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
- isFileCorrect = false;
- }
- }
- return isFileCorrect;
- }
- public static int[][] inputMatrixFromFile(File file) {
- int n, m, i, j, buf;
- int[][] matrix;
- matrix = null;
- try (Scanner fileScan = new Scanner(file)) {
- n = Integer.parseInt(fileScan.nextLine());
- m = Integer.parseInt(fileScan.nextLine());
- matrix = new int[n][m];
- for (i = 0; i < n; i++)
- for (j = 0; j < m; j++) {
- buf = fileScan.nextInt();
- matrix[i][j] = buf;
- }
- }
- catch (IOException e) {
- System.out.println("Не удалось считать данные из файла!");
- }
- return matrix;
- }
- public static int[][] inputMatrixFromConsole(int n, int m) {
- final int MIN_VALUE = -100, MAX_VALUE = 100;
- int i, j, buf;
- int[][] matrix;
- matrix = new int [n][m];
- System.out.println("Введите все элементы массива");
- for (i = 0; i < n; i++) {
- for (j = 0; j < m; j++) {
- System.out.println("Введите элемент матрицы " + "(" + i + "," + j + ")" + ":");
- buf = readNum(MIN_VALUE, MAX_VALUE);
- matrix[i][j] = buf;
- }
- }
- return matrix;
- }
- public static int[][] inputMatrix() {
- final int MIN_SIZE = 1, MAX_SIZE = 20, MIN_VALUE = -100, MAX_VALUE = 100;
- int choice, n, m;
- int[][] matrix;
- boolean isFileCorrect;
- String pathFile;
- File inputFile;
- System.out.println("Допустимые значения:");
- System.out.println("Количество cтрок и столбцов - натуральное число от " + MIN_SIZE + " до " + MAX_SIZE);
- System.out.println("Элементы матрицы - целые числа от " + MIN_VALUE + " до " + MAX_VALUE);
- System.out.println("Выберите вариант ввода:");
- System.out.println("1.Ввод из консоли");
- System.out.println("2.Ввод из файла");
- choice = readNum(1, 2);
- if (choice == 1) {
- System.out.println("Введите количество строк матрицы");
- n = readNum(MIN_SIZE, MAX_SIZE);
- System.out.println("Введите количество столбцов матрицы");
- m = readNum(MIN_SIZE, MAX_SIZE);
- matrix = inputMatrixFromConsole(n, m);
- }
- else {
- System.out.println("Данные в файле должны содержать 2 натуральных числа, записанных в 2 строки, и матрицу элементов");
- do {
- System.out.print("Введите путь к файлу с его раcширением:");
- pathFile = scan.nextLine() ;
- inputFile = new File(pathFile);
- isFileCorrect = checkFile(inputFile);
- } while(!isFileCorrect);
- matrix = inputMatrixFromFile(inputFile);
- }
- return matrix;
- }
- public static void outputData(int sum) {
- int choice;
- String path;
- boolean isFileIncorrect;
- System.out.println("Выберите вариант вывода: ");
- System.out.println("1. Вывод в консоль");
- System.out.println("2. Вывод в файл");
- System.out.print("Использовать вариант: ");
- choice = readNum(1, 2);
- if (choice == 1) {
- System.out.println("Наибольшая сумма модулей элементов строк матрицы: " + sum);
- }
- else {
- System.out.println("Для вывода введите путь к файлу и его имя." + '\n' + "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию).");
- do {
- isFileIncorrect = false;
- System.out.print("Введите путь к файлу и его имя c расширением: ");
- path = scan.nextLine();
- File outputFile = new File(path);
- try {
- if (outputFile.isFile()) {
- if (outputFile.canWrite()) {
- try (FileWriter writer = new FileWriter(outputFile)) {
- writer.write("Наибольшая сумма модулей элементов строк матрицы: " + sum);
- }
- } else {
- System.out.println("Файл доступен только для чтения!");
- isFileIncorrect = true;
- }
- } else {
- outputFile.createNewFile();
- try (FileWriter writer = new FileWriter(outputFile)) {
- writer.write("Наибольшая сумма модулей элементов строк матрицы: " + sum);
- }
- }
- }
- catch (IOException e) {
- System.out.println("Не удалось вывести в файл!");
- isFileIncorrect = true;
- }
- } while (isFileIncorrect);
- System.out.println("Вывод данных... успешно!");
- }
- }
- public static int findMaxSumOfRowElements(int[][] matrix) {
- int maxSum = 0;
- int sum;
- for (int i = 0; i < matrix.length; i++) {
- sum = 0;
- for (int j = 0; j < matrix[i].length; j++)
- sum += Math.abs(matrix[i][j]);
- if (sum > maxSum) {
- maxSum = sum;
- }
- }
- return maxSum;
- }
- public static void main(String[] args) {
- int[][] matrix;
- int sum;
- printCondition();
- matrix = inputMatrix();
- sum = findMaxSumOfRowElements(matrix);
- outputData(sum);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement