有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

排序Java多维数组

我正在尝试对数组的内容进行排序,虽然它似乎在工作(没有运行时错误;正在执行排序任务),但排序后的前10行与其余行的顺序不一致

类协调排序。java

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class coordSort {
@SuppressWarnings({ "unchecked", "unused" })
public static void main (String args[]) throws IOException {

    String xCoord, yCoord;
    int coordSum;
    Scanner input = new Scanner(System.in);

    //Get x coordinate from user
    System.out.print("Enter x coordinate: ");
    xCoord = input.next();

    //Get x coordinate from user
    System.out.print("Enter y coordinate: ");
    yCoord = input.next();

    boolean sort = false;

    char[] a = xCoord.toCharArray();
    char[] b = yCoord.toCharArray();

    //validate user input is a digit 
    if ( (Character.isDigit(a[0]))  ) {     
        if(Character.isDigit(b[0]) ){
            //digits entered - begin processing all coordinate values
            sort = true;
        }
    }

    //If validation failed, inform user
    if(!sort){
        System.out.println("Please enter a positive numeric value.");
    }

    if(sort){       
        //determine SUM of user entered coordinates
        coordSum = Integer.parseInt(xCoord) + Integer.parseInt(yCoord);

        //define coordinate array
        String[][] coordUnsortedArray = new String[26][3];
        int counter;
        int commaCount;
        String xCoordIn, yCoordIn;
        int intXCoordIn, intYCoordIn, sumCoordIn, coordDiff;

        //define input file
        FileInputStream fileIn = new FileInputStream("coords.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(fileIn)); 

        for (int j = 0; j < coordUnsortedArray.length; j++){
            counter = 0;
            commaCount = 0;
            //line from file to variable
            String coordSet = reader.readLine();     

            //look for the second "," to determine end of x coordinate
            for(int k = 0; k < coordSet.length(); k++){
                if (coordSet.charAt(k) == ',') {
                    commaCount++;
                    counter++;
                    if (commaCount == 2){
                        break;
                    }
                }else{
                    counter++;
                }
            }

            //define x coordinate
            xCoordIn = (coordSet.substring(2,(counter - 1)));
            intXCoordIn = Integer.parseInt(xCoordIn);

            //define y coordinate
            yCoordIn = (coordSet.substring((counter),coordSet.length()));
            intYCoordIn = Integer.parseInt(yCoordIn);

            //coordinate calculations
            sumCoordIn = Integer.parseInt(xCoordIn) + Integer.parseInt(yCoordIn);
            coordDiff = sumCoordIn - coordSum;

            //load results to array
            coordUnsortedArray[j][0] = xCoordIn;
            coordUnsortedArray[j][1] = yCoordIn;
            coordUnsortedArray[j][2] = Integer.toString(coordDiff);

            //Output Array (BEFORE SORTING)
            //System.out.println((j + 1) + ") " + coordUnsortedArray[j][0] + " : " + coordUnsortedArray[j][1] + " : " + coordUnsortedArray[j][2]);                  
        }             

        System.out.println("\n");

        fileIn.close();

        String[][] coordsSorted = new String[26][3];

        //Sort array coordDiff, column 3
        Arrays.sort(coordUnsortedArray, new ColumnComparator(2));

        //Print the sorted array
        for(int i = 0; i < coordUnsortedArray.length; i++){
            String[] row = coordUnsortedArray[i];
            System.out.print((i + 1) + ") ");
            for(int j = 0; j < row.length; j++) {
                //System.out.print(row[j] + " | ");
                coordsSorted[i][j] = row[j];
                System.out.print(coordsSorted[i][j] + " : ");
            }
            System.out.print("\n");
        }
    }
}
}

类排序词。java--

import java.util.Comparator;

@SuppressWarnings("rawtypes")
class ColumnComparator implements Comparator {
    int columnToSort;
    ColumnComparator(int columnToSort) {
        this.columnToSort = columnToSort;
    }
    //overriding compare method
    public int compare(Object o1, Object o2) {
        String[] row1 = (String[]) o1;
        String[] row2 = (String[]) o2;
        //compare the columns to sort
        return row1[columnToSort].compareTo(row2[columnToSort]);
    }

    //overriding compare method
    public int compare1(Object o1, Object o2) {
        String[] row1 = (String[]) o1;
        String[] row2 = (String[]) o2;
        //compare the columns to sort
        return row1[columnToSort].compareTo(row2[columnToSort]);
    }
} 

我试图按第3列的数字顺序对数组进行排序。未排序的数组由包含以下内容的文本文件填充:

a、44、67

b、31、49

c、93、6

我正在对数组执行与用户输入相比较的计算,并按如下方式填充数组:

4467101

31,49,70

93,6,89

我希望SorterDarray输出以下内容:

31,49,70

93,6,89

4467101


共 (3) 个答案

  1. # 1 楼答案

    如图所示。您需要比较它们的int值,也就是说,您需要在那里进行强制转换

        int num1 = Integer.parseInt(row1[columnToSort]);
        int num2 = Integer.parseInt(row2[columnToSort]);
        if(num1 > num2)
                return 1;
        else 
                return 0;
    

    将此代码放入compareTo方法并检查。将return语句交换为按相反顺序排序

    另外,在compareTo方法中添加一些错误检查将使代码更加高效

  2. # 2 楼答案

    好的,在这里提供了帮助之后,下面是我们找到的解决方案。再次感谢大家的帮助!希望下面的代码能帮助其他人

    1类代码

    import java.io.*;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class coordSort {
        @SuppressWarnings({ "unchecked" })
        public static void main (String args[]) throws IOException {
    
            String xCoordChar, yCoordChar;
            int xCoord, yCoord, coordSum;
            Scanner input = new Scanner(System.in);
    
            //Get x coordinate from user
            System.out.print("Enter x coordinate: ");
            xCoordChar = input.next();
    
            //Get x coordinate from user
            System.out.print("Enter y coordinate: ");
            yCoordChar = input.next();
    
            boolean sort = false;
    
            char[] a = xCoordChar.toCharArray();
            char[] b = yCoordChar.toCharArray();
    
            //validate user input is a digit 
            if ( (Character.isDigit(a[0]))  ) {     
                if(Character.isDigit(b[0]) ){
                    //digits entered - begin processing all coordinate values
                    sort = true;
                }
            }
    
            //If validation failed, inform user
            if(!sort){
                System.out.println("Please enter a positive numeric value.");
            }
    
            if(sort){       
                //Parse user input characters to Integers
                xCoord = Integer.parseInt(xCoordChar);
                yCoord = Integer.parseInt(yCoordChar);
    
                //determine SUM of user entered coordinates
                coordSum = xCoord + yCoord;
    
                //define coordinate array
                int[][] coordUnsortedArray = new int[26][3];
                int counter;
                int commaCount;
                String xCoordIn, yCoordIn;
                int intXCoordIn, intYCoordIn, sumCoordIn, coordDiff;
    
                //define input file
                FileInputStream fileIn = new FileInputStream("coords.txt");
                BufferedReader reader = new BufferedReader(new InputStreamReader    (fileIn)); 
    
                for (int j = 0; j < coordUnsortedArray.length; j++){
                    counter = 0;
                    commaCount = 0;
                    //line from file to variable
                    String coordSet = reader.readLine();     
    
                    //look for the second "," to determine end of x coordinate
                    for(int k = 0; k < coordSet.length(); k++){
                        if (coordSet.charAt(k) == ',') {
                            commaCount++;
                            counter++;
                            if (commaCount == 2){
                                break;
                            }
                        }else{
                            counter++;
                        }
                    }
    
                    //define x coordinate
                    xCoordIn = (coordSet.substring(2,(counter - 1)));
                    intXCoordIn = Integer.parseInt(xCoordIn);
    
                    //define y coordinate
                    yCoordIn = (coordSet.substring((counter),coordSet.length()));
                    intYCoordIn = Integer.parseInt(yCoordIn);
    
                    //coordinate calculations
                    sumCoordIn = Integer.parseInt(xCoordIn) + Integer.parseInt    (yCoordIn);
                    coordDiff = sumCoordIn - coordSum;
    
                    if (coordDiff < 0){
                        coordDiff = coordDiff * (-1);
                    }
    
                    //load results to array
                    coordUnsortedArray[j][0] = intXCoordIn;
                    coordUnsortedArray[j][1] = intYCoordIn;
                    coordUnsortedArray[j][2] = coordDiff;                           
                }             
    
                fileIn.close();
                System.out.print("\n");
                System.out.println("Array Before Sorting:");
                System.out.println("=====================");
    
                //Array Before Sorting
                for(int i = 0; i < coordUnsortedArray.length; i++){
                    int[] row = coordUnsortedArray[i];
                    System.out.print((i + 1) + ") ");
                    for(int j = 0; j < (row.length - 1); j++) {
                        coordUnsortedArray[i][j] = row[j];
                        if(j < 1){
                            System.out.print(coordUnsortedArray    [i]    [j] + ",");   
                        }else{
                            System.out.println(coordUnsortedArray    [i]    [j]);
                        }
                    }
                }
    
                System.out.print("\n");
                System.out.print("\n");
    
                //Sort array coordDiff, column 3
                Arrays.sort(coordUnsortedArray, new ColumnComparator(2));
    
                System.out.println("Array After Sorting:");
                System.out.println("====================");
    
                //Original Array After Sorting
                for(int i = 0; i < coordUnsortedArray.length; i++){
                    int[] row = coordUnsortedArray[i];
                    System.out.print((i + 1) + ") ");
                    for(int j = 0; j < (row.length - 1); j++) {
                        coordUnsortedArray[i][j] = row[j];
                        if(j < 1){
                            System.out.print(coordUnsortedArray[i][j] + ",");   
                        }else{
                            System.out.println(coordUnsortedArray    [i]    [j]);
                        }
                    }
                }
                }
            }
    }
    

    类别2的代码

    import java.util.Comparator;
    
    @SuppressWarnings("rawtypes")
    class ColumnComparator implements Comparator {
    int columnToSort;
    ColumnComparator(int columnToSort) {
    this.columnToSort = columnToSort;
    }
    
    //Compare method
    public int compare(Object o1, Object o2) {
        int[] row1 = (int[]) o1;
        int[] row2 = (int[]) o2;
    
        int intRow1 = (row1[columnToSort]);
        int intRow2 = (row2[columnToSort]);
    
        return new Integer(intRow1).compareTo(new Integer(intRow2));
    }
    }    
    
  3. # 3 楼答案

    这里有一个可能的混淆:

     return row1[columnToSort].compareTo(row2[columnToSort])
    

    这是一个字符串比较,不是数字比较。如果你根据字符串排序,你会得到不同于按数字排序的结果——即“1”、“10”、“100”、“9”和1,9,10100

    看看Integer.parseInt,如果你想不出其余的问题,可以问更多的问题