Добрый вечер! Нужно считать исходный массив из файла, составить массив с результатами и записать последний в файл.
Дана матрица А(5Х5). Определить массив Х из 5 элементов, каждый из которых равен 1, если произведение элементов соответствующего столбца больше нуля, и –1 в противном случае.
При тестировании кода возникли проблемы: второй и третий элемент массива результатов почему-то заминусились, а при записи результатов в файл указатель не перешёл на новую строку, хотя символ переноса был дважды добавлен с помощью append. Укажите ошибки и способы их устранения. Работаю в eclipse.
Код класса:
Код:
package com.lab2;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.io.*;
public class ReadWriteFile {
private static int n;
private static int m;
public static int[][] inputSelect () {
int[][] arr = null;
int index = -1;
Scanner scan = new Scanner(System.in);
System.out.println("Выберите способ ввода массива:");
System.out.println("0. Из файла");
System.out.println("1. С клавиатуры");
index = scan.nextInt();
switch (index) {
case 0:
arr = inputFromFile("C:\\Users\\Владимир\\eclipse-workspace\\myMatrix.TXT");
break;
case 1:
arr = inputFromKeyboard();
break;
default:
System.out.println("Неверный ввод!");
}
scan.close();
return arr;
}
public static int[][] inputFromFile(String path) {
int[][] arr = null;
try {
try (Scanner in = new Scanner(new File(path))) {
n = in.nextInt();
m = in.nextInt();
arr = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = in.nextInt();
}
}
in.close();
}
} catch (FileNotFoundException e) {
System.out.println("Ошибка " + e + "! файл " + path + " не найден!");
} catch (InputMismatchException e) {
System.out.println("Ошибка " + e + "! Несоответствие типов данных!");
}
return arr;
}
public static int[][] inputFromKeyboard() {
int[][] arr = null;
Scanner scan = new Scanner(System.in);
System.out.println("Укажите количество строк массива:");
n = scan.nextInt();
System.out.println("Укажите количество столбцов массива:");
m = scan.nextInt();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.println("Введите элемент " + i + "-й строки " + j + "-го столбца:");
arr[i][j] = scan.nextInt();
}
}
scan.close();
return arr;
}
public static void outArray(int[][] array) {
System.out.println("Вывод исходного массива:");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(j == m-1) {
System.out.print(array[i][j] + "\n");
} else {
System.out.print(array[i][j] + " ");
}
}
}
}
public static int[] getResult(int[][] array) {
int count;
int[] X = new int[m];
for (int i = 0; i < m; i++) {
count = 1;
for (int j = 0; j < n; j++) {
count *= array[j][i];
}
X[i] = (count >= 0) ? 1 : -1;
}
return X;
}
public static void outResult(int[] X) {
System.out.println("Вывод результата:");
for (int i = 0; i < m; i++) {
if (i == m-1) {
System.out.print(X[i] + "\n");
} else {
System.out.print(X[i] + " ");
}
}
}
public static void writeResult(int[] X) throws Exception {
System.out.println("Запись результата в файл");
FileWriter writer = new FileWriter("C:\\Users\\Владимир\\eclipse-workspace\\myMatrix.TXT", true);
writer.append('\n');
writer.append('\n');
for (int i = 0; i < m; i++) {
if (i == m-1) {
writer.append(X[i] + "\n");
} else {
writer.append(X[i] + " ");
}
}
writer.close();
}
}
Код основной функции:
Код:
package com.lab2;
import java.util.Scanner;
public class MainApp {
public static void main(String[] args) throws Exception {
ReadWriteFile myVar = new ReadWriteFile();
int[][] myMatrix = myVar.inputSelect();
myVar.outArray(myMatrix);
int[] X = myVar.getResult(myMatrix);
myVar.outResult(X);
myVar.writeResult(X);
}
}
Результат работы программы:
Код:
Выберите способ ввода массива:
0. Из файла
1. С клавиатуры
0
Вывод исходного массива:
11 24 323 7 2345
42 53 6 234 4
73 84 94 0 3432
45 673 34 98 3245
0 345 5546 4564 6565
Вывод результата:
1 -1 -1 1 1
Запись результата в файл
Файл после записи результатов:
Код:
5 5
11 24 323 7 2345
42 53 6 234 4
73 84 94 0 3432
45 673 34 98 3245
0 345 5546 4564 65651 -1 -1 1 1