Advertisement
THOMAS_SHELBY_18

Lab2_3(Java)

Oct 22nd, 2023 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.93 KB | Source Code | 0 0
  1. package com.company;
  2.  
  3. import java.util.NoSuchElementException;
  4. import java.util.Scanner;
  5. import java.io.*;
  6.  
  7.  
  8. public class Main {
  9.     private static final Scanner scan = new Scanner(System.in);
  10.  
  11.     public static int getNum(int min, int max) {
  12.  
  13.         boolean isNotCorrect;
  14.         int num;
  15.  
  16.         num = 0;
  17.  
  18.         do {
  19.             isNotCorrect = false;
  20.             try {
  21.                 num = Integer.parseInt(scan.nextLine());
  22.             }
  23.             catch (NumberFormatException e) {
  24.                 isNotCorrect = true;
  25.                 System.out.print("Некорректный ввод! Введите значение еще раз: " );
  26.             }
  27.             if ((!isNotCorrect) && (num < min || num > max)) {
  28.                 isNotCorrect = true;
  29.                 System.out.print("Недопустимое значение! Введите значение еще раз: ");
  30.             }
  31.  
  32.         } while (isNotCorrect);
  33.         return num;
  34.     }
  35.     public static boolean checkFile(File file){
  36.         final int MIN_N = 1, MAX_N = 10;
  37.         int n;
  38.         boolean isFileIncorrect = false;
  39.  
  40.         n = 0;
  41.  
  42.         if (file.isFile()) {
  43.             if (file.canRead()) {
  44.                 try (Scanner fileScan = new Scanner(file)) {
  45.                     n = Integer.parseInt(fileScan.nextLine());
  46.                     if (fileScan.hasNext()){
  47.                         System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  48.                         isFileIncorrect = true;
  49.                     }
  50.                 }
  51.                 catch (FileNotFoundException e) {
  52.                     System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
  53.                     isFileIncorrect = true;
  54.                 }
  55.                 catch (NoSuchElementException e) {
  56.                     System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  57.                     isFileIncorrect = true;
  58.                 }
  59.  
  60.                 if (!isFileIncorrect && (n < MIN_N || n > MAX_N)) {
  61.                     System.out.println("В файле данные выходят за пределы допустимых значений. Пожалуйста проверьте файл и введите путь заново");
  62.                     isFileIncorrect = true;
  63.                 }
  64.             }
  65.             else {
  66.                 System.out.println("Файл по данному пути не может быть прочитан. Пожалуйста проверьте файл и введите путь заново");
  67.                 isFileIncorrect = true;
  68.             }
  69.         }
  70.         else {
  71.             System.out.println("Файла по данному пути не существует. Пожалуйста проверьте существование файла и введите путь заново");
  72.             isFileIncorrect = true;
  73.         }
  74.  
  75.         return isFileIncorrect;
  76.     }
  77.  
  78.     public static int inputNFromFile(File file) {
  79.         int n;
  80.         n = 0;
  81.         try (Scanner fileScan = new Scanner(file)) {
  82.             n = Integer.parseInt(fileScan.nextLine());
  83.  
  84.         } catch (IOException e) {
  85.             System.out.println("Не удалось считать данные из файла!");
  86.         }
  87.         return n;
  88.     }
  89.  
  90.     public static int inputN() {
  91.     final int MIN_N = 1, MAX_N = 10;
  92.         int choice, n;
  93.         boolean isFileIncorrect;
  94.         String pathFile;
  95.         File inputFile;
  96.  
  97.         System.out.println("Выберите вариант ввода:");
  98.         System.out.println("1. Ввод из консоли");
  99.         System.out.println("2. Ввод из файла");
  100.         System.out.print("Использовать вариант: ");
  101.         choice = getNum(1, 2);
  102.  
  103.         if (choice == 1) {
  104.             System.out.print( "Введите порядок матрицы от " + MIN_N + " до " + MAX_N + ":");
  105.             n = getNum(MIN_N, MAX_N);
  106.         }
  107.         else {
  108.             System.out.println("Данные в файле должны содержать натуральное число - порядок матрицы N от " + MIN_N + " до " + MAX_N);
  109.             do {
  110.                 System.out.print("Введите путь к файлу с его раширением:");
  111.                 pathFile = scan.nextLine() ;
  112.                 inputFile = new File(pathFile);
  113.                 isFileIncorrect = checkFile(inputFile);
  114.             } while(isFileIncorrect);
  115.             n = inputNFromFile(inputFile);
  116.         }
  117.         return n;
  118.     }
  119.     public static void fillMatrix(int[][] matrix, int n) {
  120.  
  121.         int i, j, counter;
  122.  
  123.         i = 0;
  124.         counter = 1;
  125.  
  126.         do {
  127.             if (i % 2 == 0) {
  128.                 for (j = 0; j < n; j++){
  129.                     matrix[i][j] = counter;
  130.                     counter++;
  131.                 }
  132.             }
  133.             else {
  134.                 for (j = n - 1; j > -1; j--) {
  135.                     matrix[i][j] = counter;
  136.                     counter++;
  137.                 }
  138.             }
  139.             i++;
  140.         } while (i < n);
  141.     }
  142.     public static void outputMatrix(int[][] matrix, int  n) {
  143.  
  144.         int i, j, choice;
  145.         String path, element ;
  146.         boolean isFileIncorrect;
  147.  
  148.         System.out.println("Выберите вариант вывода: ");
  149.         System.out.println("1. Вывод в консоль");
  150.         System.out.println("2. Вывод в файл");
  151.         System.out.print("Использовать вариант: ");
  152.         choice = getNum(1, 2);
  153.  
  154.         if (choice == 1) {
  155.             for (i = 0; i < n; i++) {
  156.                 for (j = 0; j < n; j++) {
  157.                     System.out.printf("%5d", matrix[i][j]);
  158.                 }
  159.                 System.out.println();
  160.             }
  161.         }
  162.         else {
  163.             System.out.println("Для вывода введите путь к файлу и его имя." + '\n' + "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию).");
  164.             do {
  165.                 isFileIncorrect = false;
  166.                 System.out.print("Введите путь к файлу и его имя c расширением: ");
  167.                 path = scan.nextLine();
  168.                 File outputFile = new File(path);
  169.                 try {
  170.                     if (outputFile.isFile()) {
  171.                         if (outputFile.canWrite()) {
  172.                             try (FileWriter writer = new FileWriter(outputFile)) {
  173.                                 for (i = 0; i < n; i++) {
  174.                                     for (j = 0; j < n; j++) {
  175.                                         element = String.format("%5d", matrix[i][j]);
  176.                                         writer.write(element);
  177.                                     }
  178.                                     writer.write('\n');
  179.                                 }
  180.                             }
  181.                         } else {
  182.                             System.out.println("Файл доступен только для чтения!");
  183.                             isFileIncorrect = true;
  184.                         }
  185.                     } else {
  186.                         outputFile.createNewFile();
  187.                         try (FileWriter writer = new FileWriter(outputFile)) {
  188.                             for (i = 0; i < n; i++) {
  189.                                 for (j = 0; j < n; j++) {
  190.                                     element = String.format("%5d", matrix[i][j]);
  191.                                     writer.write(element);
  192.                                 }
  193.                                 writer.write('\n');
  194.                             }
  195.                         }
  196.                     }
  197.                 }
  198.                 catch (IOException e) {
  199.                     System.out.println("Не удалось вывести в файл!");
  200.                     isFileIncorrect = true;
  201.                 }
  202.             } while (isFileIncorrect);
  203.             System.out.println("Вывод данных... успешно!");
  204.         }
  205.     }
  206.     public static void main(String[] args) {
  207.         int n;
  208.         System.out.println("Данная программа заполнит матрицу чисел змейкой");
  209.  
  210.         n = inputN();
  211.  
  212.         int[][] matrix = new int[n][n];
  213.  
  214.         fillMatrix(matrix, n);
  215.         outputMatrix(matrix, n);
  216.         scan.close();
  217.  
  218.     }
  219. }
  220.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement