【问题标题】:Incrementing different variables on different conditions在不同的条件下增加不同的变量
【发布时间】:2014-08-12 11:27:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 欢迎来到 Stack Overflow,请拨打Tour。请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。见How do I ask a good question?
  • 您可以使用一致数据类型的数组。而不是使用count1 而是arr[0] 或类似这样的想法。
  • switch case可以完全去掉吗??在这种情况下,有几种解决方法。
  • 您可以例如使用 Map 数据结构。地图有键和值。您的键可能是您的数据名称和您递增的值整数。如果密钥不存在,则必须添加它,否则您会增加现有的
  • 这听起来像是代码审查的问题。 (codereview.stackexchange.com)

标签: java


【解决方案1】:

您可以使用 Map(例如 HashMap),其中键表示变量的名称,映射的值表示变量的值。这允许拥有一个灵活的数据结构,在此之前不需要知道有多少“变量”。

【讨论】:

    【解决方案2】:

    这很奇怪,因为您为变量指定了名称,但您可以使用数组:

    int[] counts = {0, 0, 0};
    

    那么count4counts[0]count5counts[1]count6counts[2],所以你可以这样做:

    counts[diff - 4]++;
    

    【讨论】:

      【解决方案3】:

      你可以使用 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("");
       }
      }
      

      【讨论】:

        【解决方案4】:

        作为 pzaenger,您可以执行以下操作: 正如您已经知道有多少案例一样,您可以初始化一个具有这么大大小的数组。就像您有 10 个案例一样,您可以将大小为 10 的 int 数组初始化为:

        int[] count = new int[10];
        

        现在假设你的情况是 4,即 int 数组的第 4 个索引,但索引从 0 开始,所以你可以这样做

        int[4-1] = int[4-1]++;
        

        【讨论】:

          【解决方案5】:

          如果您只想跟踪差异编号,您可以执行以下操作。

          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);
          
          }
          

          【讨论】:

            【解决方案6】:

            试试这个....

              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());
                    }
                }
            

            【讨论】:

            • switch 的目的是什么?
            • 作为参考,我认为也不需要LinkedHashMap,如果你想遍历Map,你应该使用Entry
            • 是的@Djon,您可以使用 Entry 来遍历地图...我也在编辑那个...:)
            猜你喜欢
            • 2021-08-22
            • 1970-01-01
            • 2018-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-09
            相关资源
            最近更新 更多