有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中查找两个多集的交集

         for(i=0;i<m1.length();i++)
             for(j=0;j<m2.length();j++)
                 if(m1.charAt(i)==m2.charAt(j)){
                     intersection=intersection+m1.charAt(i); 
                     m2.charAt(j)=' ';



                 }

                    System.out.println(intersection);



         } while(devam==false);

    }

}

这是我的密码。我们不允许使用方法或数组,我们只是初学者。我的代码在m2.charAt(j)=' ';点给出了一个错误。我写这条线是因为,当我们找到一个交点时,我们不应该再检查那个元素。你能帮忙吗


共 (2) 个答案

  1. # 1 楼答案

    不能使用修改字符串的内容

    m2.charAt(j)=' ';
    

    改为这样做

    m2 = m2.replace(m2.charAt(j), ' ');
    

    请注意,replace()将替换字符串中与第一个参数相等的第一个字符。我假设,由于字符串表示一个集合,因此不会是重复的字符。如果有,并且您想替换所有这些,只需使用replaceAll()

  2. # 2 楼答案

    正如Brian所说,java中的字符串是不可变的。这意味着您不能通过像m2.charAt(j)=' '这样的方法调用进行赋值。这意味着您必须使用另一种方法来跟踪是否已找到角色

    您可以将它添加到intersection,在检查字符时,使用intersection.indexOf(char c)确保它不在intersection中,如果返回-1,则它不在字符串中

    编辑:

    抱歉,没有考虑到输出应该是多集。如果输出是一个集合,上述方法解决了这个问题

    您可以在m2上使用replaceFirst(String searchFor, String replacement)来删除它。可能是这样的:

        for( int i =0; i < m1.length(); i+=2)
        {
           if(m2.indexOf(m1.charAt(i)) != -1)
           {
              intersection = intersection + m1.charAt(1) + " ";
              m2 = m2.replaceFirst(new String(m1.charAt(i)), "");
           }
        }
    

    所以如果m1='1235'和m2='1421'

    第一关:在“14 2 1”中查找1

    第二关:在'421'中寻找1

    第三关:在'42'中寻找2

    第四关:在'4'中寻找3个

    第五关:在'4'中查找5

    正在返回“11 2”

    请注意,它将变量增加2以考虑空格。如果我们假设两个字符串的形式为“a”,且“a”仅为单个字符,则这仅为。如果存在长度超过一位数的数字或字符,则必须跳过空白并以不同的方式解释字符串,而不仅仅是逐个字符查看

    如果我们可以做出这些假设,那么在执行这个循环之前,明智的做法是使用Stringtrim方法iem1 = m1.trim()修剪m1的尾随和前导空格