编写一个程序,该程序将从键盘读取数字到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语句中存在手动阵列复制问题。 请帮助我,谢谢!
答案 0 :(得分:0)
采用Comparator的方法用于对象数组。
因此,对于int的原始类型数组,您无法使用
ArraySort
来做到这一点。
您可以将int[] a = new int [50]
更改为Integer[]
,然后按预期运行。
答案 1 :(得分:0)
让我尝试帮助您,但请耐心等待,因为这并非易事。
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
。也许其他人对此有更多了解。
总而言之,您应该仔细看一下数组。您使用的是哪一个,而输入中的实际数据仍未填充。
因为这是我的第一个答案,而英语不是我的母语,请原谅我可能引起误解的语法或拼写。