Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.lab3;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Scanner;
- import java.io.FileWriter;
- public class Lab3 {
- final static int INPUT = 1, OUTPUT = 2;
- public static void main(String args[]) {
- double matrix[][];
- int choice;
- Scanner scan = new Scanner(System.in);
- System.out.println("Программа транспонирует заданную квадратную матрицу порядка n.");
- choice = choiceWay(INPUT, scan);
- matrix = inputMatrix(choice, scan);
- matrix = transposeMatrix(matrix);
- choice = choiceWay(OUTPUT, scan);
- outputMatrix(matrix, choice, scan);
- scan.close();
- }
- private static double[][] transposeMatrix(double[][] matrix) {
- double trMatrix[][];
- int n;
- n = matrix.length;
- trMatrix = new double[n][n];
- for (int i = 0; i < n; i++) {
- trMatrix[i] = new double[n];
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- trMatrix[j][i] = matrix[i][j];
- }
- }
- return trMatrix;
- }
- public static void outputMatrix(double[][] matrix, int choice, Scanner scan) {
- switch (choice) {
- case 1: {
- String fileName;
- boolean isNotCorrect;
- FileWriter writer = null;
- do {
- isNotCorrect = false;
- fileName = inputFileName(scan, OUTPUT);
- try {
- writer = new FileWriter(fileName);
- } catch (IOException err) {
- isNotCorrect = true;
- System.out.println("Невозможно открыть файл для записи! Повторите ввод имени файла.");
- }
- if (!isNotCorrect) {
- isNotCorrect = outputInFile(matrix, writer);
- if (!isNotCorrect)
- try {
- writer.close();
- } catch (IOException err) {
- System.out.println("Ошибка при закрытии данного файла! Повторите ввод имени файла.");
- }
- }
- } while (isNotCorrect);
- System.out.print("Искомые данные выведены в файл ");
- System.out.println(fileName);
- break;
- }
- default:
- System.out.println("Искомая матрица:");
- showMatrix(matrix);
- }
- }
- public static boolean outputInFile(double[][] matrix, FileWriter writer) {
- try {
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix.length; j++) {
- writer.write(Double.toString(matrix[i][j]));
- writer.write(' ');
- }
- writer.write('\n');
- }
- } catch (IOException err) {
- System.out.println("Невозможно записать данные в файл! Повторите ввод имени файла.");
- return true;
- }
- return false;
- }
- public static int choiceWay(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[][] inputMatrix(int choice, Scanner scan) {
- double matrix[][];
- matrix = new double[0][];
- switch (choice) {
- case 1:
- String fileName;
- boolean isNotCorrect;
- FileReader reader = null;
- Scanner scanFile = null;
- do {
- isNotCorrect = false;
- fileName = inputFileName(scan, INPUT);
- try {
- reader = new FileReader(fileName);
- scanFile = new Scanner(reader);
- } catch (FileNotFoundException err) {
- System.out.println("Невозможно прочитать данные из файла! Повторите ввод имени файла.");
- isNotCorrect = true;
- }
- if (!isNotCorrect) {
- matrix = inputFromFile(scanFile);
- if (matrix == null)
- isNotCorrect = true;
- else if (scanFile.hasNext()){
- System.out.println("В файле присутствуют лишние данные! Повторите ввод имени файла.");
- isNotCorrect = true;
- }
- else {
- scanFile.close();
- try {
- reader.close();
- } catch (IOException err) {
- System.out.println("Ошибка при закрытии файла! Повторите ввод имени файла.");
- isNotCorrect = true;
- }
- }
- }
- } while(isNotCorrect);
- break;
- default:
- matrix = inputFromConsole(scan);
- }
- return matrix;
- }
- public static double[][] inputFromConsole(Scanner scan) {
- int n;
- double matrix[][];
- boolean isNotCorrect;
- n = 0;
- System.out.println("Введите порядок матрицы:");
- do {
- isNotCorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [1; 20 000]");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (n < 1 || n > 20000)) {
- System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [1; 20 000]");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- matrix = new double[n][n];
- System.out.println("Введите элементы матрицы (построчно):");
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- do {
- isNotCorrect = false;
- try{
- matrix[i][j] = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Введите действительное число:");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return matrix;
- }
- public static String inputFileName(Scanner scan, int InOrOutput) {
- String fileName;
- File file;
- switch (InOrOutput) {
- case INPUT:
- System.out.println("Введите имя файла, из которого будут вводиться данные (все входные величины в файле должны быть разделены пробелами, сначала идет порядок матрицы, затем ее элементы):");
- do {
- fileName = scan.nextLine();
- file = new File(fileName);
- if (file.exists())
- if (file.canRead())
- return fileName;
- else
- System.out.println("Невозможно открыть для чтения файл с таким именем! Повторите ввод имени файла:");
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- } while (true);
- default:
- System.out.println("Введите имя файла, в который будут выводиться данные:");
- do {
- fileName = scan.nextLine();
- file = new File(fileName);
- if (file.exists()) {
- if (file.canWrite())
- return fileName;
- else
- System.out.println("Невозможно открыть для записи файл с таким именем! Повторите ввод имени файла:");
- }
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- } while(true);
- }
- }
- public static double[][] inputFromFile(Scanner scanFile) {
- boolean isNotCorrect;
- int n;
- double matrix[][];
- matrix = new double[0][];
- isNotCorrect = false;
- n = 0;
- if (scanFile.hasNext()) {
- try {
- n = Integer.parseInt(scanFile.next());
- } catch (NumberFormatException err) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && ((n < 1) || (n > 20000))) {
- System.out.println("Порядок матрицы вне допустимого диапазона! Измените содержание файла и повторите ввод его имени.");
- isNotCorrect = true;
- } else {
- matrix = new double[n][n];
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++) {
- if (scanFile.hasNext()) {
- try {
- matrix[i][j] = Integer.parseInt(scanFile.next());
- } catch (NumberFormatException err) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- return null;
- }
- } else {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- return null;
- }
- }
- }
- }
- else {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isNotCorrect = true;
- }
- if (isNotCorrect)
- return null;
- else
- return matrix;
- }
- public static void showMatrix(double[][] matrix)
- {
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix.length; j++) {
- System.out.print(matrix[i][j]);
- System.out.print(' ');
- }
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement