Я пытаюсь отсортировать таблицу для каждой строки и каждого столбца в порядке возрастания. Ниже приведен пример:
1 4
3 2
---
1 2
3 4
Я должен поддерживать методы из интерфейса publi c. Класс Table, который отображается ниже:
package sorting;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
public class Table {
// table is an array of 0..(range-1) X 0..(range-1)
private int[][] table;
private int range;
public Table (int N, int[] values ) throws Exception {
// N has to be a square
int k = (int) Math.sqrt((double)N);
if (k*k != N) {
System.out.println("ERROR!: Input must be square.");
throw new Exception();
}
// create table
range = k;
table = new int[range][range];
// put the data into the table
for (int r=0; r<range; r++) {
for (int c=0; c<range; c++) {
setTableValue (r, c, values[r*range+c]);
}
}
}
//Returns N
public int getSize () {
return range;
}
//Returns the integer at (row, column)
public int getTableValue (int r, int c) {
return table[r][c];
}
//Sets the value of the
//table at row, column to value
public void setTableValue(int r, int c, int v) {
table [r][c] = v;
}
public String toString () {
String retS = "";
for (int r=0; r<range; r++) {
for (int c=0; c<range; c++) {
String s = String.format("%6d", getTableValue (r, c));
retS = retS + s + " ";
}
retS += "\n";
}
return retS;
}
// given a file name, return a Table object.
// The file contains a list of integers representing an NxN
// table of values.
public static Table GetTable (String filename)
throws FileNotFoundException, IOException, Exception {
File f=new File(filename);
if (!f.exists()) {
throw new FileNotFoundException();
}
return GetTable (f);
}
//Returns an instance of table initialized
//with values from the file filename.
public static Table GetTable (File f) throws IOException, Exception {
//File fi = new File (".");
//for (String filename : fi.list()) System.out.println(filename);
byte[] bytes = new byte[(int) f.length()];
FileInputStream fis = new FileInputStream(f);
fis.read(bytes);
fis.close();
String [] valueStr;
int[] tall;
int i;
valueStr = new String(bytes).trim().split("\\s+");
tall = new int[valueStr.length];
for (i=0; i < valueStr.length; i++) {
tall[i] = Integer.parseInt(valueStr[i]);
}
System.out.println(Arrays.asList(tall));
return new Table (valueStr.length, tall);
}
}
Класс TableSorter сортирует Table t в порядке возрастания для каждой строки и столбца. Я пытаюсь следовать следующему алгоритму сбора с этого веб-сайта: Сортировка матрицы по строкам и столбцам
По сути, выполняются следующие шаги: 1. Сортировка каждой строки матрицы , 2. Получить транспонирование матрицы. 3. Снова отсортируйте каждую строку матрицы. 3. Снова получите транспонирование матрицы.
Проблема, с которой я столкнулся, заключается в шаге 1 (я не начал шаг 2). Я застрял в попытке поменять значения для сортировки строк. Обратите внимание, что в настоящее время я работаю над функцией sortable . Любые отзывы приветствуются.
Класс TableSorter отображается ниже:
/*
* The Table Sorter class supports the public Table interface.
* First it determines if the Table t is sorted in ascending
* order for every row and column.
* Second it sorts Table t if it is not sorted in ascending
* order.
* Version: 1.1
* Date: 1-29-2020
*/
package sorting;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TableSorter {
//Returns true if every row and every column of
//the Table t is sorted in ascending order
public static boolean isSorted(Table t){
//Loop through the rows of Table t
for (int i = 0; i < t.getSize() - 1; i++) {
//Loop through the columns of Table t
for (int j = 0; j < t.getSize() - 1; j++)
if (t.getTableValue(i, j) >t.getTableValue(i + 1 , j))
return false;
}
return true;
}
//Sorts a Table so that isSorted() is true
public static void sortRows(Table t) {
// Loop through the rows of Table t
for (int i = 0; i < t.getSize(); i++) {
//Loop through the columns of Table t
for (int j = 0; j < t.getSize(); j++) {
//Compare and swap values in every row
for (int k = 0; k < t.getSize() - j - 1; k++) {
if (t.getTableValue(i,k) > t.getTableValue(i,k + 1)) {
//Swap values
int temp = t.getTableValue(i, k);
//t.getTableValue(i, k) = t.getTableValue(i, k + 1);
//t.getTableValue(i, k + 1) = temp;
}
}
}
}
System.out.println(t);
}
public static void sortable (Table t){
sortRows(t);
}
public static void main (String [] args) throws FileNotFoundException, IOException, Exception{
//Create Table object
Table table = Table.GetTable("C:\\Users\\juan\\workspace\\matrix.txt");
System.out.print(table);
//Sort Table t
sortable(table);
System.out.print(table);
}
}