Нужно записать значения из файла в массив. В файле все выглядит как таблица 5 на 3
1 2 3
5 4 3
2 3 4
2 1 3
5 3 3
Дальше нужно поменять первый столбец и последний местами. Код не работает, не совсем понятно как именно поменять столбцы в этом считанном массиве.
package lab10.pkg2;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Lab102 {
private List<String> s;
public Lab102() {
this.s = new ArrayList<String>();
}
private List<String> readStringsFromFile(String nameFile) {
try {
BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
String line = "";
while ((line = reader.readLine()) != null) {
s.add(line);
}
reader.close();
} catch (IOException e) {
System.out.println("Неможливо прочитати файл!");
}
return this.s;
}
private int[][] getArr(List<String> s) {
int[] q = new int[5];
int i = s.size();
int j = s.get(0).split(" ").length;
int[][] arr = new int[i][j];
for (int a = 0; a < s.size(); a++) {
String[] arrayStringNumbers = s.get(a).split(" ");
for (int b = 0; b < j; b++) {
if (isNumeric(arrayStringNumbers[b])) {
arr[a][b] = Integer.parseInt(arrayStringNumbers[b]);
System.out.print(arr[a][b] + " ");
for (int x = 0; x < arr.length; x++, System.out.println()) {
for (int y = 0; y < arr[i].length; y++) {
System.out.print(arr[i][j] + " ");
}
}
for (int x = 0; x < 5; x++) {
q[i] = arr[i][0];
}
for (int x = 0; x < arr.length; x++) {
arr[i][0] = arr[i][2];
}
for (int x = 0; x < 5; x++) {
arr[i][2] = q[i];
}
System.out.println(" ");
for (int x = 0; x < q.length; x++) {
System.out.print(q[i] + " ");
}
System.out.println(" ");
System.out.println("Змінена матриця");
System.out.println(" ");
for (int x = 0; x < arr.length; x++) {
arr[i][2] = q[x];
}
for (int x = 0; x < arr.length; x++, System.out.println()) {
for (int y = 0; y < arr[i].length; y++) {
System.out.print(arr[i][j] + " ");
}
}
for (int x = 0; x < arr.length; x++) {
for (int y = 0; y < arr[i].length; y++) {
}
}
}
}
System.out.println();
}
return arr;
}
public static boolean isNumeric(String string) {
return string.matches("[-+]?\\d*\\.?\\d+");
}
public static void main(String[] args) throws IOException {
Lab102 l102 = new Lab102();
List<String> s = l102.readStringsFromFile("input.txt");
l102.getArr(s);
}
}
Я улучшил немного твой файл, разделил его на методы в зависимости от выполняемых действий, сократил код и конечно же избавился от ошибки.
Немного "фич", которые я добавил и объяснения:
Есть короткая строчка перевода из String
в int
, из double
в String
, и т.д. если из числа в строку - String.valueOf(число)
, а если из String в число - Integer.parseInt(строка)
, Double.parseDouble(строка)
и т.д.
Используй по полнойfor
для обычных массивов! (ну и необычных тоже) Чтобы поменять местами колонки, мне было достаточно вызвать колонку (см. reverseTable()
метод), взять число левого столбца массива (array[i][0]
) и присвоить его некоторой временной переменной temp
, потом взять число правого столбца массива (array[i][column-1]
) и присовить его первому числу (array[i][0]
), а потом правому числу присвоить temp
, что является числом левого столбца и вот так происходит обмен)))
for
-loop, потому что это типичная ошибка при таких операциях с массивами.s
, но переменные/массивы/классы/методы называть понятным тебе и всем именем, а то запутаешься)P.S. Украинский не знаю, поэтому комментарии на русском
Вот код:
package lab10.pkg2;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class Lab102{
private ArrayList<String> s = new ArrayList<>();
private int row, column;
private int[][] array;
public static void main(String[] args) {
Lab102 lab102 = new Lab102();
lab102.readingDataInFile("test.txt");
lab102.getArray();
lab102.reverseTable();
lab102.printArray();
}
private void readingDataInFile (String filename) {
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line = "";
while ((line = reader.readLine()) != null) {
s.add(line);
}
row = s.size(); /* подсчитываю кол-во строк */
column = s.get(0).split(" ").length; /* подсчитываю кол-во колонок */
// System.out.println("rows = " + row + " columns = " + column); /* проверка кол-ва строк и колонок */
array = new int[row][column];
reader.close();
} catch (IOException e) {
System.out.println("Неможливо прочитати файл!");
}
}
//переводим массив из ArrayList в обычный array
private void getArray() {
String[] locArray;
for(int i = 0; i < s.size(); i++) {
locArray = s.get(i).split(" ");
for (int j = 0; j < locArray.length; j++ ) {
array[i][j] = Integer.valueOf(locArray[j]);
}
}
//Проверка, что массив записан правильно
// printArray();
}
//меняем последний столбец с первым
private void reverseTable() {
int temp;
for(int i = 0; i < row; i++) {
temp = array[i][0];
array[i][0] = array[i][column-1];
array[i][column-1] = temp;
}
}
//печатаем массив
private void printArray() {
System.out.println("Первоначальный массив:");
for(int i = 0; i < s.size(); i++) {
System.out.println(s.get(i));
}
System.out.println();
System.out.println("Итоговый массив:");
for(int i = 0; i < row; i++) {
for(int j = 0; j < column; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть метод, на вход которого приходит список Json - строкИз них нужно распарсить данные, преобразовать их к рабочему виду и склеить в один текст,...
Столкнулся с проблемой, есть база данных с заказами пользователейЕсть метод, который согласно User id вытягивает заказы именно этого юзера