Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- import java.util.ArrayList;
- import java.util.Scanner;
- public class Main {
- static double findMaxEl(ArrayList<Double> arr, double maxEl, int i) {
- if(i < arr.size()) {
- double el = arr.get(i);
- if(el > maxEl)
- maxEl = el;
- return findMaxEl(arr, maxEl, i+1);
- }
- return maxEl;
- }
- static String chooseInputType(Scanner scan) {
- String type = "";
- boolean notCorrect = true;
- System.out.println("Введите [c], если хотите произвести ввод из консоли, либо [f], если хотите произвести ввод из файла.");
- while(notCorrect) {
- type = scan.nextLine();
- if(type.equals("c") || type.equals("f"))
- notCorrect = false;
- else
- System.out.println("Введите либо [c], либо [f]");
- }
- return type;
- }
- static ArrayList<Double> inputSequenceFromConsole(Scanner scan) {
- ArrayList<Double> sequence = new ArrayList<>();
- boolean continueCycle = true;
- int i = 1;
- System.out.println("Введите число, либо [стоп], чтобы прекратить ввод");
- while(continueCycle) {
- System.out.println("Введите " + i + "-й элемент последовательности.");
- String input = scan.nextLine();
- if(input.equals("стоп")) {
- if(sequence.size() > 1)
- continueCycle = false;
- else
- System.out.println("Введите хотя бы 2 элемента последовательности.");
- } else if(input.length() > 0) {
- try {
- double el = Double.parseDouble(input);
- if(el == Double.POSITIVE_INFINITY || el == Double.NEGATIVE_INFINITY) {
- System.out.println("Вы ввели слишком большое число, повторите ввод.");
- } else {
- sequence.add(el);
- i++;
- }
- } catch (Exception err) {
- System.out.println("Вводимый элемент должен быть вещественным числом, повторите ввод.");
- }
- } else
- System.out.println("Элемент не может быть пустым, повторите ввод.");
- }
- return sequence;
- }
- static ArrayList<Double> inputSequenceFromFile(Scanner scan) {
- RandomAccessFile raf = openFile(scan);
- ArrayList<Double> sequence = new ArrayList<>();
- try {
- raf.seek(0);
- String inputStr = raf.readLine();
- inputStr = inputStr.trim();
- String[] nums = inputStr.split("\\s+");
- raf.close();
- for(String num : nums) {
- double el = Double.parseDouble(num);
- sequence.add(el);
- }
- } catch (IOException err) {
- System.out.println("Возникла ошибка при попытке считать массив из файла.");
- }
- return sequence;
- }
- static boolean isFileCorrect(RandomAccessFile raf) {
- boolean result = true;
- try {
- raf.seek(0);
- String inputStr = raf.readLine();
- inputStr = inputStr.trim();
- String[] nums = inputStr.split("\\s+");
- if(nums.length > 1) {
- int i = 0;
- while(result && i < nums.length) {
- String num = nums[i];
- double el = Double.parseDouble(num);
- if(el == Double.POSITIVE_INFINITY || el == Double.NEGATIVE_INFINITY)
- result = false;
- i++;
- }
- } else
- result = false;
- } catch (Exception err) {
- result = false;
- }
- return result;
- }
- static void showFileData(RandomAccessFile raf) throws IOException {
- raf.seek(0);
- String str = raf.readLine();
- str = str.trim();
- String[] arr = str.split("\\s+");
- System.out.println("Массив, введенный в файл:");
- for(String el : arr)
- System.out.print(el + " ");
- System.out.println("");
- }
- static RandomAccessFile openFile(Scanner scan) {
- String filePath;
- boolean notCorrect = true;
- RandomAccessFile raf = null;
- while(notCorrect) {
- System.out.println("Введите путь к файлу");
- filePath = scan.nextLine();
- try {
- raf = new RandomAccessFile(filePath, "r");
- if(isFileCorrect(raf)) {
- notCorrect = false;
- showFileData(raf);
- } else
- System.out.println("В файле должны присутствовать минимум два вещественных числа, разделенные одиночным пробелом и записанные в одну строку. Измените файл и повторите ввод.");
- } catch (IOException err) {
- System.out.println("Произошла ошибка при чтении файла. Убедитесь, что такой файл существует и повторите ввод.");
- notCorrect = true;
- }
- }
- return raf;
- }
- static boolean isUserWantToSave(Scanner scan) {
- System.out.println("Хотите сохранить результат в файл? [д/н]");
- String choice = "";
- boolean notCorrect = true;
- while(notCorrect) {
- choice = scan.nextLine();
- if(choice.equals("д") || choice.equals("н"))
- notCorrect = false;
- else
- System.out.println("Вы должны ввести либо [д], либо [н]");
- }
- return choice.equals("д");
- }
- static void saveFile(Scanner scan, String result) {
- if(isUserWantToSave(scan)) {
- System.out.println("Введите имя файла");
- String filePath = scan.nextLine();
- try(FileWriter fw = new FileWriter(filePath)) {
- fw.write(result);
- System.out.print("Результат успешно сохранен.");
- } catch (IOException err) {
- System.out.println("Произошла ошибка при попытке сохранить файл.");
- }
- }
- }
- static boolean areValuesDifferent(ArrayList<Double> arr) {
- boolean areDifferent = false;
- double value = arr.get(0);
- int i = 1;
- while(!areDifferent && i < arr.size()) {
- double el = arr.get(i);
- if(el != value)
- areDifferent = true;
- i++;
- }
- return areDifferent;
- }
- static ArrayList<Double> inputSequence(Scanner scan, String inputType) {
- if(inputType.equals("c"))
- return inputSequenceFromConsole(scan);
- return inputSequenceFromFile(scan);
- }
- static void output(Scanner scan, ArrayList<Double> sequence) {
- if(areValuesDifferent(sequence)) {
- String maxEl = String.format("%.2f", findMaxEl(sequence, sequence.get(0), 0));
- final String RESULT_MSG = "Максимальный элемент последовательности = " + maxEl;
- System.out.println(RESULT_MSG);
- saveFile(scan, RESULT_MSG);
- } else
- System.out.println("Массив состоит из одинаковых значений, найти максимальный элемент невозможно.");
- }
- public static void main(String[] args) {
- System.out.println("Данная программа находит максимальный элемент введенной последовательности.");
- Scanner scan = new Scanner(System.in);
- String inputType = chooseInputType(scan);
- ArrayList<Double> sequence = inputSequence(scan, inputType);
- output(scan, sequence);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement