Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Main {
- static Scanner scanner;
- static int getMatrixSize(String message) {
- int ret = 0;
- boolean isIncorrect;
- String inputLine;
- do {
- System.out.println("Введите " + message + " матрицы ");
- isIncorrect = false;
- inputLine = scanner.nextLine();
- try {
- ret = Integer.parseInt(inputLine);
- } catch (Exception ex) {
- System.out.println(message + " должно быть числом");
- isIncorrect = true;
- }
- if (((ret < 1) || (ret > 10000)) && !isIncorrect) {
- System.out.println(message + " должно промежутку от 1 до 10000");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return ret;
- }
- static String getOutputDirectory() {
- String ret;
- boolean isIncorrect;
- isIncorrect = true;
- do {
- System.out.println("Введите директорию, в которую хотите сохранить вывод программы");
- ret = scanner.nextLine();
- File outputDirectory = new File(ret);
- if (outputDirectory.isDirectory() && outputDirectory.exists()) {
- isIncorrect = false;
- } else {
- System.out.println("Такой директории не существует.Попробуйте ещё раз");
- }
- } while (isIncorrect);
- return ret;
- }
- static int getMatrixItem(int i, int j) {
- int ret = 0;
- boolean isIncorrect;
- String inputLine;
- do {
- System.out.println("Введите значение элемента матрицы [" + i + "," + j + "] ");
- inputLine = scanner.nextLine();
- isIncorrect = false;
- try {
- ret = Integer.parseInt(inputLine);
- } catch (Exception ex) {
- System.out.println("Значение матрицы должно быть числом\n");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return ret;
- }
- static int[][] getMatrixFromConsole(int width, int height) {
- int[][] ret = new int[width][height];
- for (int i = 0; i < ret.length; i++) {
- for (int j = 0; j < ret[i].length; j++) {
- ret[i][j] = getMatrixItem(i, j);
- }
- }
- return ret;
- }
- static boolean isFileCorrect(String path, int width, int height) throws IOException {
- int totalCount = 0;
- boolean isCorrect;
- FileReader reader = new FileReader(path);
- Scanner scanner = new Scanner(reader);
- isCorrect = true;
- while (scanner.hasNextLine() && isCorrect) {
- String line = scanner.nextLine();
- Matcher matcherDigit = Pattern.compile("\\d+").matcher(line);
- Matcher matcherSymbol = Pattern.compile("[a-zA-Z]").matcher(line);
- int thisLineCount = 0;
- if (matcherSymbol.find())
- isCorrect = false;
- while (matcherDigit.find()) {
- thisLineCount++;
- totalCount++;
- }
- if (thisLineCount != width && totalCount != width * height) {
- isCorrect = false;
- }
- }
- scanner.close();
- return isCorrect;
- }
- static String getMatrixFilePath(int width, int height) throws IOException {
- String ret;
- boolean isIncorrect;
- isIncorrect = true;
- do {
- System.out.println("Введите абсолютный путь к файлу ");
- ret = scanner.nextLine();
- File matrixFile = new File(ret);
- if (!matrixFile.exists()) {
- System.out.println("Файл не найден");
- } else {
- if (isFileCorrect(ret, width, height)) {
- isIncorrect = false;
- } else {
- System.out.println("Данные в файле некорректны");
- }
- }
- } while (isIncorrect);
- return ret;
- }
- static int[][] getMatrixFromFile(int width, int height) throws IOException {
- int[][] ret = new int[width][height];
- String filePath;
- filePath = getMatrixFilePath(width, height);
- FileReader matrixFile = new FileReader(filePath);
- Scanner scanner = new Scanner(matrixFile);
- for (int i = 0; i < ret[0].length; i++) {
- for (int j = 0; j < ret.length; j++) {
- ret[j][i] = scanner.nextInt();
- }
- scanner.nextLine();
- }
- scanner.close();
- return ret;
- }
- static String getInputType() {
- String ret = "";
- boolean isIncorrect;
- String inputLine = "";
- isIncorrect = true;
- do {
- System.out.println("Выберите способ задания матрицы файл/консоль (ф/к)");
- inputLine = scanner.nextLine();
- if (inputLine.equalsIgnoreCase("файл") || inputLine.equalsIgnoreCase("ф")) {
- ret = "File";
- isIncorrect = false;
- } else if (inputLine.equalsIgnoreCase("консоль") || inputLine.equalsIgnoreCase("к")) {
- ret = "Console";
- isIncorrect = false;
- }
- } while (isIncorrect);
- return ret;
- }
- static int[][] getMatrix() throws IOException {
- int width = getMatrixSize("количество столбцов");
- int height = getMatrixSize("количество строк");
- String inputType;
- int[][] retMatrix = new int[width][height];
- inputType = getInputType();
- if (inputType == "Console") {
- retMatrix = getMatrixFromConsole(width, height);
- } else if (inputType == "File") {
- retMatrix = getMatrixFromFile(width, height);
- }
- return retMatrix;
- }
- static boolean isColumnSorted(int[] columnToCheck) {
- boolean ret = true;
- for (int i = 1; i < columnToCheck.length; i++) {
- if (columnToCheck[i] < columnToCheck[i - 1]) {
- ret = false;
- }
- }
- return ret;
- }
- static void printSortedCountToFile(int count) throws IOException {
- String path;
- path = getOutputDirectory();
- FileWriter myWriter = new FileWriter(path + "\\output.txt");
- myWriter.write("Количество столбов с элементами, отсортированными по возрастанию = " + count);
- myWriter.close();
- System.out.println("Матрица сохранена по указанному пути");
- }
- static void printSortedCount(int count) throws IOException {
- System.out.println("Количество столбов с элементами, отсортированными по возрастанию = " + count);
- }
- static void getSortedCount(int[][] matrixToCheck) throws IOException {
- int count = 0;
- for (int i = 0; i < matrixToCheck.length; i++) {
- if (isColumnSorted(matrixToCheck[i])) {
- count++;
- }
- }
- printSortedCount(count);
- printSortedCountToFile(count);
- }
- public static void main(String[] args) throws IOException {
- scanner = new Scanner(System.in);
- int[][] mainMatrix = getMatrix();
- getSortedCount(mainMatrix);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement