【问题标题】:How to add repeated data in Java array?如何在Java数组中添加重复数据?
【发布时间】:2017-05-24 09:56:10
【问题描述】:

我有一个名称为 (String name[]={"a","b","a","c","a","b","c"};) 的数组和另一个数量为 (int qty[]={10,20,10,40,10,40,70};) 的数组与名称数组相对应。现在,我只想要另一个数组添加与它们的name[] 对应的类似qty[] 值,即我需要tempname[]={"a","b","c"}tempqty[]={30,60,110}。这里 tempname 包含 name 的唯一值, tempqty 包含 a、b、c 的添加。

temp=name;
    qty1=qty;
    for(i=0;i<name.length;i++){
        temp1=qty[i];
        for(int j=0;j<name.length;j++){
            if (name[i]==temp[j+1]){
                temp1=temp1+qty1[j+1];
            }
        }          
    }

我试过上面的方法。在这里,我可以添加“a”名称的数量,但我没有得到我的结果。请就此提出建议或给我任何其他方法来解决问题。提前谢谢你。

【问题讨论】:

  • C 没有字符串类型....
  • 请添加一个 MCVE stackoverflow.com/help/mcve
  • @SouravGhosh 好像是Java(见标签)
  • 我建议你使用地图
  • @CIsForCookies 好吧,我的错

标签: java android arrays


【解决方案1】:

您可以通过 ArrayList 轻松做到这一点。我为你做了这个:

String name[]={"a","b","a","c","a","b","c"};
int qty[]={10,20,10,40,10,40,70};
ArrayList<String>tempname= new ArrayList<String>();
ArrayList<Integer>tempqty= new ArrayList<Integer>();
for(int i=0;i<name.length;i++){
    int index=tempname.indexOf(name[i]);
    if(index==-1){
        tempname.add(name[i]);
        tempqty.add(qty[i]);
    }
    else{
        tempqty.set(index,tempqty.get(index)+qty[i]);
    }
}
for(int i=0;i<tempname.size();i++){
    System.out.printf(tempname.get(i)+" ");
}   
System.out.println();
for(int i=0;i<tempqty.size();i++){
    System.out.printf(tempqty.get(i)+" ");
}

【讨论】:

  • 所以基本上你从一个数组转换为一个数组列表?
  • 没有。在没有计算的情况下无法预测 tempname 列表大小的地方,所以我感觉更好地使用 arraylist 作为其动态数组大小。它也可以解决我的字符串数组,但是会有一些无用的空内存块。
  • 欢迎@Tabishkhan :)
【解决方案2】:

使用 HashMap:

HashMap<String, Integer> quantity = new HashMap<>();
for(int i = 0; i < name.length; i++) {
    if(!quantity.containsKey(name[i])) {
        quantity.put(name[i], qty[i]);
    } else {
       quantity.put(name[i], quantity.get(name[i]) + qty[i]); 
    }
}

未经测试,但你会明白的。

【讨论】:

    【解决方案3】:

    我建议为此使用哈希图之类的东西

    例子:

    HashMap<String, int> hmap = new HashMap<String, int>();
    hmap.put("a", 1);
    hmap.put("b", 2);
    

    为了获得价值使用

    hmap.get("a"); // will give 1
    

    循环遍历所有内容

    Iterator it= hmap.keySet().iterator();
    while(it.hasNext()) {
        String key=(String)it.next();
        int value=(int)hmap.get(key);
        // do something
    }
    

    【讨论】:

      【解决方案4】:

      如果您想将值放在一起,因为它们属于一起,您可以创建一个类。

      class MyStoreThing {
        String name;
        int quantity;
      }
      
      int getSummarizedQuantityOfAllWithName(String name) {
        int summarizedQuantity = 0;
        for (int i = 0; i < myList.length; i++) {
          summarizedQuantity  += name.equals(myList.getName()) ? myList.getQuantity : 0;
        }
        return summarizedQuantity;
      }
      
      ArrayList<MyStoreThing> myList = new...;
      // populate list: myList.add(new MyStoreThing("a", 10)) ...
      // call getSummarizedQuantityOfAllWithName("a");
      

      【讨论】:

        猜你喜欢
        • 2020-09-11
        • 2019-06-22
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 2016-08-15
        • 2016-12-27
        相关资源
        最近更新 更多