-1

文字の 2 つの配列を取り、最初の配列に含まれるすべての文字が 2 番目の配列にも含まれている場合は true を返し、それ以外の場合は false を返す静的メソッドをどのように記述しますか。文字は配列内で任意の順序にすることができ、文字が複数回出現しても違いはありません。

ここに私がこれまでに持っているものがありますが、タスクを完了する方法について混乱しています

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



   }


}

学習のためだけに、Java組み込みメソッドを使用せずにこのタスクを完了することは可能でしょうか

ありがとう

4

6 に答える 6

3

問題を 2 つの部分に分けます。

  1. 文字が配列に含まれているかどうかをチェックするメソッドを書く
  2. このメソッドを使用して、最初の配列のすべての文字が 2 番目の配列に含まれていることをテストします。2 番目の配列に含まれていない文字が見つかるとすぐに、false を返すことができます。ループの最後で true を返します。
于 2013-05-12T17:38:18.790 に答える
2
  1. Arrays.asList(array)それらをコレクションに変換して使用します。
  2. 呼び出しfromArray1.containsAll(fromArray2)て結果を取得する

@JBNizet が言ったように、Arrays.asList()プリミティブの配列はありません。

しかし、char1 つの小さなトリックを使用して「コレクション」に変換できますnew String(charArray)。文字列にはメソッドがありません.containsAll(charArray)(それは...一種の-それです.equals(otherString))ので、配列のすべての文字は個別にチェックする必要がありますstring.indexOf(char) != -1

于 2013-05-12T17:38:49.227 に答える
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()メソッドを利用することです。そうすることで、クリーンで明確なコードを取得できます。ロジックは、最初の配列の各文字を調べて、2 番目の配列にあるかどうかを確認し、そうでない場合は false を返すことです。

ループが戻ることなく正常に終了した場合、A の各文字は B にあります。

于 2013-05-12T17:40:38.160 に答える
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;
}
于 2013-05-12T17:41:16.687 に答える
0

文字の出現をカウントするビンとして使用する別の配列 (またはハッシュセット) を作成します。

まず、最初の入力を実行します。最初の入力の文字に対応するビンを に設定しTrueます。

次に、2 番目の入力を実行します。最初の入力の文字に対応するビンを に設定しFalseます。

最後に、ビンにTrue値が残っていない場合は、配列 1 のすべての文字が配列 2 で少なくとも 1 回発生しています。

于 2013-05-12T17:39:32.267 に答える
0

2 番目の配列を一番上に並べ替える

Arrays.sort(arr2);

ループに次の行を追加します。

if(!Arrays.binarySearch(arr2, arr1[i])) return false;
于 2013-05-12T17:40:18.677 に答える