我有多个int类型变量,并且在特定条件下,这些变量中的任何一个都会增加。现在我必须知道java中的一些数据结构,我可以在不使用多个变量的情况下做这件事。 我的部分代码在这里:
switch(diff)
{
case 4:
{
count4++;
break;
}
case 5:
{
count5++;
break;
}
case 6:
{
count6++;
break;
}
}
条件可能会增加,因此不适合为每个新条件添加变量。请让我知道一些其他更好的方法或数据结构,可以解决我的问题。
编辑1: 我在日志文件中提取耗材行之间的时差。实际上我最后需要一个总结 差3秒= 10 差4秒= 5 出于上述目的,我使用每个时差的计数器变量。我需要知道其他一些方法来做这件事,
答案 0 :(得分:1)
您可以使用Map(例如HashMap),其中键表示变量的名称,而map的值表示变量的值。这允许具有灵活的数据结构,其中不需要知道有多少"变量"会有。
答案 1 :(得分:0)
您可以使用HashMap
示例:
public class Test
{
public static void main(String[] args)
{
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("counter5", 1);
map.put("counter4", 1);
map.put("counter2", 1);
map.put("counter1", 1);
int diff = 2;
compute(map, diff);
diff = 2;
compute(map, diff);
diff = 1;
compute(map, diff);
}
private static void compute(HashMap<String, Integer> map, int diff)
{
System.out.println("Before counter no: "+diff+" value "+map.get("counter" + diff));
Integer counter = map.get("counter" + diff);
map.put("counter" + diff, --counter);
System.out.println("After counter no: "+diff+" value "+map.get("counter" + diff));
System.out.println("");
}
}
答案 2 :(得分:0)
这很奇怪,因为你给变量的名字,但你可以使用数组:
int[] counts = {0, 0, 0};
然后count4
为counts[0]
,count5
为counts[1]
,count6
为counts[2]
,您可以这样做:
counts[diff - 4]++;
答案 3 :(得分:0)
作为pzaenger,您可以执行以下操作: 你已经知道有多少个案例,所以你可以初始化一个那么大的数组。就像你有10个案例那么你可以初始化一个大小为10的int数组:
int[] count = new int[10];
现在假设你有一个4的情况,即int数组的第四个索引,但索引从0开始,所以你可以做
int[4-1] = int[4-1]++;
答案 4 :(得分:0)
如果你只是想跟踪差异数字,你可以做这样的事情。
Map<Integer, Integer> pathMap = new HashMap<Integer, Integer>();
public void testSaveEntries() {
for ( int i = 0; i < 10; i++) {
int value = i % 5;
increaseCounter(value);
}
}
private void increaseCounter(int i) {
Integer value = pathMap.get(i);
pathMap.put(i, value == null ? 1 : ++value);
}
答案 5 :(得分:0)
试试这个......
public static void main(String[] args) {
int[] aaa=new int[]{10,2,4,5,7,8,3,34,4,4,545,5,3,4,4,5,5,5,10,3,4,45,6,2,7};
Map<Integer, Integer> all_counts=new LinkedHashMap<Integer,Integer>();
for (int key : aaa) {
if(all_counts.containsKey(key))
{
Integer count=all_counts.get(key);
count++;
all_counts.put(key, count);
}
else
{
all_counts.put(key, 1);
}
}
for (Map.Entry<Integer, Integer> entry : all_counts.entrySet())
{
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
}