为什么我的java中的arraySort无法正常工作?

时间:2019-07-12 20:36:49

标签: java arrays sorting

编写一个程序,该程序将从键盘读取数字到int []类型的数组中。您可以假设数组中的条目数为50个或更少。您的程序允许输入任意数量的数字,最多50个。输出将是一个两列的列表。第一列是不同数组元素的列表。第二列是每个元素出现次数的计数。该列表应按第一列中的条目从大到小排序。

import java.util.*;

public class Chapter6Problem6 {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Please enter the numbers for your array.");
        int[][] d = new int [2][50];
        int[] a = new int [50];
        int[] b = new int [50];
        int[] c = new int [50];
        for(int index = 0; index < 50; index++)
        {
            a[index] = keyboard.nextInt();
        }
        ArraySort object = new ArraySort();  //this is where the issue is
        object.sort(a);
        object.duplicate(a, b);
        object.frequency(a, c);



        for(int index = 0; index < 50; index++) //Manual Array copy
        {
            b[index] = d[0][index];
        }
        for(int x = 0 ; x < 50; x++)  //Manual Array copy
        {
            c[x] = d[1][x];
        }
        for(int column = 0; column < 2; column++)
        {
            for(int row = 0; row < 50; row++)
            {
                System.out.print(d[column][row]);
            }
        }
    }


    public int[] sort(int [] a)
    {
        int temp = 0;
        for(int x = 0; x < 49; x++)
        {
            for(int y = 0; y < 49; y++)
            {
                if(a[y] < a[y+1])
                {
                    temp = a[y];
                    a[y] = a[y+1];
                    a[y+1] = temp;
                }
            }
        }
        return a;
    }
    public int[] duplicate(int [] a, int[] b)
    {
        int y = 0;
        for(int x = 0; x < 49; x++)
        {
            if(a[x] != a[x+1])
            {
                a[x] = b[y];
                y++;
            }
        }
        return b;
    }
    public int[] frequency(int [] a, int [] c)
    {
        int y = 1;
        int z = 0;
        for(int x = 0; x < 49; x++)
        {
            if(a[x] == a[x+1])
            {
                y++;
            }
            if(a[x]!= a[x+1])
            {
                y = c[z];
                z++;
                y = 0;
            }   
        }
        return c;
    }
}

由于ArraySort部分,下面的代码当前不起作用,我也不知道为什么。 另外,在for语句中存在手动阵列复制问题。 请帮助我,谢谢!

2 个答案:

答案 0 :(得分:0)

采用Comparator的方法用于对象数组。

  

因此,对于int的原始类型数组,您无法使用ArraySort来做到这一点。

您可以将int[] a = new int [50]更改为Integer[],然后按预期运行。

答案 1 :(得分:0)

让我尝试帮助您,但请耐心等待,因为这并非易事。

ArraySort部分:

ArraySort object = new ArraySort();

这行在这里没有多大意义。为什么?因为您要引用的课程不是您帖子的一部分,或者应该是:

Chapter6Problem6 object = new Chapter6Problem6();
that other guy这样的

表示为评论。 接下来有点奇怪的是,您在以下每种方法中都返回一个数组:

public int[] sort(int [] a)
public int[] duplicate(int [] a, int[] b)
public int[] frequency(int [] a, int [] c)

由于您正在使用这些方法进行操作,或者更有可能将结果输入为输入参数,因此这不是必需的。 将方法更改为

public void sort(int [] a)
public void duplicate(int [] a, int[] b)
public void frequency(int [] a, int [] c)

,您很高兴来到这里。如果将返回类型更改为void,则无需在方法中返回任何内容。

手动阵列复制部分

手动复制部分应该引发异常,因为您要从中复制的数组中没有值。您通过未为其赋值来声明和初始化它们。我不记得初始化数组的值是否设置为0,因为您使用的是int类型,或者无论如何,null的情况都应该是null。也许其他人对此有更多了解。

总而言之,您应该仔细看一下数组。您使用的是哪一个,而输入中的实际数据仍未填充。


因为这是我的第一个答案,而英语不是我的母语,请原谅我可能引起误解的语法或拼写。