Advertisement
gguuppyy

лаба2н3

Nov 2nd, 2023 (edited)
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.43 KB | Source Code | 0 0
  1. import java.io.File;
  2. import java.util.Scanner;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. public class Main {
  7.  
  8.     public static final int
  9.             MIN_O = 1,
  10.             MAX_O = 10,
  11.             YES = 1,
  12.             NO = 2;
  13.     static Scanner scanConsole = new Scanner(System.in);
  14.     static Scanner scanFile;
  15.     static File file;
  16.  
  17.     public static void printTask() {
  18.         System.out.println("Данная программа находит количество хорошистов в группе (оценки не ниже шестерки, но не все выше восьмерки).");
  19.     }
  20.  
  21.  
  22.     public static boolean chooseFileInput() {
  23.         int isFileInput;
  24.         boolean isCorrect, choose;
  25.         isFileInput = 0;
  26.         choose = true;
  27.         do {
  28.             System.out.println("Вы хотите вводить матрицу через файл? (Да - " + YES + " / Нет - " + NO + ")");
  29.             isCorrect = true;
  30.             try {
  31.                 isFileInput = Integer.parseInt(scanConsole.nextLine());
  32.             } catch (NumberFormatException e) {
  33.                 System.out.println("Некорректный выбор!");
  34.                 isCorrect = false;
  35.             }
  36.             if (isCorrect) {
  37.                 if (isFileInput == 1)
  38.                     choose = true;
  39.                 else if (isFileInput == 2)
  40.                     choose = false;
  41.                 else {
  42.                     isCorrect = false;
  43.                     System.out.println("Некорректный выбор!");
  44.                 }
  45.             }
  46.         } while (!isCorrect);
  47.         return choose;
  48.     }
  49.  
  50.     public static boolean chooseFileOutput() {
  51.         int isFileInput;
  52.         boolean isCorrect, choose;
  53.         isFileInput = 0;
  54.         choose = true;
  55.         do {
  56.             System.out.println("Вы хотите выводить матрицу через файл? (Да - " + YES + " / Нет - " + NO + ")");
  57.             isCorrect = true;
  58.             try {
  59.                 isFileInput = Integer.parseInt(scanConsole.nextLine());
  60.             } catch (NumberFormatException e) {
  61.                 System.out.println("Некорректный выбор!");
  62.                 isCorrect = false;
  63.             }
  64.             if (isCorrect) {
  65.                 if (isFileInput == 1)
  66.                     choose = true;
  67.                 else if (isFileInput == 2)
  68.                     choose = false;
  69.                 else {
  70.                     isCorrect = false;
  71.                     System.out.println("Некорректный выбор!");
  72.                 }
  73.             }
  74.         } while (!isCorrect);
  75.         return choose;
  76.     }
  77.  
  78.     public static String fileInputPath(boolean isFileForRead){
  79.         boolean isNotCorrect;
  80.         String path;
  81.         if (isFileForRead) {
  82.             System.out.println("Введите путь к файлу для чтения: ");
  83.         } else {
  84.             System.out.println("Введите путь к файлу для записи: ");
  85.         }
  86.         do {
  87.             isNotCorrect = false;
  88.             path = scanConsole.nextLine();
  89.             File file = new File(path);
  90.             if (!file.exists()) {
  91.                 isNotCorrect = true;
  92.                 System.out.println("Файл не найден. Повторите попытку.");
  93.             }
  94.         } while (isNotCorrect);
  95.         return path;
  96.     }
  97.  
  98.     public static int[][] fileMatrixInput(String path) {
  99.         boolean isNotCorrect;
  100.         boolean isFileForRead = true;
  101.         int rows = 0;
  102.         int cols = 0;
  103.         int[][] matrix = null;
  104.         int i = 0;
  105.         int j;
  106.  
  107.         do {
  108.             isNotCorrect = false;
  109.             try (Scanner fileReader = new Scanner(new File(path))) {
  110.                 if (fileReader.hasNextInt()) {
  111.                     rows = fileReader.nextInt();
  112.                 } else {
  113.                     isNotCorrect = true;
  114.                     System.out.println("Ошибка! Не удалось определить количество строк матрицы.");
  115.                     continue;
  116.                 }
  117.  
  118.                 if (fileReader.hasNextInt()) {
  119.                     cols = fileReader.nextInt();
  120.                 } else {
  121.                     isNotCorrect = true;
  122.                     System.out.println("Ошибка! Не удалось определить количество столбцов матрицы.");
  123.                     continue;
  124.                 }
  125.  
  126.                 matrix = new int[rows][cols];
  127.                 fileReader.nextLine();
  128.  
  129.                 while ((!isNotCorrect) && (i < rows)) {
  130.                     j = 0;
  131.                     while ((!isNotCorrect) && (j < cols)) {
  132.                         if (fileReader.hasNextInt()) {
  133.                             matrix[i][j] = fileReader.nextInt();
  134.                         } else {
  135.                             isNotCorrect = true;
  136.                             System.out.println("Ошибка! Найдено некорректное значение элемента матрицы.");
  137.                             i--;
  138.                             continue;
  139.                         }
  140.                         j++;
  141.                     }
  142.                     i++;
  143.                 }
  144.             } catch (FileNotFoundException e) {
  145.                 isNotCorrect = true;
  146.                 System.out.println("Не удалось открыть файл.");
  147.             }
  148.             if (isNotCorrect) {
  149.                 System.out.println("Повторите попытку.");
  150.                 path = fileInputPath(isFileForRead);
  151.             }
  152.         } while (isNotCorrect);
  153.         return matrix;
  154.     }
  155.  
  156.  
  157.     public static int[][] consoleMatrixCreation() {
  158.         int rows = 0;
  159.         int cols = 0;
  160.         boolean isNotCorrect;
  161.  
  162.         do {
  163.             System.out.println("Введите количество строк матрицы: ");
  164.             try {
  165.                 rows = Integer.parseInt(scanConsole.nextLine());
  166.                 if (rows <= 0) {
  167.                     System.out.println("Количество строк должно быть больше нуля. Повторите попытку.");
  168.                     isNotCorrect = true;
  169.                 } else {
  170.                     isNotCorrect = false;
  171.                 }
  172.             } catch (NumberFormatException e) {
  173.                 System.out.println("Ошибка ввода! Повторите попытку.");
  174.                 isNotCorrect = true;
  175.             }
  176.         } while (isNotCorrect);
  177.  
  178.         do {
  179.             System.out.println("Введите количество столбцов матрицы: ");
  180.             try {
  181.                 cols = Integer.parseInt(scanConsole.nextLine());
  182.                 if (cols <= 0) {
  183.                     System.out.println("Количество столбцов должно быть больше нуля. Повторите попытку.");
  184.                     isNotCorrect = true;
  185.                 } else {
  186.                     isNotCorrect = false;
  187.                 }
  188.             } catch (NumberFormatException e) {
  189.                 System.out.println("Ошибка ввода! Повторите попытку.");
  190.                 isNotCorrect = true;
  191.             }
  192.         } while (isNotCorrect);
  193.  
  194.         int[][] matrix = new int[rows][cols];
  195.  
  196.         for (int i = 0; i < rows; i++) {
  197.             for (int j = 0; j < cols; j++) {
  198.                 do {
  199.                     System.out.println("Введите " + (j + 1) + " элемент " + (i + 1) + " строки");
  200.                     isNotCorrect = false;
  201.                     try {
  202.                         matrix[i][j] = Integer.parseInt(scanConsole.nextLine());
  203.                     } catch (NumberFormatException e) {
  204.                         System.out.println("Ошибка ввода! Повторите попытку.");
  205.                         isNotCorrect = true;
  206.                     }
  207.                     if ((!isNotCorrect) && ((matrix[i][j] < 1) || (matrix[i][j] > 10))) {
  208.                         System.out.println("Ошибка ввода! Введено число неверного диапазона!");
  209.                         isNotCorrect = true;
  210.                     }
  211.                 } while (isNotCorrect);
  212.             }
  213.         }
  214.         return matrix;
  215.     }
  216.  
  217.     public static int[] searchGoodStudents(int[][] matrix) {
  218.         int rows = matrix.length;
  219.         int cols = matrix[0].length;
  220.  
  221.         int[] goodStudents = null;
  222.         int search = 0;
  223.  
  224.         for (int i = 0; i < rows; i++) {
  225.             int eightGradeCounter = 0;
  226.             int sixGradeCounter = 0;
  227.             int CheckGradeCounter = 0;
  228.  
  229.             for (int j = 0; j < cols; j++) {
  230.                 if (matrix[i][j] > 5) {
  231.                     sixGradeCounter++;
  232.                 }
  233.  
  234.                 if (matrix[i][j] < 9) {
  235.                     eightGradeCounter++;
  236.                 }
  237.  
  238.                 if (matrix[i][j] < 6) {
  239.                     CheckGradeCounter++;
  240.                 }
  241.             }
  242.  
  243.             if (sixGradeCounter > 0 && eightGradeCounter > 0 && CheckGradeCounter==0) {
  244.                 search++;
  245.                 int[] temp = new int[search];
  246.  
  247.                 for (int k = 0; k < search - 1; k++) {
  248.                     temp[k] = goodStudents[k];
  249.                 }
  250.  
  251.                 temp[search - 1] = i + 1;
  252.  
  253.                 if (goodStudents != null) {
  254.                     System.arraycopy(goodStudents, 0, temp, 0, search - 1);
  255.                 }
  256.  
  257.                 goodStudents = temp;
  258.             }
  259.         }
  260.  
  261.         return goodStudents;
  262.     }
  263.  
  264.     public static int searchGoodSumStudent(int[][] matrix) {
  265.         int rows = matrix.length;
  266.         int cols = matrix[0].length;
  267.         int search = 0;
  268.  
  269.         for (int i = 0; i < rows; i++) {
  270.             int eightGradeCounter = 0;
  271.             int sixGradeCounter = 0;
  272.             int CheckGradeCounter = 0;
  273.  
  274.             for (int j = 0; j < cols; j++) {
  275.                 if (matrix[i][j] > 5) {
  276.                     sixGradeCounter++;
  277.                 }
  278.  
  279.                 if (matrix[i][j] < 9) {
  280.                     eightGradeCounter++;
  281.                 }
  282.  
  283.                 if (matrix[i][j] < 6) {
  284.                     CheckGradeCounter++;
  285.                 }
  286.             }
  287.  
  288.             if (sixGradeCounter > 0 && eightGradeCounter > 0 && CheckGradeCounter==0) {
  289.                 search++;
  290.             }
  291.         }
  292.  
  293.         return search;
  294.     }
  295.  
  296.     public static void saveMatrixToFile(int[][] matrix, String filePath, int[] student, int sum) {
  297.         int rows = matrix.length;
  298.         int cols = matrix[0].length;
  299.  
  300.         File file = new File(filePath);
  301.         if (file.exists()) {
  302.             System.out.print("Файл уже существует. Перезаписать? (y/n): ");
  303.             Scanner scanner = new Scanner(System.in);
  304.             char choice = scanner.nextLine().charAt(0);
  305.  
  306.             if (choice != 'y' && choice != 'Y') {
  307.                 System.out.println("Запись в файл отменена.");
  308.                 scanner.close();
  309.                 return;
  310.             }
  311.             scanner.close();
  312.         }
  313.  
  314.         try {
  315.             FileWriter outputFile = new FileWriter(filePath);
  316.  
  317.             // Запись матрицы в файл
  318.             outputFile.write(rows + " " + cols + System.lineSeparator());
  319.             for (int i = 0; i < rows; i++) {
  320.                 for (int j = 0; j < cols; j++) {
  321.                     outputFile.write(matrix[i][j] + " ");
  322.                 }
  323.                 outputFile.write(System.lineSeparator());
  324.             }
  325.  
  326.             outputFile.write("Номера хорошистов:");
  327.             for (int i = 0; i < sum; i++) {
  328.                 outputFile.write(" " + student[i]);
  329.             }
  330.             outputFile.write(System.lineSeparator());
  331.             outputFile.write("Сумма хорошистов:" + sum);
  332.             outputFile.close();
  333.             System.out.println("Матрица успешно записана в файл.");
  334.         } catch (IOException e) {
  335.             System.out.println("Не удалось открыть файл для записи.");
  336.         }
  337.     }
  338.  
  339.     public static void printMatrix(int[][] matrix, int[] student, int sum) {
  340.         int rows = matrix.length;
  341.         int cols = matrix[0].length;
  342.  
  343.         for (int row = 0; row < rows; row++) {
  344.             for (int col = 0; col < cols; col++) {
  345.                 System.out.print(matrix[row][col] + " ");
  346.             }
  347.             System.out.println();
  348.         }
  349.         System.out.print("Номера хорошистов: ");
  350.         for (int i = 0; i < sum; i++) {
  351.             System.out.print(student[i] + " ");
  352.         }
  353.         System.out.println();
  354.         System.out.println("Сумма хорошистов: " + sum);
  355.     }
  356.  
  357.     public static void choiceInput() {
  358.         String filePathInput;
  359.         String filePathOutput;
  360.         boolean input;
  361.         boolean output;
  362.         boolean isInCorrect;
  363.         int sum;
  364.         int[][] matrix;
  365.         int[] student;
  366.  
  367.         Scanner scanner = new Scanner(System.in);
  368.         input = chooseFileInput();
  369.  
  370.         if (input == true) {
  371.  
  372.             filePathInput=fileInputPath(input);
  373.             matrix=fileMatrixInput(filePathInput);
  374.             student=searchGoodStudents(matrix);
  375.             sum=searchGoodSumStudent(matrix);
  376.  
  377.             output = chooseFileOutput();
  378.  
  379.             if(output==true)
  380.             {
  381.                 filePathOutput=fileInputPath(false);
  382.                 saveMatrixToFile(matrix,filePathOutput,student,sum);
  383.             }
  384.  
  385.             if (output==false)
  386.             {
  387.                 printMatrix(matrix,student,sum);
  388.             }
  389.         }
  390.  
  391.         if (input==false)
  392.         {
  393.             matrix=consoleMatrixCreation();
  394.             student=searchGoodStudents(matrix);
  395.             sum=searchGoodSumStudent(matrix);
  396.  
  397.             output = chooseFileOutput();
  398.  
  399.             if(output==true)
  400.             {
  401.                 filePathOutput=fileInputPath(false);
  402.                 saveMatrixToFile(matrix,filePathOutput,student,sum);
  403.             }
  404.  
  405.             if (output==false)
  406.             {
  407.                 printMatrix(matrix,student,sum);
  408.             }
  409.  
  410.         }
  411.     }
  412.  
  413.     public static void main(String[] args) {
  414.         printTask();
  415.         choiceInput();
  416.     }
  417. }
  418.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement