Advertisement
deced

Untitled

Oct 27th, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.54 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileReader;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Scanner;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8.  
  9. public class Main {
  10.     static Scanner scanner;
  11.  
  12.     static int getMatrixSize(String message) {
  13.         int ret = 0;
  14.         boolean isIncorrect;
  15.         String inputLine;
  16.         do {
  17.             System.out.println("Введите " + message + " матрицы ");
  18.             isIncorrect = false;
  19.             inputLine = scanner.nextLine();
  20.             try {
  21.                 ret = Integer.parseInt(inputLine);
  22.             } catch (Exception ex) {
  23.                 System.out.println(message + " должно быть числом");
  24.                 isIncorrect = true;
  25.             }
  26.             if (((ret < 1) || (ret > 10000)) && !isIncorrect) {
  27.                 System.out.println(message + " должно промежутку от 1 до 10000");
  28.                 isIncorrect = true;
  29.             }
  30.         } while (isIncorrect);
  31.         return ret;
  32.     }
  33.  
  34.     static String getOutputDirectory() {
  35.         String ret;
  36.         boolean isIncorrect;
  37.         isIncorrect = true;
  38.         do {
  39.             System.out.println("Введите директорию, в которую хотите сохранить вывод программы");
  40.             ret = scanner.nextLine();
  41.             File outputDirectory = new File(ret);
  42.             if (outputDirectory.isDirectory() && outputDirectory.exists()) {
  43.                 isIncorrect = false;
  44.             } else {
  45.                 System.out.println("Такой директории не существует.Попробуйте ещё раз");
  46.             }
  47.  
  48.         } while (isIncorrect);
  49.         return ret;
  50.     }
  51.  
  52.     static int getMatrixItem(int i, int j) {
  53.         int ret = 0;
  54.         boolean isIncorrect;
  55.         String inputLine;
  56.         do {
  57.             System.out.println("Введите значение элемента матрицы [" + i + "," + j + "] ");
  58.             inputLine = scanner.nextLine();
  59.             isIncorrect = false;
  60.             try {
  61.                 ret = Integer.parseInt(inputLine);
  62.             } catch (Exception ex) {
  63.                 System.out.println("Значение матрицы должно быть числом\n");
  64.                 isIncorrect = true;
  65.             }
  66.         } while (isIncorrect);
  67.         return ret;
  68.     }
  69.  
  70.     static int[][] getMatrixFromConsole(int width, int height) {
  71.         int[][] ret = new int[width][height];
  72.         for (int i = 0; i < ret.length; i++) {
  73.             for (int j = 0; j < ret[i].length; j++) {
  74.                 ret[i][j] = getMatrixItem(i, j);
  75.             }
  76.         }
  77.         return ret;
  78.     }
  79.  
  80.     static boolean isFileCorrect(String path, int width, int height) throws IOException {
  81.         int totalCount = 0;
  82.         boolean isCorrect;
  83.         FileReader reader = new FileReader(path);
  84.         Scanner scanner = new Scanner(reader);
  85.         isCorrect = true;
  86.         while (scanner.hasNextLine() && isCorrect) {
  87.             String line = scanner.nextLine();
  88.             Matcher matcherDigit = Pattern.compile("\\d+").matcher(line);
  89.             Matcher matcherSymbol = Pattern.compile("[a-zA-Z]").matcher(line);
  90.             int thisLineCount = 0;
  91.             if (matcherSymbol.find())
  92.                 isCorrect = false;
  93.             while (matcherDigit.find()) {
  94.                 thisLineCount++;
  95.                 totalCount++;
  96.             }
  97.             if (thisLineCount != width && totalCount != width * height) {
  98.                 isCorrect = false;
  99.             }
  100.         }
  101.         scanner.close();
  102.         return isCorrect;
  103.     }
  104.  
  105.     static String getMatrixFilePath(int width, int height) throws IOException {
  106.         String ret;
  107.         boolean isIncorrect;
  108.         isIncorrect = true;
  109.         do {
  110.             System.out.println("Введите абсолютный путь к файлу ");
  111.             ret = scanner.nextLine();
  112.             File matrixFile = new File(ret);
  113.             if (!matrixFile.exists()) {
  114.                 System.out.println("Файл не найден");
  115.             } else {
  116.                 if (isFileCorrect(ret, width, height)) {
  117.                     isIncorrect = false;
  118.                 } else {
  119.                     System.out.println("Данные в файле некорректны");
  120.                 }
  121.             }
  122.         } while (isIncorrect);
  123.         return ret;
  124.     }
  125.  
  126.     static int[][] getMatrixFromFile(int width, int height) throws IOException {
  127.         int[][] ret = new int[width][height];
  128.         String filePath;
  129.         filePath = getMatrixFilePath(width, height);
  130.         FileReader matrixFile = new FileReader(filePath);
  131.         Scanner scanner = new Scanner(matrixFile);
  132.         for (int i = 0; i < ret[0].length; i++) {
  133.             for (int j = 0; j < ret.length; j++) {
  134.                 ret[j][i] = scanner.nextInt();
  135.             }
  136.             scanner.nextLine();
  137.         }
  138.         scanner.close();
  139.         return ret;
  140.     }
  141.  
  142.     static String getInputType() {
  143.         String ret = "";
  144.         boolean isIncorrect;
  145.         String inputLine = "";
  146.         isIncorrect = true;
  147.         do {
  148.             System.out.println("Выберите способ задания матрицы файл/консоль (ф/к)");
  149.             inputLine = scanner.nextLine();
  150.             if (inputLine.equalsIgnoreCase("файл") || inputLine.equalsIgnoreCase("ф")) {
  151.                 ret = "File";
  152.                 isIncorrect = false;
  153.             } else if (inputLine.equalsIgnoreCase("консоль") || inputLine.equalsIgnoreCase("к")) {
  154.                 ret = "Console";
  155.                 isIncorrect = false;
  156.             }
  157.  
  158.         } while (isIncorrect);
  159.         return ret;
  160.     }
  161.  
  162.     static int[][] getMatrix() throws IOException {
  163.         int width = getMatrixSize("количество столбцов");
  164.         int height = getMatrixSize("количество строк");
  165.         String inputType;
  166.         int[][] retMatrix = new int[width][height];
  167.         inputType = getInputType();
  168.         if (inputType == "Console") {
  169.             retMatrix = getMatrixFromConsole(width, height);
  170.         } else if (inputType == "File") {
  171.             retMatrix = getMatrixFromFile(width, height);
  172.         }
  173.         return retMatrix;
  174.     }
  175.  
  176.     static boolean isColumnSorted(int[] columnToCheck) {
  177.         boolean ret = true;
  178.         for (int i = 1; i < columnToCheck.length; i++) {
  179.             if (columnToCheck[i] < columnToCheck[i - 1]) {
  180.                 ret = false;
  181.             }
  182.         }
  183.         return ret;
  184.     }
  185.  
  186.     static void printSortedCountToFile(int count) throws IOException {
  187.         String path;
  188.         path = getOutputDirectory();
  189.         FileWriter myWriter = new FileWriter(path + "\\output.txt");
  190.         myWriter.write("Количество столбов с элементами, отсортированными по возрастанию = " + count);
  191.         myWriter.close();
  192.         System.out.println("Матрица сохранена по указанному пути");
  193.     }
  194.  
  195.     static void printSortedCount(int count) throws IOException {
  196.         System.out.println("Количество столбов с элементами, отсортированными по возрастанию = " + count);
  197.     }
  198.  
  199.     static void getSortedCount(int[][] matrixToCheck) throws IOException {
  200.         int count = 0;
  201.         for (int i = 0; i < matrixToCheck.length; i++) {
  202.             if (isColumnSorted(matrixToCheck[i])) {
  203.                 count++;
  204.             }
  205.         }
  206.         printSortedCount(count);
  207.         printSortedCountToFile(count);
  208.     }
  209.  
  210.     public static void main(String[] args) throws IOException {
  211.         scanner = new Scanner(System.in);
  212.         int[][] mainMatrix = getMatrix();
  213.         getSortedCount(mainMatrix);
  214.  
  215.     }
  216.  
  217. }
  218.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement