现有两个数组 str1[] = {"2","3","4"}; str2[] = {"3,"4,"5,"6}; 现要实现将str2数组和str1数组比较,取出str2中相比str1中增加的和减少的值,并要得到该值是新增的还是删除的 组成一个新的数组。  如str1和str2比较得到的数组是{["2","-"],["5","+"],["6","+"]}

解决方案 »

  1.   

    简单的用循环就可以了
    先用str2 中的每一个和str1中的比较 没找到 就是+的
    然后反过来用str1中每一个 和str2的比较 没有的 就是-的
      

  2.   

     public static void main(String[] args) {
            String[] str1 = { "2", "3", "4" };
            String[] str2 = { "3", "4", "5", "6" };
            String[][] d = compareStrArray(str1, str2);
            for(int i = 0; i<d.length; i++){
                for(int j = 0, jlen = d[i].length ; j < jlen; j++){
                    if(j > 0)
                        System.out.print(",");
                    System.out.print(d[i][j]);
                }
                System.out.println();
            }   
        }    public static String[][] compareStrArray(String[] str1, String[] str2) {
            List<String[]> resultList = new ArrayList<String[]>();
            List<String> list2 = new ArrayList<String>();
            for (String s : str2) {
                list2.add(s);
            }        for (String s1 : str1) {
                boolean existed = false;
                for (int i = list2.size() - 1; i > -1; i--) {
                    String s2 = list2.get(i);
                    if (s2.equals(s1)) {
                        existed = true;
                        list2.remove(i);
                        break;
                    }
                }            if (!existed) {
                    resultList.add(new String[] { s1, "-" });
                }
            }        for (String s : list2) {
                resultList.add(new String[] { s, "+" });
            }
            
            String[][] ret = new String[resultList.size()][];
            for(int i = 0 ; i < resultList.size() ; i++){
                ret[i] = resultList.get(i);;
            }
            
            return ret;
        }
      

  3.   

    你的意思就是以str2为被比较数组,如果发现str1中存在而str2不存在 那么就表示缺少: 就是“X”,“-”
    如果str2有可是str1没有的元素 那么就是多余 :“Y”,“+”
    是这个意思吗? 我觉得这样的表述更容易理解
    个人觉得楼上的想法是对的, 不过没有必要再遍历第二个数组了,遍历第一个数组 再进行比较时 用一个变量记录就好了,只要第二个数组中没有被标记的就是多余的,这样时间复杂度就低了,
    个人看法 欢迎拍砖
      

  4.   

    试试这个吧~~~~
    public static void main(String[] args) {
    String str1[] = {"2","3","4"}; 
    String str2[] = {"3","4","5","6"}; 
    List<String> addList = new ArrayList<String>();
    for (int i = 0; i < str1.length; i++) {
    for (int j = 0; j < str2.length; j++) {
    if(str1[i].equals(str2[j])){
    break;
    }
    if(j==str2.length-1){
    if(!addList.contains(str1[i]))
    addList.add(str1[i].toString());
    }
    }
    }
    String addResult[][] = new String[addList.size()][2];;
    for(int k=0;k<addList.size();k++){
    String r = (String)addList.get(k);
    addResult[k][0] = r;
    addResult[k][1] = "-";
    System.out.println(addResult[k][0]+":"+addResult[k][1]);
    }
    List<String> minList = new ArrayList<String>();
    for (int i = 0; i < str2.length; i++) {
    for (int j = 0; j < str1.length; j++) {
    if(str2[i].equals(str1[j])){
    break;
    }
    if(j==str1.length-1){
    if(!minList.contains(str2[i]))
    minList.add(str2[i].toString());
    }
    }
    }
    String minResult[][] = new String[minList.size()][2];;
    for(int k=0;k<minList.size();k++){
    String r = (String)minList.get(k);
    minResult[k][0] = r;
    minResult[k][1] = "-";
    System.out.println(minResult[k][0]+":"+minResult[k][1]);
    }
    }
      

  5.   

    刚刚有点小问题~~~~
     minResult[k][1] = "-";这个应该改成minResult[k][1] = "+";
     就是楼主要求的了
      

  6.   

    blazingfire的方法是正确的非常感谢大家 散分