在不同条件下增加不同的变量

时间:2014-08-12 11:27:00

标签: java

我有多个int类型变量,并且在特定条件下,这些变量中的任何一个都会增加。现在我必须知道java中的一些数据结构,我可以在不使用多个变量的情况下做这件事。 我的部分代码在这里:

switch(diff)
    {
        case 4:
        {
            count4++;
            break;
        }
        case 5:
        {
            count5++;
            break;
        }
        case 6:
        {
            count6++;
            break;
        }
   }

条件可能会增加,因此不适合为每个新条件添加变量。请让我知道一些其他更好的方法或数据结构,可以解决我的问题。

编辑1: 我在日志文件中提取耗材行之间的时差。实际上我最后需要一个总结 差3秒= 10 差4秒= 5 出于上述目的,我使用每个时差的计数器变量。我需要知道其他一些方法来做这件事,

6 个答案:

答案 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};

然后count4counts[0]count5counts[1]count6counts[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());
        }
    }