我写了一个存储一些值的java编程:
public class array05 {
public static void main(String[] args) {
//placement of value
int arryNum[] = {2,3,4,5,4,4,3};
//placement of index, to start at 0
for(int counter=0;counter<arryNum.length;counter++){
System.out.println(counter + ":" + arryNum[counter]);
}
}
}
生成这样的输出:
0:2
1:3
2:4
3:5个
4:4个
5:4个
6:3
现在我需要计算此输出#1中的数字。 输出#2应为:
1:0
2:1
3:2
4:3
5:1
这意味着它计算一个2,两个3,三个4,只有一个5。
我不知道如何编写输出2的代码。 这里需要二进制搜索吗?
任何人都能发光吗?
答案 0 :(得分:4)
我建议你使用Map
:
然后您将地图打印为key
和value
。
例如,对于您的数组{2,3,4,5,4,4,3}
,这将按如下方式工作:
地图是否包含密钥2
?不,添加值1.(3
,4
和5
相同)
地图是否包含4
?是!将1添加到其值。现在键 4的值为2
...
答案 1 :(得分:3)
这是解决此问题的方法:
import java.util.Arrays;
public class array05 {
public static void main(String[] args) {
//placement of value
int arryNum[] = {2,3,4,5,4,4,3};
// Sort the array so counting same objects is easy
Arrays.sort(arryNum);
int index = 0; // The current index
int curnum; // The current number
int count; // The count of this number
while (index < arryNum.length) {
// Obtain the current number
curnum = arryNum[index];
// Reset the counter
count = 0;
// "while the index is smaller than the amount of items
// and the current number is equal to the number in the current index,
// increase the index position and the counter by 1"
for (; index < arryNum.length && curnum == arryNum[index]; index ++, count++);
// count should contain the appropriate amount of the current
// number now
System.out.println(curnum + ":" + count);
}
}
}
人们使用Map
发布了很好的解决方案,所以我想我会提供一个总是有效的解决方案(不仅仅是针对当前值),而不使用Map
。
答案 2 :(得分:3)
If you don't want to use Map, this is how you would do it with Arrays only(if you have numbers from 1 to 9 only)
Integer[] countArray = new Integer[10]
// Firstly Initialize all elements of countArray to zero
// Then
for(i=0;i<arryNum.length();i++){
int j = arryNum[i];
countArray[j]++;
}
此countArray在第一个位置的数字为0,在第二个位置的数量为1,依此类推
答案 3 :(得分:3)
如果你期望你的数组值在1-5之间(我假设这是你预期的输出)
int arryNum[] = { 2, 3, 4, 5, 4, 4, 3 };
int[] counter = new int[] { 0, 0, 0, 0, 0 };
for (int i = 0; i < arryNum.length; i++) {
counter[arryNum[i] - 1]++;
}
for (int i = 0; i < counter.length; i++)
System.out.println((i + 1) + ":" + counter[i]);
答案 4 :(得分:2)
这样的事情:
//numbers to count
int arryNum[] = {2,3,4,5,4,4,3};
//map to store results in
Map<Integer, Integer> counts = new HashMap<Integer, Integer>();
//Do the counting
for (int i : arryNum) {
if (counts.containsKey(i) {
counts.put(i, counts.get(i)+1);
} else {
counts.put(i, 1);
}
}
//Output the results
for (int i : counts.keySet()) {
System.out.println(i+":"+counts.get(i));
}
答案 5 :(得分:2)
使用Map存储计数值:
import java.util.HashMap;
import java.util.Map;
class array05{
public static void main(String[] args){
// Container for count values
Map <Integer, Integer> result = new HashMap<Integer, Integer>();
int arryNum[] = {2,3,4,5,4,4,3};
for(int i: arryNum){ //foreach more correct in this case
if (result.containsKey(i)) result.put(i, result.get(i)+1);
else result.put(i, 1);
}
for (int i: result.keySet()) System.out.println(i + ":" + result.get(i));
}
}
结果如下:
2:1
3:2
4:3
5:1
答案 6 :(得分:1)
一种方法是使用地图。当您读取每个数字上的第一个数组时,检查它是否存在于地图中,如果确实存在,则只增加分配给数字(键)的值,如果没有,则在地图中创建一个值为&#34; 1&的新键#34;
查看http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
答案 7 :(得分:1)
您也可以尝试这种方式
int arrayNum[] = {2,3,4,5,4,4,3};
Map<Integer,Integer> valMap=new HashMap<>();
for(int i:arrayNum){ // jdk version should >1.7
Integer val=valMap.get(i);
if(val==null){
val=0;
}
valMap.put(i,val+1);
}
Arrays.sort(arrayNum);
for(int i=0;i< arrayNum[arrayNum.length-1];i++){
System.out.println(i+1+" : "+((valMap.get(i+1)==null) ? 0:valMap.get(i+1)));
}
Out put
1 : 0
2 : 1
3 : 2
4 : 3
5 : 1
但是以下方式更好
int arrayNum[] = {2,3,4,5,4,4,3};
Arrays.sort(arrayNum);
int countArray[]=new int[arrayNum[arrayNum.length-1]+1];
for(int i:arrayNum){
countArray[i]= countArray[i]+1;
}
for(int i=1;i<countArray.length;i++){
System.out.println(i+" : "+countArray[i]);
}
Out put
1 : 0
2 : 1
3 : 2
4 : 3
5 : 1
答案 8 :(得分:0)
我更喜欢这样的通用解决方案:
public static <T> Map<T, Integer> toCountMap(List<T> itemsToCount) {
Map<T, Integer> countMap = new HashMap<>();
for (T item : itemsToCount) {
countMap.putIfAbsent(item, 0);
countMap.put(item, countMap.get(item) + 1);
}
return countMap;
}