是的,所以我有一个2部分排序算法。它全部基于14个随机整数的数组。例如:
int[] a = {9,2,4,8,9,4,3,2,8,1,2,7,2,5};
现在,我要弄清楚如何做的第一件事就是计算原始数组中存在的特定数量。因此,我们知道1存在一次,而2在原始数组中存在4次。但就像在视觉上看到这一样简单,如果我们无法访问原始数组该怎么办。因此,我需要设计一种方法来计算每个数字1-9中存在的数量,并将其放入一个名为 count 的新数组中。因此,计数中的索引0将表示整数1,并且其值为1.索引1将表示整数2并且值为4.依此类推。这是我到目前为止所得到的但是我被卡住了。排序对我来说非常具有挑战性。
public static void main(String[] args)
{
// int[] countFinal = {1,4,1,2,1,0,1,2,2}; // The number of times a number 1-9 appears in a[].
// int[] sortedFinal = {1,2,2,2,2,3,4,4,5,7,8,8,9,9}; // What we need as a final product.
int[] a = {9,2,4,8,9,4,3,2,8,1,2,7,2,5};
//int[] count = {};
int[] sorted = {};
countHowMany(a, 1);
countHowMany(a, 2);
countHowMany(a, 3);
countHowMany(a, 4);
countHowMany(a, 5);
countHowMany(a, 6);
countHowMany(a, 7);
countHowMany(a, 8);
countHowMany(a, 9);
}
public static int countHowMany(int[] array, int value)
{
// Gathering a count for how many times a number 1-9 exists and adding it to count[];
int howManyCount = 0;
for (int i = 0; i < array.length; i++)
{
if (array[i] == value)
{
howManyCount++;
}
}
System.out.println(howManyCount);
count = new int[9];
count[howManyCount];
System.out.println(Arrays.toString(count); // Testing the input
return howManyCount;
}
它似乎计算数组中项目正确存在的次数。现在我只想弄清楚如何将该值添加到新的数组count []中并为每个countHowMany()执行此操作。这是我坚持的部分。
一旦我弄清楚count [],我可以用它来创建sorted []。现在排序应该做的是从原始数组中获取数据并计算[]并创建一个新的数组,按升序对其进行排序并允许重复。因此,因为1发生一次而2发生四次,所以新数组将被排序[] = {1,2,2,2,2,...}
这是一个相对较小的程序和少量的整数,所以我可以根据需要创建数组。关键是我只能使用数组而不能使用说ArrayLists。
答案 0 :(得分:2)
您无需单独计算每个值。您可以迭代遍历整个数组,并在遇到每个元素时递增计数器。
int counts = new int[20]; // Choose a value that's bigger than anything in your array.
int[] a = {9,2,4,8,9,4,3,2,8,1,2,7,2,5};
for (int value : a) {
counts[value]++;
}
如果您不知道数组中可能存在的最大值,那么最好使用Map
存储计数,或使用某种List
根据需要增加大小。
答案 1 :(得分:0)
最好只浏览一次数组并为每个可能出现的值递增一个计数器:
int counts[] = new int[10];
for (int n: array)
counts[n]++;
这足以将n
中的每个counts[n]
计算在内。count[]
。然后,您可以从for
数组中读取值。
顺便说一下,对于数组上的int counts[] = new int[10];
for (int i=0; i<array.length; i++) {
int n = array[i];
counts[n]++;
}
循环,您可能没有遇到过这种语法。它相当于
{{1}}
但它不那么冗长。
答案 2 :(得分:0)
您的方法也可能无效,因为您没有对countHowMany函数的返回值执行任何操作。这将完成你想要的:
public static void main(String[] args)
{
int[] a = {9,2,4,8,9,4,3,2,8,1,2,7,2,5};
//count the instances of each number in the array
int[] count = new int[9];
for(int i = 0; i < count.length; i++)
count[i] = countHowMany(a, i+1);
//put the values in the sorted array
int[] sorted = new int[a.length];
int position = 0; // stores the place in the array to put the new digit
for(int digit = 0; digit < 9; digit++)
{
for(int inst = 0; inst < count[digit]; inst++)
{
sorted[position] = digit + 1;
position++;
}
}
System.out.println(Arrays.toString(sorted));
}
你的代码的问题是你试图在countHowMany方法的每次调用中创建count数组,但是一旦方法完成就会销毁这个数组。方法调用应该只返回计数,然后这些返回应该从方法外部放入count数组。但请注意,还有其他方法可以计算每个值的实例数,如其他答案所示。