Advertisement
Vernon_Roche

Задание 3 Java (Лабораторная работа 2)

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