Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.util.Scanner;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- public class Main {
- public static final int
- MIN_O = 1,
- MAX_O = 10,
- YES = 1,
- NO = 2;
- static Scanner scanConsole = new Scanner(System.in);
- static Scanner scanFile;
- static File file;
- public static void printTask() {
- System.out.println("Данная программа находит количество хорошистов в группе (оценки не ниже шестерки, но не все выше восьмерки).");
- }
- public static boolean chooseFileInput() {
- int isFileInput;
- boolean isCorrect, choose;
- isFileInput = 0;
- choose = true;
- do {
- System.out.println("Вы хотите вводить матрицу через файл? (Да - " + YES + " / Нет - " + NO + ")");
- isCorrect = true;
- try {
- isFileInput = Integer.parseInt(scanConsole.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Некорректный выбор!");
- isCorrect = false;
- }
- if (isCorrect) {
- if (isFileInput == 1)
- choose = true;
- else if (isFileInput == 2)
- choose = false;
- else {
- isCorrect = false;
- System.out.println("Некорректный выбор!");
- }
- }
- } while (!isCorrect);
- return choose;
- }
- public static boolean chooseFileOutput() {
- int isFileInput;
- boolean isCorrect, choose;
- isFileInput = 0;
- choose = true;
- do {
- System.out.println("Вы хотите выводить матрицу через файл? (Да - " + YES + " / Нет - " + NO + ")");
- isCorrect = true;
- try {
- isFileInput = Integer.parseInt(scanConsole.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Некорректный выбор!");
- isCorrect = false;
- }
- if (isCorrect) {
- if (isFileInput == 1)
- choose = true;
- else if (isFileInput == 2)
- choose = false;
- else {
- isCorrect = false;
- System.out.println("Некорректный выбор!");
- }
- }
- } while (!isCorrect);
- return choose;
- }
- public static String fileInputPath(boolean isFileForRead){
- boolean isNotCorrect;
- String path;
- if (isFileForRead) {
- System.out.println("Введите путь к файлу для чтения: ");
- } else {
- System.out.println("Введите путь к файлу для записи: ");
- }
- do {
- isNotCorrect = false;
- path = scanConsole.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- isNotCorrect = true;
- System.out.println("Файл не найден. Повторите попытку.");
- }
- } while (isNotCorrect);
- return path;
- }
- public static int[][] fileMatrixInput(String path) {
- boolean isNotCorrect;
- boolean isFileForRead = true;
- int rows = 0;
- int cols = 0;
- int[][] matrix = null;
- int i = 0;
- int j;
- do {
- isNotCorrect = false;
- try (Scanner fileReader = new Scanner(new File(path))) {
- if (fileReader.hasNextInt()) {
- rows = fileReader.nextInt();
- } else {
- isNotCorrect = true;
- System.out.println("Ошибка! Не удалось определить количество строк матрицы.");
- continue;
- }
- if (fileReader.hasNextInt()) {
- cols = fileReader.nextInt();
- } else {
- isNotCorrect = true;
- System.out.println("Ошибка! Не удалось определить количество столбцов матрицы.");
- continue;
- }
- matrix = new int[rows][cols];
- fileReader.nextLine();
- while ((!isNotCorrect) && (i < rows)) {
- j = 0;
- while ((!isNotCorrect) && (j < cols)) {
- if (fileReader.hasNextInt()) {
- matrix[i][j] = fileReader.nextInt();
- } else {
- isNotCorrect = true;
- System.out.println("Ошибка! Найдено некорректное значение элемента матрицы.");
- i--;
- continue;
- }
- j++;
- }
- i++;
- }
- } catch (FileNotFoundException e) {
- isNotCorrect = true;
- System.out.println("Не удалось открыть файл.");
- }
- if (isNotCorrect) {
- System.out.println("Повторите попытку.");
- path = fileInputPath(isFileForRead);
- }
- } while (isNotCorrect);
- return matrix;
- }
- public static int[][] consoleMatrixCreation() {
- int rows = 0;
- int cols = 0;
- boolean isNotCorrect;
- do {
- System.out.println("Введите количество строк матрицы: ");
- try {
- rows = Integer.parseInt(scanConsole.nextLine());
- if (rows <= 0) {
- System.out.println("Количество строк должно быть больше нуля. Повторите попытку.");
- isNotCorrect = true;
- } else {
- isNotCorrect = false;
- }
- } catch (NumberFormatException e) {
- System.out.println("Ошибка ввода! Повторите попытку.");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- do {
- System.out.println("Введите количество столбцов матрицы: ");
- try {
- cols = Integer.parseInt(scanConsole.nextLine());
- if (cols <= 0) {
- System.out.println("Количество столбцов должно быть больше нуля. Повторите попытку.");
- isNotCorrect = true;
- } else {
- isNotCorrect = false;
- }
- } catch (NumberFormatException e) {
- System.out.println("Ошибка ввода! Повторите попытку.");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- int[][] matrix = new int[rows][cols];
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- do {
- System.out.println("Введите " + (j + 1) + " элемент " + (i + 1) + " строки");
- isNotCorrect = false;
- try {
- matrix[i][j] = Integer.parseInt(scanConsole.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Ошибка ввода! Повторите попытку.");
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && ((matrix[i][j] < 1) || (matrix[i][j] > 10))) {
- System.out.println("Ошибка ввода! Введено число неверного диапазона!");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- }
- }
- return matrix;
- }
- public static int[] searchGoodStudents(int[][] matrix) {
- int rows = matrix.length;
- int cols = matrix[0].length;
- int[] goodStudents = null;
- int search = 0;
- for (int i = 0; i < rows; i++) {
- int eightGradeCounter = 0;
- int sixGradeCounter = 0;
- int CheckGradeCounter = 0;
- for (int j = 0; j < cols; j++) {
- if (matrix[i][j] > 5) {
- sixGradeCounter++;
- }
- if (matrix[i][j] < 9) {
- eightGradeCounter++;
- }
- if (matrix[i][j] < 6) {
- CheckGradeCounter++;
- }
- }
- if (sixGradeCounter > 0 && eightGradeCounter > 0 && CheckGradeCounter==0) {
- search++;
- int[] temp = new int[search];
- for (int k = 0; k < search - 1; k++) {
- temp[k] = goodStudents[k];
- }
- temp[search - 1] = i + 1;
- if (goodStudents != null) {
- System.arraycopy(goodStudents, 0, temp, 0, search - 1);
- }
- goodStudents = temp;
- }
- }
- return goodStudents;
- }
- public static int searchGoodSumStudent(int[][] matrix) {
- int rows = matrix.length;
- int cols = matrix[0].length;
- int search = 0;
- for (int i = 0; i < rows; i++) {
- int eightGradeCounter = 0;
- int sixGradeCounter = 0;
- int CheckGradeCounter = 0;
- for (int j = 0; j < cols; j++) {
- if (matrix[i][j] > 5) {
- sixGradeCounter++;
- }
- if (matrix[i][j] < 9) {
- eightGradeCounter++;
- }
- if (matrix[i][j] < 6) {
- CheckGradeCounter++;
- }
- }
- if (sixGradeCounter > 0 && eightGradeCounter > 0 && CheckGradeCounter==0) {
- search++;
- }
- }
- return search;
- }
- public static void saveMatrixToFile(int[][] matrix, String filePath, int[] student, int sum) {
- int rows = matrix.length;
- int cols = matrix[0].length;
- File file = new File(filePath);
- if (file.exists()) {
- System.out.print("Файл уже существует. Перезаписать? (y/n): ");
- Scanner scanner = new Scanner(System.in);
- char choice = scanner.nextLine().charAt(0);
- if (choice != 'y' && choice != 'Y') {
- System.out.println("Запись в файл отменена.");
- scanner.close();
- return;
- }
- scanner.close();
- }
- try {
- FileWriter outputFile = new FileWriter(filePath);
- // Запись матрицы в файл
- outputFile.write(rows + " " + cols + System.lineSeparator());
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- outputFile.write(matrix[i][j] + " ");
- }
- outputFile.write(System.lineSeparator());
- }
- outputFile.write("Номера хорошистов:");
- for (int i = 0; i < sum; i++) {
- outputFile.write(" " + student[i]);
- }
- outputFile.write(System.lineSeparator());
- outputFile.write("Сумма хорошистов:" + sum);
- outputFile.close();
- System.out.println("Матрица успешно записана в файл.");
- } catch (IOException e) {
- System.out.println("Не удалось открыть файл для записи.");
- }
- }
- public static void printMatrix(int[][] matrix, int[] student, int sum) {
- int rows = matrix.length;
- int cols = matrix[0].length;
- for (int row = 0; row < rows; row++) {
- for (int col = 0; col < cols; col++) {
- System.out.print(matrix[row][col] + " ");
- }
- System.out.println();
- }
- System.out.print("Номера хорошистов: ");
- for (int i = 0; i < sum; i++) {
- System.out.print(student[i] + " ");
- }
- System.out.println();
- System.out.println("Сумма хорошистов: " + sum);
- }
- public static void choiceInput() {
- String filePathInput;
- String filePathOutput;
- boolean input;
- boolean output;
- boolean isInCorrect;
- int sum;
- int[][] matrix;
- int[] student;
- Scanner scanner = new Scanner(System.in);
- input = chooseFileInput();
- if (input == true) {
- filePathInput=fileInputPath(input);
- matrix=fileMatrixInput(filePathInput);
- student=searchGoodStudents(matrix);
- sum=searchGoodSumStudent(matrix);
- output = chooseFileOutput();
- if(output==true)
- {
- filePathOutput=fileInputPath(false);
- saveMatrixToFile(matrix,filePathOutput,student,sum);
- }
- if (output==false)
- {
- printMatrix(matrix,student,sum);
- }
- }
- if (input==false)
- {
- matrix=consoleMatrixCreation();
- student=searchGoodStudents(matrix);
- sum=searchGoodSumStudent(matrix);
- output = chooseFileOutput();
- if(output==true)
- {
- filePathOutput=fileInputPath(false);
- saveMatrixToFile(matrix,filePathOutput,student,sum);
- }
- if (output==false)
- {
- printMatrix(matrix,student,sum);
- }
- }
- }
- public static void main(String[] args) {
- printTask();
- choiceInput();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement