Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- import java.io.FileReader;
- public class Lab3 {
- final static int INPUT = 1,
- OUTPUT = 2,
- MIN_QUANTITY = 1,
- MAX_QUANTITY = 100000,
- FILE_CHOICE = 1,
- CONSOLE_CHOICE = 2;
- public static void main(String[] args) {
- double[] sortableArr;
- int choice;
- Scanner scan = new Scanner(System.in);
- System.out.println("Программа сортирует массив методом простых вставок.");
- choice = chooseFileOrConsole(INPUT, scan);
- sortableArr = inputArr(choice, scan);
- sortableArr = sortArr(sortableArr);
- choice = chooseFileOrConsole(OUTPUT, scan);
- outputArr(sortableArr, choice, scan);
- scan.close();
- }
- public static double[] sortArr(double[] sortableArr) {
- System.out.println("Исходный массив:");
- outputInConsole(sortableArr);
- System.out.println();
- int position;
- double checkNum;
- for (int checkPosition = sortableArr.length - 2; checkPosition > -1; checkPosition--) {
- position = sortableArr.length - 1;
- while ((position > checkPosition) && (sortableArr[position] >= sortableArr[checkPosition]))
- position--;
- checkNum = sortableArr[checkPosition];
- for (int moveNumPosition = checkPosition; moveNumPosition < position; moveNumPosition++)
- sortableArr[moveNumPosition] = sortableArr[moveNumPosition + 1];
- sortableArr[position] = checkNum;
- System.out.print("Массив на " + (sortableArr.length - checkPosition - 1) + "-м шаге сортировки:");
- outputInConsole(sortableArr);
- System.out.println();
- }
- return sortableArr;
- }
- public static void outputInConsole(double[] sortedArr) {
- for (int i = 0; i < sortedArr.length; i++)
- System.out.print(sortedArr[i] + " ");
- }
- public static double[] inputArr(int choice, Scanner scan) {
- double[] inputArr = new double[0];
- switch (choice) {
- case FILE_CHOICE: {
- String fileName;
- boolean isCorrect;
- do {
- fileName = inputInFileName(scan);
- isCorrect = checkFile(fileName);
- } while (!isCorrect);
- inputArr = inputFromFile(fileName);
- break;
- }
- case CONSOLE_CHOICE:
- inputArr = inputFromConsole(scan);
- break;
- }
- return inputArr;
- }
- public static String inputInFileName(Scanner scan) {
- String fileName;
- System.out.println("Введите имя файла, из которого будут вводиться данные:");
- do {
- fileName = scan.nextLine();
- if (fileName.endsWith(".txt")) {
- File file = new File(fileName);
- if (file.exists())
- if (file.canRead())
- return fileName;
- else
- System.out.println("Невозможно открыть для чтения файл с таким именем! Повторите ввод имени файла:");
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- }
- else
- System.out.println("Файл должен иметь расширение .txt! Повторите ввод имени файла:");
- } while (true);
- }
- public static boolean checkFile(String fileName) {
- boolean isCorrect;
- int arrLength, i;
- double arrNumber;
- isCorrect = true;
- arrLength = 0;
- FileReader reader = null;
- try {
- reader = new FileReader(fileName);
- } catch (FileNotFoundException err) {
- System.out.println("Невозможно прочитать данные из файла! Повторите ввод его имени.");
- isCorrect = false;
- }
- Scanner scanFile = new Scanner(reader);
- if (isCorrect && scanFile.hasNext()) {
- try {
- arrLength = Integer.parseInt(scanFile.next());
- } catch (NumberFormatException err) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isCorrect = false;
- }
- if (isCorrect && ((arrLength < MIN_QUANTITY) || (arrLength > MAX_QUANTITY))) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isCorrect = false;
- }
- else {
- i = 0;
- while (isCorrect && (i < arrLength)) {
- try {
- arrNumber = Double.parseDouble(scanFile.next());
- } catch (NumberFormatException err) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isCorrect = false;
- }
- i++;
- }
- if (scanFile.hasNext()) {
- System.out.println("В файле содержатся лишние данные! Измените содержание файла и повторите ввод его имени.");
- isCorrect = false;
- }
- }
- }
- else {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isCorrect = false;
- }
- scanFile.close();
- try {
- reader.close();
- } catch (IOException err) {
- System.out.println("Невозможно закрыть файл! Повторите ввод его имени.");
- isCorrect = false;
- }
- return isCorrect;
- }
- public static void outputArr(double[] sortedArr, int choice, Scanner scan) {
- switch (choice) {
- case 1: {
- String fileName;
- boolean isCorrect;
- do {
- fileName = inputOutFileName(scan);
- isCorrect = outputInFile(fileName, sortedArr);
- } while (!isCorrect);
- System.out.print("Искомые данные выведены в файл ");
- System.out.println(fileName);
- break;
- }
- default:
- System.out.println("Отсортированный массив:");
- outputInConsole(sortedArr);
- }
- }
- private static String inputOutFileName(Scanner scan) {
- String fileName;
- System.out.println("Введите имя файла, в который будут выводиться полученные данные:");
- do {
- fileName = scan.nextLine();
- File file = new File(fileName);
- if (file.exists()) {
- if (file.canWrite())
- return fileName;
- else
- System.out.println("Невозможно открыть для записи файл с таким именем! Повторите ввод имени файла:");
- }
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- } while(true);
- }
- public static boolean outputInFile(String fileName, double[] sortedArr) {
- FileWriter writer;
- boolean isCorrect;
- isCorrect = true;
- try {
- writer = new FileWriter(fileName);
- for (int i = 0; i < sortedArr.length; i++) {
- writer.write(Double.toString(sortedArr[i]));
- writer.write(' ');
- }
- writer.close();
- } catch (IOException err) {
- System.out.println("Невозможно записать данные в введенный файл. Повторите ввод имени файла.");
- isCorrect = false;
- }
- return isCorrect;
- }
- public static int chooseFileOrConsole(final int InOrOutput, Scanner scan) {
- int choice;
- boolean isNotCorrect;
- choice = 0;
- switch (InOrOutput) {
- case INPUT:
- System.out.println("Выберите вариант ввода:");
- System.out.println("1.Данные вводятся из текстового файла.");
- System.out.println("2.Данные вводятся через консоль.");
- break;
- default:
- System.out.println("Выберите вариант вывода:");
- System.out.println("1.Данные выводятся в текстовый файл.");
- System.out.println("2.Данные выводятся в консоль.");
- }
- do {
- isNotCorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Выберите вариант 1 или 2.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (choice < 1) || (choice > 2)) {
- System.out.println("Ошибка ввода. Выберите вариант 1 или 2.");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- public static double[] inputFromConsole(Scanner scan) {
- int arrLength;
- double[] inputArr;
- boolean isNotCorrect;
- arrLength = 0;
- System.out.println("Введите длину массива:");
- do {
- isNotCorrect = false;
- try {
- arrLength = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [" + MIN_QUANTITY + ";" + MAX_QUANTITY + "]");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (arrLength < MIN_QUANTITY || arrLength > MAX_QUANTITY)) {
- System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [" + MIN_QUANTITY + ";" + MAX_QUANTITY + "]");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- inputArr = new double[arrLength];
- System.out.println("Введите элементы массива:");
- for (int i = 0; i < arrLength; i++)
- do {
- isNotCorrect = false;
- try{
- inputArr[i] = Double.parseDouble(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Введите действительное число.");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return inputArr;
- }
- public static double[] inputFromFile(String fileName) {
- boolean isCorrect;
- FileReader reader = null;
- double[] inputArr = null;
- int arrLength;
- isCorrect = true;
- try {
- reader = new FileReader(fileName);
- } catch (FileNotFoundException err) {
- System.out.println("Невозможно прочитать данные из файла! Повторите ввод его имени.");
- isCorrect = false;
- }
- if (isCorrect) {
- Scanner scanFile = new Scanner(reader);
- arrLength = Integer.parseInt(scanFile.next());
- inputArr = new double[arrLength];
- for (int i = 0; i < arrLength; i++)
- inputArr[i] = Double.parseDouble(scanFile.next());
- scanFile.close();
- try {
- reader.close();
- } catch (IOException err) {
- System.out.println("Невозможно закрыть файл! Повторите ввод его имени.");
- inputArr = null;
- }
- }
- return inputArr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement