Java Array评估

时间:2013-05-12 17:33:58

标签: java arrays

如何编写一个带有两个字符数组的静态方法,如果第一个数组中包含的每个字符也包含在第二个数组中,则返回true,否则返回false。字符可以是数组中的任何顺序,如果字符出现多次,则没有区别。

到目前为止,这是我所拥有的,但我对如何完成任务感到困惑

public static boolean compare(char[] arr1, char[] arr2)
{
   for(int i=0; i<arr1.length; i++)
   {



   }


}

只是为了学习,可以在不使用java内置方法的情况下完成此任务

感谢

6 个答案:

答案 0 :(得分:3)

将问题分为两部分:

  1. 编写一个检查字符是否包含在数组中的方法
  2. 使用此方法测试第一个数组的每个字符都包含在第二个数组中。只要找到第二个数组中未包含的字符,就可以返回false。在循环结束时,返回true。

答案 1 :(得分:2)

  1. 使用Arrays.asList(array)将它们转换为集合。
  2. 致电fromArray1.containsAll(fromArray2)以获取结果
  3. 正如@JBNizet所说,基元数组没有Arrays.asList()

    但是char可以使用一个小技巧转换为“集合” - new String(charArray)。字符串没有.containsAll(charArray)方法(它有...类型 - 它是.equals(otherString))所以数组中的每个字符都应该由string.indexOf(char) != -1单独检查

答案 2 :(得分:1)

public static boolean compare(char[] arr1, char[] arr2)
{
 String str = new String(arr2);
 //loop
 for(int i = 0; i < arr1.length; i++){
      if(str.indexOf(arr1[i]) == -1){
        return false;
      }
 }
 return true;
}

我们的想法是使用String.indexOf()方法,这样您就可以获得干净清晰的代码。 逻辑是遍历第一个数组中的每个字符,看它是否在第二个数组中,如果它没有返回false。

如果循环成功结束而没有返回,那么A中的每个字符都在B中。

答案 3 :(得分:0)

创建另一个数组(或hashset)以用作计数字符出现次数的bin。

首先,完成第一个输入; 将与第一个输入中的字符对应的bin设置为True

第二,贯穿第二个输入; 将与第一个输入中的字符对应的bin设置为False

最后,如果垃圾箱没有剩余True值, 然后,数组1中的每个字符在数组2中至少出现过一次。

答案 4 :(得分:0)

在顶部排序第二个数组

Arrays.sort(arr2);

在循环中添加以下行:

if(!Arrays.binarySearch(arr2, arr1[i])) return false;

答案 5 :(得分:0)

没问题,只需在循环中单独检查每个字符:

public static boolean compare(char[] arr1, char[] arr2)
{
  List list = Arrays.asList(arr2);
  for(char c: arr1) //this is for-each loop in java
  {

    if(!list.contains(c)) //c isnt in arr2
    {
      //this character from arr1 isnt in arr2 
      return false;
    }
  }
//all characters from arr1 are in arr2
return true;
}