文字列の2つの配列を渡し、Javaのx配列にあるy個の配列を数えます。

私は文字列xとyの2つの配列を渡したときに、yに現れる各文字列がxに現れる回数を数え、その文字列がyに現れる順番で結果を出力するJavaメソッドを作成しました。例えば、main関数を見ると、ab:2、dc:1、ef:0として出力されます。ab:1、ab:2、dc:3を出力するので、私のコードは機能しませんでした。

public class stringOccurInArray {
    public static void stringOccurInY(String[] x, String[] y) {
        int count = 0;
        for(int i=0; i
1
この質問をする前に、コードを一度デバッグしようとしましたか?
追加された 著者 GD_Java,
なぜ equals()の代わりに contains()を使用していますか?
追加された 著者 Rohit Jain,
また、従来の配列の代わりに ArrayList を使用してみてください。
追加された 著者 Rohit Jain,

6 答え

言及すべきいくつかのことがあります。次のようにコードを書き直すほうが簡単です:

public static void stringOccurInY(String[] x, String[] y) {
    int count = 0;
    for (int i = 0; i < y.length; i++) {          
        for (int j = 0; j < x.length; j++) {
            if (y[i].contains(x[j])) {
                count++;
            }
        }
        System.out.println(y[i] + ": " + count);
        count = 0;//reset the count
    }
}

最初はyを繰り返し処理する必要があります。

また、foreachループを使ってiteratingを置き換えることもできます。

for (String aY : y) {
    int count = 0;
    for (String aX : x) {
        if (aY.contains(aX)) {
            count++;
        }
    }
    System.out.println(aY + ": " + count);
    //no need to reset the count
}
2
追加された
この場合、forの後で count をリセットする必要はありません。その前に再初期化されるため
追加された 著者 BackSlash,
おかげでループから初期化を取りましたが、ループからcount変数を外すのは意味がありません。それはループからの最後に計算されたカウントを持つでしょう
追加された 著者 Tala,
2番目の実装では、リセットする必要がなくなります
追加された 著者 Tala,

それを正しく機能させるには、以下の変更を行います。

  • for ループで xy を切り替えます。
    • 1回の印刷が繰り返されないように、外側ループで印刷します。
    • Initialize count inside the outer loop to avoid repeatedly initializing it.
      public class stringOccurInArray {
          public static void stringOccurInY(String[] x, String[] y) {
              for(int i=0; i
  • 1
    追加された
    public static void stringOccurInY(String[] x, String[] y) {
            int count = 0;
            for(int i=0; i
    1
    追加された
    @MarounMarounありがとう... ifスコープと最初のスコープでミスをした
    追加された 著者 stinepike,
    内側のforループの外側に結果を出力する必要があります。
    追加された 著者 Maroun,

    ループの外側で int j = 0 を定義し、 System.out.println(y [j] + ":" + count); ループの for ループの最初の行で count を0にリセットします。

    ところで、なぜ String#はと同じですか?

    1
    追加された
    コンパイラエラーが表示されます。
    追加された 著者 Rohit Jain,

    以下のコードも試してみてください。あなたが望むものを正確にしますか?

    public static void stringOccurInY(String[] x, String[] y) {
            int count = 0;
            HashMap map = new HashMap();
            for(int i=0; i
    0
    追加された

    あなたのコードは:

    for(int i=0; i
    0
    追加された