Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Scanner;
- class Main {
- public static Scanner scan = new Scanner(System.in);
- public static void outputCondition() {
- System.out.println("Данная программа находит элемент массива, состоящего из N натуральных чисел, сумма цифр которого наибольшая.");
- }
- public static void outputInputChoice() {
- System.out.println("Введите 0, если хотите ввести данные из консоли, и 1, если из файла:");
- }
- public static boolean isUserChoice() {
- final int MIN = 0;
- final int MAX = 1;
- int k = 0;
- boolean isIncorrect;
- boolean isChoice;
- do {
- isIncorrect = false;
- try {
- k = Integer.parseInt(scan.nextLine());
- } catch (Exception e) {
- System.out.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
- System.out.println("Число не входит в допустимый диапазон. Повторите ввод:");
- isIncorrect = true;
- }
- } while (isIncorrect);
- isChoice = !(k == MIN);
- return isChoice;
- }
- public static void outputPathInputCondition() {
- System.out.println("Введите путь к файлу, содержащему массив:");
- }
- public static boolean isFileCorrect(String path) {
- boolean isIncorrect = false;
- File F = new File(path);
- if (!F.exists()) {
- isIncorrect = true;
- System.out.print("Файл по заданному пути отсутствует. ");
- }
- else if (!path.endsWith(".txt")) {
- isIncorrect = true;
- System.out.print("Недопустимое расширение файла. ");
- }
- return isIncorrect;
- }
- public static int readSizeFromFile(Scanner scan) {
- int size = 0;
- if (scan.hasNextInt())
- size = scan.nextInt();
- return size;
- }
- public static int[] inputArrayFromFile() {
- String path;
- int[] a = null;
- int n = 0;
- boolean isIncorrect;
- do {
- outputPathInputCondition();
- isIncorrect = false;
- path = TakePath();
- Scanner scan = null;
- try {
- scan = new Scanner(new File(path));
- } catch (FileNotFoundException e) {
- System.out.println(e.getMessage());
- isIncorrect = true;
- }
- if (!isIncorrect)
- n = readSizeFromFile(scan);
- if (!isIncorrect) {
- if (n < 1) {
- isIncorrect = true;
- System.out.println("Некорректные размеры массива");
- } else {
- a = new int[n];
- try {
- for (int i = 0; i < n; i++) {
- a[i] = scan.nextInt();
- }
- } catch (NumberFormatException e) {
- System.err.println("Некорректные данные в файле.");
- isIncorrect = true;
- }
- }
- }
- } while (isIncorrect);
- return a;
- }
- public static void outputSuccessfulInput() {
- System.out.println("Данные из файла считаны успешно.");
- }
- public static void outputNumberConditionForConsole() {
- System.out.println("Введите количество элементов массива N:");
- }
- public static int inputNumberFromConsole() {
- final int MIN = 2;
- int n = 0;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- } catch (Exception e) {
- System.out.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- if ((!isIncorrect) && (n < MIN)) {
- System.out.println("Введено недопустимое число элементов. Повторите ввод:");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return n;
- }
- public static void outputInputConditionForConsole() {
- System.out.println("Введите натуральные числа, являющиеся элементами массива.");
- }
- public static int[] inputArrayFromConsole(int n) {
- final int NUM_MIN = 1;
- int i;
- int[] a = new int[n];
- boolean isIncorrect;
- for (i = 0; i < a.length; i++) {
- do {
- System.out.println("Введите " + (i + 1) + " элемент массива:");
- isIncorrect = false;
- try {
- a[i] = Integer.parseInt(scan.nextLine());
- } catch (Exception e) {
- System.out.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- if ((!isIncorrect) && (a[i] < NUM_MIN)) {
- System.out.println("Введённые данные не соответствуют условию. Повторите ввод:");
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- return a;
- }
- public static int[] inputArray(boolean isInput) {
- int n;
- int[] a;
- if (isInput) {
- a = inputArrayFromFile();
- outputSuccessfulInput();
- }
- else {
- outputNumberConditionForConsole();
- n = inputNumberFromConsole();
- outputInputConditionForConsole();
- a = inputArrayFromConsole(n);
- }
- return a;
- }
- public static int sumNumbers(int num) {
- int sum = 0;
- while (num > 0) {
- sum += num % 10;
- num /= 10;
- }
- return sum;
- }
- public static int maxSumNumbers(int[] a) {
- int maxSum = 0;
- int maxNum = 0;
- for (int i = 0; i < a.length; i++) {
- int currentSum = sumNumbers(a[i]);
- if (currentSum > maxSum) {
- maxSum = currentSum;
- maxNum = a[i];
- }
- }
- return maxNum;
- }
- public static void outputOutputChoice() {
- System.out.println("Введите 0, если хотите вывести данные в консоль, и 1 - в файл:");
- }
- public static void outputPathOutputCondition() {
- System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
- }
- public static String TakePath() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- path = scan.nextLine();
- isIncorrect = isFileCorrect(path);
- if (isIncorrect) {
- System.out.println("Повторите ввод пути к файлу:");
- }
- } while (isIncorrect);
- return path;
- }
- public static void outputInFile(int maxNum) {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- path = TakePath();
- try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
- fileWriter.write("Число с наибольшей суммой: ");
- fileWriter.println(maxNum);
- }
- catch (IOException e) {
- System.out.print(e.getMessage());
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- public static void outputSuccessfulOutput() {
- System.out.println("Данные записаны в файл успешно.");
- }
- public static void outputInConsole(int maxNum) {
- System.out.printf("Число с наибольшей суммой: %d",
- maxNum);
- }
- public static void outputmaxNum(boolean isOutput, int maxNum) {
- if (isOutput) {
- outputPathOutputCondition();
- outputInFile(maxNum);
- outputSuccessfulOutput();
- }
- else {
- outputInConsole(maxNum);
- }
- }
- public static void main(String[] args) {
- int maxNum;
- int[] a;
- boolean isInput;
- boolean isOutput;
- outputCondition();
- outputInputChoice();
- isInput = isUserChoice();
- a = inputArray(isInput);
- maxNum = maxSumNumbers(a);
- outputOutputChoice();
- isOutput = isUserChoice();
- outputmaxNum(isOutput, maxNum);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement