当前位置: 首页 > 知识库问答 >
问题:

java二维数组排序

督德明
2023-03-14

编写一个程序,提示用户输入一个双值nxn矩阵,并显示一个新的矩阵,其中对初始矩阵的列进行了排序。您可以使用任何排序算法来解决问题;请在代码头中指定所用排序算法的名称。您的程序必须实现排序算法;不能使用Array类中提供的排序方法。排序应该实现到一个方法中,其中返回一个新数组,而原始数组保持不变:

public static double[][] sortCol(double[][] a)

该程序还应该实现一个方法,打印初始和结果矩阵给用户。打印出来的应该是很好的格式。下面是一个运行示例:

What is the dimension of matrix? 3 
Enter a 3x3 matrix row by row: 

0.15 0.875 0.375

0.55 0.005 0.225

0.30 0.12 0.4

The column sorted array is: 

0.15 0.005 0.225

0.3 0.12 0.375

0.55 0.875 0.4

这就是我所拥有的。我相信它几乎是完美的。我认为我使用的排序方法会对列进行排序,但也可能对行进行排序。然而,当我运行程序时,我得到了这个…

异常线程主java.util.InputMismatchExceptionjava.util.Scanner.throwFor(Scanner.java:909)java.util.Scanner.next(Scanner.java:1530)java.util.Scanner.nextDouble(Scanner.java:2456)Hmwk3_jrgluck.main(Hmwk3_jrgluck.java:16)

任何想法/帮助.

import java.util.Scanner;

public class sdfjasdf {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("What is the dimension of your matrix?");
        int matrixdim = input.nextInt();
        double[][] matrix = new double[matrixdim][matrixdim];

        System.out.println("Enter " + matrixdim + " rows, and " + matrixdim
                + " columns.");
        Scanner input1 = new Scanner(System.in);
        for (int row = 0; row < matrix.length; row++) {
            for (int column = 0; column < matrix.length; column++)
                matrix[row][column] = input1.nextDouble();
        }
        System.out.println(sortCol(matrix));
    }

    public static double sortCol(double[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            double currentMin = matrix[i][0];
            int currentMinIndex = i;

            for (int j = i; j < matrix.length; j++) {
                if (currentMin > matrix[j][0]
                        || (currentMin == matrix[j][0] && matrix[currentMinIndex][1] > matrix[j][1])) {
                    currentMin = matrix[j][0];
                    currentMinIndex = j;
                }
            }

            if (currentMinIndex != i) {
                double temp0 = matrix[currentMinIndex][0];
                double temp1 = matrix[currentMinIndex][1];
                matrix[currentMinIndex][0] = matrix[i][0];
                matrix[currentMinIndex][1] = matrix[i][1];
                matrix[i][0] = temp0;
                matrix[i][1] = temp1;
            }
        }
        return sortCol(matrix);
    }
}

共有1个答案

张溪叠
2023-03-14

我怀疑您的语言环境可能需要逗号,而不是浮点数格式的点。尝试将数据更改为

0,15 0,875 0,375
0,55 0,005 0,225
0,30 0,12 0,4

如果这是真的,但您更喜欢(或必须)使用点而不是逗号,则可以通过调用

input.useLocale(new Locale("en", "US"));

或者在创建扫描仪对象之前更改全局区域设置

Locale.setDefault(new Locale("en", "US"));

也返回类型排序Col应该是以太

  • double[][]以防返回数组的排序副本(而不更改原始副本)。在这种情况下,您需要首先创建原始阵列的副本
  • void以防您想对原始数组排序(您不必返回对对象的引用,因为您将它用作方法参数)

现在,您正试图通过再次调用 sortCol(矩阵)来返回 double,因此它将再次尝试返回 sortCol(矩阵)(等等),这将导致堆栈溢出

 类似资料:
  • 问题内容: 我已经实现了冒泡排序来对二维java long [] []进行排序,但是我的天哪太慢了,我将需要禁食算法,因为我将生成最大堆大小的数组,jvm将允许我, 所以我认为最好和最快的方法是使用内置的java Arrays.sort 我不介意它是否只能在第一列上排序,因为我可以更改程序以适合它,但我碰到了这一点,但对陌生人并不熟悉, 这将使我能够对整数的维数组进行排序,有人知道如何将其更改为允

  • 主要内容:创建二维数组,初始化二维数组,获取单个元素,获取全部元素,获取整行元素,获取整列元素为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来。二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列。下面简单了解一下二维数组,包括数组的声明和初始化。 创建二维数组 在 Java 中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java 并不直接支持二维数组,但是

  • 问题内容: 在Java中,我的数组中有一个数据,如下所示 我想根据第一列对其进行排序,所以我的最终数据可以像这样 第一列是格式为“ yyyy.MM.dd HH:mm”的日期,第二列是字符串。 问题答案: 根据一列 对二维数组进行排序第一列是日期格式为“ yyyy.MM.dd HH:mm”的日期,第二列是字符串。 因为您说的是二维数组,所以我假设“格式日期…”表示字符串。这是用于对String []

  • 我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我

  • 我正在编写一个计算和绘制抛物线的小程序。但我在程序中有一小部分需要计算valuetable。 二次函数如下:

  • 二维数组 #include <stdio.h> #include <stdlib.h> //01.二维数组: // 1.二维数组的内存存储原理: // 所有数组,无论一维数组,二维数组,多维数组,在内存当中的 // 存储实质都是采取的连续存储方式 // 2.二维数组的规律赋值方式: // 先进行行遍历,在进行列遍历,再逐个进行逐个数组元素的具体赋值操作 //