Advertisement
gguuppyy

лаба2н4

Nov 1st, 2023 (edited)
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.27 KB | Source Code | 0 0
  1. import java.io.*;
  2. import java.util.Scanner;
  3. class Main {
  4.     public static Scanner scan = new Scanner(System.in);
  5.  
  6.     public static void outputCondition() {
  7.         System.out.println("Данная программа находит элемент массива, состоящего из N натуральных чисел, сумма цифр которого наибольшая.");
  8.     }
  9.  
  10.     public static void outputInputChoice() {
  11.         System.out.println("Введите 0, если хотите ввести данные из консоли, и 1, если из файла:");
  12.     }
  13.  
  14.     public static boolean isUserChoice() {
  15.         final int MIN = 0;
  16.         final int MAX = 1;
  17.         int k = 0;
  18.         boolean isIncorrect;
  19.         boolean isChoice;
  20.         do {
  21.             isIncorrect = false;
  22.             try {
  23.                 k = Integer.parseInt(scan.nextLine());
  24.             } catch (Exception e) {
  25.                 System.out.println("Введены некорректные данные. Повторите ввод:");
  26.                 isIncorrect = true;
  27.             }
  28.             if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
  29.                 System.out.println("Число не входит в допустимый диапазон. Повторите ввод:");
  30.                 isIncorrect = true;
  31.             }
  32.         } while (isIncorrect);
  33.  
  34.         isChoice = !(k == MIN);
  35.         return isChoice;
  36.     }
  37.  
  38.     public static void outputPathInputCondition() {
  39.         System.out.println("Введите путь к файлу, содержащему массив:");
  40.     }
  41.  
  42.     public static boolean isFileCorrect(String path) {
  43.         boolean isIncorrect = false;
  44.         File F = new File(path);
  45.         if (!F.exists()) {
  46.             isIncorrect = true;
  47.             System.out.print("Файл по заданному пути отсутствует. ");
  48.         }
  49.         else if (!path.endsWith(".txt")) {
  50.             isIncorrect = true;
  51.             System.out.print("Недопустимое расширение файла. ");
  52.         }
  53.         return isIncorrect;
  54.     }
  55.  
  56.     public static int readSizeFromFile(Scanner scan) {
  57.         int size = 0;
  58.         if (scan.hasNextInt())
  59.             size = scan.nextInt();
  60.         return size;
  61.     }
  62.  
  63.     public static int[] inputArrayFromFile() {
  64.         String path;
  65.         int[] a = null;
  66.         int n = 0;
  67.         boolean isIncorrect;
  68.         do {
  69.             outputPathInputCondition();
  70.             isIncorrect = false;
  71.             path = TakePath();
  72.             Scanner scan = null;
  73.             try {
  74.                 scan = new Scanner(new File(path));
  75.             } catch (FileNotFoundException e) {
  76.                 System.out.println(e.getMessage());
  77.                 isIncorrect = true;
  78.             }
  79.             if (!isIncorrect)
  80.                 n = readSizeFromFile(scan);
  81.  
  82.             if (!isIncorrect) {
  83.                 if (n < 1) {
  84.                     isIncorrect = true;
  85.                     System.out.println("Некорректные размеры массива");
  86.                 } else {
  87.                     a = new int[n];
  88.                     try {
  89.                         for (int i = 0; i < n; i++) {
  90.                             a[i] = scan.nextInt();
  91.                         }
  92.                     } catch (NumberFormatException e) {
  93.                         System.err.println("Некорректные данные в файле.");
  94.                         isIncorrect = true;
  95.                     }
  96.                 }
  97.             }
  98.         } while (isIncorrect);
  99.         return a;
  100.     }
  101.  
  102.     public static void outputSuccessfulInput() {
  103.         System.out.println("Данные из файла считаны успешно.");
  104.     }
  105.  
  106.     public static void outputNumberConditionForConsole() {
  107.         System.out.println("Введите количество элементов массива N:");
  108.     }
  109.  
  110.     public static int inputNumberFromConsole() {
  111.         final int MIN = 2;
  112.         int n = 0;
  113.         boolean isIncorrect;
  114.         do {
  115.             isIncorrect = false;
  116.             try {
  117.                 n = Integer.parseInt(scan.nextLine());
  118.             } catch (Exception e) {
  119.                 System.out.println("Введены некорректные данные. Повторите ввод:");
  120.                 isIncorrect = true;
  121.             }
  122.             if ((!isIncorrect) && (n < MIN)) {
  123.                 System.out.println("Введено недопустимое число элементов. Повторите ввод:");
  124.                 isIncorrect = true;
  125.             }
  126.         } while (isIncorrect);
  127.         return n;
  128.     }
  129.  
  130.     public static void outputInputConditionForConsole() {
  131.         System.out.println("Введите натуральные числа, являющиеся элементами массива.");
  132.     }
  133.  
  134.     public static int[] inputArrayFromConsole(int n) {
  135.         final int NUM_MIN = 1;
  136.         int i;
  137.         int[] a = new int[n];
  138.         boolean isIncorrect;
  139.         for (i = 0; i < a.length; i++) {
  140.             do {
  141.                 System.out.println("Введите " + (i + 1) + " элемент массива:");
  142.                 isIncorrect = false;
  143.                 try {
  144.                     a[i] = Integer.parseInt(scan.nextLine());
  145.                 } catch (Exception e) {
  146.                     System.out.println("Введены некорректные данные. Повторите ввод:");
  147.                     isIncorrect = true;
  148.                 }
  149.                 if ((!isIncorrect) && (a[i] < NUM_MIN)) {
  150.                     System.out.println("Введённые данные не соответствуют условию. Повторите ввод:");
  151.                     isIncorrect = true;
  152.                 }
  153.             } while (isIncorrect);
  154.         }
  155.         return a;
  156.     }
  157.  
  158.     public static int[] inputArray(boolean isInput) {
  159.         int n;
  160.         int[] a;
  161.         if (isInput) {
  162.             a = inputArrayFromFile();
  163.             outputSuccessfulInput();
  164.         }
  165.         else {
  166.             outputNumberConditionForConsole();
  167.             n = inputNumberFromConsole();
  168.             outputInputConditionForConsole();
  169.             a = inputArrayFromConsole(n);
  170.         }
  171.         return a;
  172.     }
  173.  
  174.     public static int sumNumbers(int num) {
  175.         int sum = 0;
  176.         while (num > 0) {
  177.             sum += num % 10;
  178.             num /= 10;
  179.         }
  180.         return sum;
  181.     }
  182.  
  183.     public static int maxSumNumbers(int[] a) {
  184.         int maxSum = 0;
  185.         int maxNum = 0;
  186.         for (int i = 0; i < a.length; i++) {
  187.             int currentSum = sumNumbers(a[i]);
  188.             if (currentSum > maxSum) {
  189.                 maxSum = currentSum;
  190.                 maxNum = a[i];
  191.             }
  192.         }
  193.         return maxNum;
  194.     }
  195.     public static void outputOutputChoice() {
  196.         System.out.println("Введите 0, если хотите вывести данные в консоль, и 1 - в  файл:");
  197.     }
  198.  
  199.     public static void outputPathOutputCondition() {
  200.         System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
  201.     }
  202.  
  203.     public static String TakePath() {
  204.         String path;
  205.         boolean isIncorrect;
  206.         do {
  207.             isIncorrect = false;
  208.             path = scan.nextLine();
  209.             isIncorrect = isFileCorrect(path);
  210.             if (isIncorrect) {
  211.                 System.out.println("Повторите ввод пути к файлу:");
  212.             }
  213.         } while (isIncorrect);
  214.         return path;
  215.     }
  216.  
  217.     public static void outputInFile(int maxNum) {
  218.         String path;
  219.         boolean isIncorrect;
  220.         do {
  221.             isIncorrect = false;
  222.             path = TakePath();
  223.             try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
  224.                 fileWriter.write("Число с наибольшей суммой: ");
  225.                 fileWriter.println(maxNum);
  226.             }
  227.             catch (IOException e) {
  228.                 System.out.print(e.getMessage());
  229.                 isIncorrect = true;
  230.             }
  231.         } while (isIncorrect);
  232.  
  233.     }
  234.  
  235.     public static void outputSuccessfulOutput() {
  236.         System.out.println("Данные записаны в файл успешно.");
  237.     }
  238.  
  239.     public static void outputInConsole(int maxNum) {
  240.         System.out.printf("Число с наибольшей суммой: %d",
  241.                 maxNum);
  242.     }
  243.     public static void outputmaxNum(boolean isOutput, int maxNum) {
  244.         if (isOutput) {
  245.             outputPathOutputCondition();
  246.             outputInFile(maxNum);
  247.             outputSuccessfulOutput();
  248.         }
  249.         else {
  250.             outputInConsole(maxNum);
  251.         }
  252.     }
  253.  
  254.     public static void main(String[] args) {
  255.         int maxNum;
  256.         int[] a;
  257.         boolean isInput;
  258.         boolean isOutput;
  259.         outputCondition();
  260.         outputInputChoice();
  261.         isInput = isUserChoice();
  262.         a = inputArray(isInput);
  263.         maxNum = maxSumNumbers(a);
  264.         outputOutputChoice();
  265.         isOutput = isUserChoice();
  266.         outputmaxNum(isOutput, maxNum);
  267.         scan.close();
  268.     }
  269. }
  270.  
  271.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement