Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Scanner;
- public class Main {
- private static final Scanner scanner = new Scanner(System.in);
- public static void main(String[] args) {
- int[] array;
- int[] sortedArray;
- outputTaskEssence();
- array = sourceChoice();
- sortedArray = sorting(array);
- output(sortedArray);
- scanner.close();
- }
- public static void outputTaskEssence() {
- System.out.println("Данная программа сортирует массив методом подсчета.");
- }
- public static int[] sourceChoice() {
- int choiceNumber;
- boolean isIncorrect;
- int[] array = new int[0];
- choiceNumber = -1;
- System.out.println("Выберите, откуда будут вводиться данные: ");
- do {
- isIncorrect = false;
- System.out.println("Введите 0, если с консоли; 1, если с файла");
- try {
- choiceNumber = Integer.parseInt(scanner.nextLine());
- } catch (NumberFormatException exception) {
- isIncorrect = true;
- System.err.println("Неверный ввод данных!");
- }
- if (((choiceNumber != 0) && (choiceNumber != 1)) || (isIncorrect)) {
- isIncorrect = true;
- System.err.println("Число должно быть или 0, или 1");
- }
- } while (isIncorrect);
- if (choiceNumber == 0) {
- array = inputFromConsole();
- } else {
- array = inputFromFile();
- }
- return array;
- }
- public static int[] inputFromFile() {
- String path;
- int size;
- int[] array;
- System.out.println("При записи данных из файла, учтите, что на первой строке написано количество элементов массива, на второй - элементы массива через пробел.");
- path = pathChoice();
- size = inputSizeFromFile(path);
- array = new int[size];
- array = readArrayFromFile(path, size, array);
- return array;
- }
- public static String pathChoice() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.println("Введите путь к файлу: ");
- path = scanner.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанном пути файл не найден.");
- isIncorrect = true;
- } else if (!getExtension(path).equals("txt")) {
- System.err.println("Ошибка, неправильный тип файла!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static String getExtension(String path) {
- int pos = path.lastIndexOf('.');
- if (pos <= 0) {
- return "";
- }
- return path.substring(pos + 1);
- }
- public static int inputSizeFromFile(String path) {
- int size;
- boolean isIncorrect;
- System.out.println("Считывание размера массива...");
- size = 0;
- isIncorrect = false;
- try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
- try {
- size = Integer.parseInt(reader.readLine());
- } catch (NumberFormatException exception) {
- if ((size < 1) || (isIncorrect == true)) {
- isIncorrect = true;
- System.err.println("Неверный ввод данных! Введите данные с клавиатуры.");
- size = inputSizeFromConsole();
- }
- else {
- System.out.println(size);
- }
- }
- } catch (IOException ioException) {
- isIncorrect = true;
- }
- return size;
- }
- public static int[] readArrayFromFile(String path, int size, int[] array) {
- System.out.println("Считывание массива...");
- try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
- reader.readLine();
- String[] elements = reader.readLine().split(" ");
- for (int i = 0; i < size; i++) {
- try {
- array[i] = Integer.parseInt(elements[i]);
- } catch (NumberFormatException exception) {
- System.out.println("Неверный ввод данных! Введите данные с клавиатуры.");
- array[i] = exceptionRead(i);
- }
- }
- } catch (IOException ioException) {
- System.err.println("Неверный ввод данных! Измените входные данные и перезапустите программу.");
- }
- return array;
- }
- public static void output(int[] array) {
- String path;
- boolean isIncorrect;
- System.out.println("\nМассив, отсортированный методом подсчета: ");
- for (int i = 0; i < array.length; i++) {
- System.out.print(array[i] + " ");
- }
- path = outputPath();
- do {
- isIncorrect = false;
- try (FileWriter writer = new FileWriter(path, true)) {
- writer.write("Массив, отсортированный методом подсчета: \n");
- for (int i = 0; i < array.length; i++) {
- writer.write(array[i] + " ");
- }
- } catch (IOException ioException) {
- System.err.println("Ошибка при записи в файл");
- isIncorrect = true;
- }
- } while (isIncorrect);
- System.out.println("Данные записаны в файл.");
- }
- public static int[] sorting(int[] arr) {
- int minVal;
- int maxVal;
- int range;
- int[] count;
- int k, n;
- n = arr.length;
- minVal = arr[0];
- maxVal = arr[0];
- for (int i = 1; i < n; i++) {
- if (arr[i] < minVal) {
- minVal = arr[i];
- }
- if (arr[i] > maxVal) {
- maxVal = arr[i];
- }
- }
- range = maxVal - minVal + 1;
- count = new int[range];
- for (int i = 0; i < n; i++) {
- count[i] = 0;
- }
- for (int i = 0; i < n; i++) {
- count[arr[i] - minVal]++;
- }
- k = 0;
- for (int i = 0; i < range; i++) {
- for (int j = 0; j < count[i]; j++) {
- arr[k] = i + minVal;
- k++;
- }
- }
- return arr;
- }
- public static String outputPath() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.println("\nВведите путь к файлу для вывода: ");
- System.out.println();
- path = scanner.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанном пути файл не найден.");
- isIncorrect = true;
- } else if (!getExtension(path).equals("txt")) {
- System.err.println("Ошибка, неправильный тип файла!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static int[] inputFromConsole() {
- int size;
- int[] array;
- size = inputSizeFromConsole();
- array = new int[size];
- array = readArrayFromConsole(size, array);
- return array;
- }
- public static int inputSizeFromConsole() {
- boolean isIncorrect;
- int size;
- size = 0;
- do {
- isIncorrect = false;
- System.out.print("Введите количество элементов массива: ");
- try {
- size = Integer.parseInt(scanner.nextLine());
- if (!isIncorrect && (size < 1)) {
- System.err.println("Неверный ввод данных!");
- isIncorrect = true;
- }
- } catch (NumberFormatException exception) {
- System.err.println("Неверный ввод данных!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return size;
- }
- public static int[] readArrayFromConsole(int size, int[] array) {
- boolean isIncorrect;
- for (int i = 0; i < size; i++) {
- do {
- isIncorrect = false;
- System.out.print("Введите " + (i+1) + " элемент массива: ");
- try {
- array[i] = Integer.parseInt(scanner.nextLine());
- } catch (NumberFormatException exception) {
- System.err.println("Неверный ввод данных!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- return array;
- }
- public static int exceptionRead(int i) {
- boolean isIncorrect;
- int number;
- number = 0;
- do {
- isIncorrect = false;
- System.out.print("Введите " + (i+1) + " элемент массива: ");
- try {
- number = Integer.parseInt(scanner.nextLine());
- } catch (NumberFormatException exception) {
- System.err.println("Неверный ввод данных!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return number;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement