Сортировать матрицу по строкам и по столбцам из объекта таблицы в JAVA - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь отсортировать таблицу для каждой строки и каждого столбца в порядке возрастания. Ниже приведен пример:

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);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...