Advertisement
LisunovaMaryna

lab2.3 java

Nov 5th, 2023 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.57 KB | None | 0 0
  1. package lab2_3_java;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.PrintWriter;
  9. import java.util.NoSuchElementException;
  10. import java.util.Objects;
  11. import java.util.Scanner;
  12.  
  13. public class Main {
  14.     private static void PrintCondition() {
  15.         System.out.println("\nGoal: Input Matrix And add Rows into position 0 And n+1 with elements equal To 1 (use shift Rows).\n");
  16.     }
  17.  
  18.     private static void PrintMatrix(int[][] matrix, int rows, int columns, String header) {
  19.         System.out.println(header);
  20.         for (int row = 0; row < rows; row++) {
  21.             for (int column = 0; column < columns; column++) {
  22.                 System.out.print(matrix[row][column]);
  23.                 System.out.print(" ");
  24.             }
  25.             System.out.print("\n");
  26.         }
  27.     }
  28.  
  29.     private static int InputNumUnlimited() {
  30.         int number;
  31.         number = 0;
  32.         boolean isValid;
  33.         isValid = false;
  34.         do {
  35.             String line = ReadLine();
  36.             try {
  37.                 number = Integer.parseInt(line);
  38.                 isValid = true;
  39.             }
  40.             catch (NumberFormatException e) {
  41.                 System.err.println("Unexpected symbol entered.");
  42.             }
  43.  
  44.         } while (!isValid);
  45.  
  46.         return number;
  47.     }
  48.  
  49.     private static int InputNumber(int min, int max) {
  50.         int number = 0;
  51.         boolean isValid = false;
  52.         do {
  53.             number = InputNumUnlimited();
  54.             if (number < min) {
  55.                 System.err.println(String.format("Minimal allowed value is %d", min));
  56.             }
  57.             else if (number > max) {
  58.                 System.err.println(String.format("Maximum allowed value is %d", max));
  59.             }
  60.             else {
  61.                 isValid = true;
  62.             }
  63.         } while (!isValid);
  64.  
  65.         return number;
  66.     }
  67.  
  68.     private static int[][] CreateMatrix(int rows, int columns, int defaultValue) {
  69.         int[][] matrix;
  70.         matrix = new int[rows][columns];
  71.         for (int row = 0; row < rows; row++) {
  72.             for (int column = 0; column < columns; column++) {
  73.                 matrix[row][column] = defaultValue;
  74.             }
  75.         }
  76.         return matrix;
  77.     }
  78.  
  79.     private static int[][] ResizeMatrix(int[][]  matrix, int rows, int columns, int etraRows, int defaultValue) {
  80.         int[][] outMatrix;
  81.         int matrixRange;
  82.         int outMatrixRows;
  83.  
  84.         outMatrixRows = rows + 2;
  85.         outMatrix = CreateMatrix(outMatrixRows, columns, defaultValue); // выделение памяти и заполняет 1ми
  86.         CopyMatrix(matrix, outMatrix, rows, columns);
  87.         return outMatrix;
  88.     }
  89.  
  90.     private static String ReadLine() {
  91.         String line = null;
  92.         try {
  93.             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  94.             line = br.readLine();
  95.         }
  96.         catch (IOException e) {
  97.             System.err.println("Сonsole read operation failed.");
  98.         }
  99.         return line;
  100.     }
  101.  
  102.     private static String ReadCondition() {
  103.         String condition;
  104.         boolean selected = false;
  105.  
  106.         System.out.println("Would you like to enter matrix manually [m] or get from file [f]?");
  107.  
  108.         do {
  109.             condition = ReadLine();
  110.  
  111.             if (!Objects.equals(condition, "m") && !Objects.equals(condition, "f")) {
  112.                 System.out.println("Please type [m] or [f]\n");
  113.             }
  114.             else {
  115.                 selected = true;
  116.             }
  117.  
  118.         } while (!selected);
  119.         return condition;
  120.     }
  121.  
  122.     private static int InputMatrixRange() {
  123.         int matrixRange;
  124.         System.out.println("Input matrix range (1...5):");
  125.         matrixRange = InputNumber(1, 5);
  126.         return matrixRange;
  127.     }
  128.  
  129.     private static int[][] InputSourceMatrixManually() {
  130.         int[][] matrix;
  131.         int matrixRange = InputMatrixRange();
  132.         matrix = CreateMatrix(matrixRange, matrixRange, 0);
  133.  
  134.         System.out.println("Input matrix values:");
  135.  
  136.         for (int row = 0; row < matrixRange; row++) {
  137.             for (int column = 0; column < matrixRange; column++) {
  138.                 System.out.println(String.format("Input value for Row: %s Column: %s: ",row,column));
  139.                 matrix[row][column] = InputNumber(Integer.MIN_VALUE, Integer.MAX_VALUE);
  140.             }
  141.         }
  142.         return matrix;
  143.     }
  144.  
  145.     private static boolean IsFileExist(String fileName) {
  146.         File f = new File(fileName);
  147.         if (f.exists() && !f.isDirectory()) {
  148.             return true;
  149.         }
  150.         return false;
  151.     }
  152.  
  153.     private static boolean HasTxtExtension(String fileName) {
  154.         int length = fileName.length();
  155.  
  156.         if (length < 5) {
  157.             return false;
  158.         }
  159.         if (fileName.charAt(length - 4) != '.') {
  160.             return false;
  161.         }
  162.         if (fileName.charAt(length - 3) != 't') {
  163.             return false;
  164.         }
  165.         if (fileName.charAt(length - 2) != 'x') {
  166.             return false;
  167.         }
  168.         if (fileName.charAt(length - 1) != 't') {
  169.             return false;
  170.         }
  171.         return true;
  172.     }
  173.  
  174.     private static String InputFilePath(boolean checkExistence) {
  175.         String fileName = null;
  176.         boolean isCorrect = false;
  177.         do {
  178.             System.out.println("\nInput file path (*.txt):\n");
  179.             try {
  180.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // чтение из файла
  181.                 fileName = br.readLine();
  182.  
  183.                 if (fileName.length() < 5) {
  184.                     System.err.println("\ninvalid file name\n");
  185.                 }
  186.                 else if (!HasTxtExtension(fileName)) {
  187.                     System.err.println("\ninvalid file extension\n");
  188.                 }
  189.                 else if (checkExistence && !IsFileExist(fileName)) {
  190.                     System.err.println("\nFile not found\n");
  191.                 }
  192.                 else {
  193.                     isCorrect = true;
  194.                 }
  195.             }
  196.             catch (IOException e) {
  197.                 System.err.println("console read operation failed.");
  198.             }
  199.         } while (!isCorrect);
  200.  
  201.         return fileName;
  202.     }
  203.  
  204.     private static int GetMatrixRange(Scanner scan) {
  205.         int num;
  206.         String temp;
  207.         num = 0;
  208.         try {
  209.             temp =scan.next();
  210.  
  211.             num = Integer.parseInt(temp);
  212.         }
  213.         catch (NumberFormatException e) {
  214.             System.err.print("Symbols have been entered or exceeding permissible limits.");
  215.             return 0;
  216.         }
  217.         if (num < 0) {
  218.             System.err.print("A number less than zero was entered.");
  219.             return 0;
  220.         }
  221.         return num;
  222.     }
  223.  
  224.     private static int[][] ReadMatrix(Scanner scan, int matrixRange) {
  225.         int[][] matrix = null;
  226.  
  227.         try {
  228.             matrix = new int[matrixRange][matrixRange];
  229.  
  230.             for (int rowIndex = 0; rowIndex < matrixRange; rowIndex++) {
  231.                 for (int columnIndex = 0; columnIndex < matrixRange; columnIndex++) {
  232.                     matrix[rowIndex][columnIndex] = Integer.parseInt(scan.next());
  233.                 }
  234.             }
  235.  
  236.             if(scan.hasNext()) {
  237.                 System.err.println("Matrix data exceed the specified matrix range.");
  238.                 return null;
  239.             }
  240.         }
  241.         catch (NoSuchElementException e)
  242.         {
  243.             System.err.println("Matrix lack data for the specified matrix range.");
  244.             return null;
  245.         }
  246.         catch (NumberFormatException e) {
  247.             System.err.println("Symbols have been entered or exceeding permissible limits.");
  248.             return null;
  249.         }
  250.         return matrix;
  251.     }
  252.  
  253.     private static int[][] GetSourceMatrixFromFile() {
  254.         int matrixRange;
  255.         int[][] matrix;
  256.         String filename;
  257.         filename = InputFilePath(true);
  258.         File file = new File(filename);
  259.         try {
  260.  
  261.             Scanner scan = new Scanner(file);
  262.             matrixRange = GetMatrixRange(scan);
  263.             if (matrixRange == 0) {
  264.                 System.err.println("\nMatrix size error\n");
  265.                 scan.close();
  266.                 return null;
  267.             }
  268.             System.out.println(String.format("\nMatrix dimension: %d x %d", matrixRange, matrixRange));
  269.             matrix = ReadMatrix(scan, matrixRange);
  270.             scan.close();
  271.             return matrix;
  272.         }
  273.         catch (FileNotFoundException e) {
  274.             System.err.println("\nFile not found\n");
  275.             return null;
  276.         }
  277.     }
  278.    
  279.     private static int[][] GetSourceMatrix() {
  280.         String condition;
  281.         condition = ReadCondition();
  282.         if (Objects.equals(condition, "m")) {
  283.             return InputSourceMatrixManually();
  284.         }
  285.         else {
  286.             return GetSourceMatrixFromFile();
  287.         }
  288.     }
  289.  
  290.     private static void CopyRow(int[] sourceRow, int[] destRow, int columns) {
  291.         for (int column = 0; column < columns; column++) {
  292.             destRow[column] = sourceRow[column];
  293.         }
  294.     }
  295.  
  296.     private static void CopyMatrix(int[][] sourceMatrix, int[][] destMatrix, int rows, int columns) {
  297.         for (int row = 0; row < rows; row++) {
  298.             CopyRow(sourceMatrix[row], destMatrix[row], columns);
  299.         }
  300.     }
  301.  
  302.     private static void ShiftMatrix(int[][] matrix, int rows, int columns) {
  303.         int[] tempRow = new int[columns];
  304.         CopyRow(matrix[rows - 1], tempRow, columns);
  305.  
  306.         for (int row = rows - 1; row > 0; row--) {
  307.             CopyRow(matrix[row - 1], matrix[row], columns);
  308.         }
  309.         CopyRow(tempRow, matrix[0], columns);
  310.     }
  311.  
  312.     private static boolean SaveMatrix(String filename, int[][] matrix, int rows, int columns) {
  313.         try (PrintWriter out = new PrintWriter(filename)) {
  314.  
  315.             for (int row = 0; row < rows; row++) {
  316.                 for (int column = 0; column < columns; column++) {
  317.                     out.print(matrix[row][column]);
  318.                     out.print(" ");
  319.                 }
  320.                 out.print("\n");
  321.             }
  322.             return true;
  323.         }
  324.  
  325.         catch (IOException e) {
  326.             System.err.println(String.format("%s could not be opened for writing!", filename));
  327.             return false;
  328.         }
  329.     }
  330.  
  331.     private static void InputFilePathAndSaveMatrix(int[][] matrix, int rows, int columns) {
  332.         String path;
  333.         boolean isCorrect = false;
  334.         do {
  335.             path = InputFilePath(false);
  336.             isCorrect  = SaveMatrix(path, matrix, rows, columns);
  337.         } while (!isCorrect);
  338.  
  339.         System.out.println("Completed!");
  340.     }
  341.  
  342.     private static int GetMatrixLength (int[][] matrix) {
  343.         return matrix.length;
  344.     }
  345.  
  346.     public static void main(String[] args) {
  347.         int[][] matrix;
  348.         int matrixRange;
  349.         int extraRows;
  350.         int defaultValue;
  351.         defaultValue = 1;
  352.         extraRows = 2;
  353.  
  354.         PrintCondition();
  355.  
  356.         matrix = GetSourceMatrix();
  357.         if (matrix == null) {
  358.             return;
  359.         }
  360.  
  361.         matrixRange = GetMatrixLength(matrix);
  362.  
  363.         PrintMatrix(matrix, matrixRange, matrixRange,"Source Matrix:");
  364.  
  365.         matrix = ResizeMatrix(matrix, matrixRange, matrixRange, extraRows, defaultValue);
  366.  
  367.         ShiftMatrix(matrix, matrixRange + extraRows, matrixRange);
  368.  
  369.         PrintMatrix(matrix, matrixRange + extraRows, matrixRange,"Shifted Matrix:");
  370.  
  371.         InputFilePathAndSaveMatrix(matrix, matrixRange + extraRows, matrixRange);
  372.     }
  373. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement