我需要通过用“*”替换它来找出这些数字出现在数组中的次数,但它会给出这么多的星星。 有没有人有建议帮我解决这个问题。 这就是我所拥有的
public class Frequency {
public static void main(String[] args) {
int[] rateFrequency = { 0, 1, 2, 2, 2, 3, 3 };
for (int i = 0; i <= 4; i++) {
System.out.println(i + ":");
for (int j = 0; j <= rateFrequency.length; j++) {
System.out.print(" * ");
}
}
}
}
答案 0 :(得分:1)
也许你可以使用Collections.frequency()方法:
Integer[] rateFrequency = { 0, 1, 2, 2, 2, 3, 3 };
List<Integer> list = Arrays.asList(rateFrequency);
for(int i=0; i<=4; i++){
System.out.println(i+":" + Collections.frequency(list,i));
}
输出:
0:1
1:1
2:3
3:2
4:0
您可以通过创建另一个循环来修改它以打印“*”。
答案 1 :(得分:0)
我建议对于每个数字(0-3),每次一个项目与当前数字相同时,迭代数组并打印一个星号。
您可以通过首先遍历数组来查找数字范围的范围,从而使其更好。
一种可能的替代方法是将数字添加到Multiset
(例如来自Google的Guava图书馆),这可以自动告诉您任何项目的计数。
我在下面提供了一些示例代码。显然,在您尝试自己编写代码之前,请不要查看此代码!
public static void main(String[] args) {
int[] rateFrequency = { 0, 1, 2, 2, 2, 3, 3 };
int maxNum = 0;
for (int i = 0; i < rateFrequency.length; i++) {
maxNum = Math.max(maxNum, rateFrequency[i]);
}
for (int num = 0; num <= maxNum; num++) {
System.out.print(num + ": ");
for (int i = 0; i < rateFrequency.length; i++) {
if (rateFrequency[i] == num) {
System.out.print(" * ");
}
}
System.out.println();
}
}
产地:
0:*
1:*
2:* * *
3:* *
如果您想避免Math.max()
,您可以自己编写等效代码:
int maxNum = 0;
for (int i = 0; i < rateFrequency.length; i++) {
int num = rateFrequency[i];
if (num > maxNum) {
maxNum = num;
}
}
答案 2 :(得分:0)
您可以使用哈希轻松解决此问题。您可以在数组中保留每个数字的计数,然后打印“*”,与数组中存在的次数一样多。
数组的基数,作为数字频率的每个基数中的数字和值。
public class Frequency {
public static void main(String[] args) {
int[] rateFrequency = { 0, 1, 2, 2, 2, 3, 3 };
int[] keepCount = new int[rateFrequency.length]; //to keep frequency of each number
for(int i=0; i<rateFrequency.length; i++)
keepCount[rateFrequency[i]]++; //counting the frequency of each number
for(int i=0; i<rateFrequency.length; i++) {
if(keepCount[i] > 0)
System.out.print(i + ": ");
while(keepCount[i] > 0) {
System.out.print("*"); //printing frequency in terms of *
keepCount[i]--; //decreasing the count
}
System.out.println();
}
}
}
输出
0:*
1:*
2:***
3:**
答案 3 :(得分:0)
选项1:
假设输入数组总是被排序,并且不需要打印零星的值,可以使用这种类型的循环:
int[] arr = { 0, 1, 2, 2, 2, 3, 3 };
int pos = 0;
while(pos < arr.length) {
int current = arr[pos];
System.out.print(current + ":");
do {
System.out.print(" *");
++pos;
} while(pos < arr.length && arr[pos] == current);
System.out.println();
}
<强>输出:强>
0:*
1:*
2:* * *
3:* *
选项2:
但是,如果您需要打印给定范围的所有值(例如0-4),即使它们的零星也是如此,那么我会使用类似的东西(再次,这段代码假定一个有序输入阵列):
final int RANGE = 4;
int[] arr = { 0, 1, 2, 2, 2, 3, 3 };
int pos = 0;
for(int n=0; n <= RANGE; ++n) {
System.out.print(n + ":");
while(pos < arr.length && arr[pos] == n) {
System.out.print(" *");
++pos;
}
System.out.println();
}
<强>输出:强>
0:*
1:*
2:* * *
3:* *
4: