0

私はこの非常に簡単な質問があります.私は私を見つめているだけだと思いますが、私はそれを見ることができません. 配列内の特定の名前の出現回数をカウントする必要がありました。クラスやハッシュマップなどの使用が許可されていなかったので、ループを使用してそれを行いました。たとえば、ジェイクが5回発生するなど、93個の名前があります。アウトを次のようにします。

       Jack - 5

代わりに、私のプログラムは表示します

       Jack - 5
       Jack - 5
       Jack - 5
       Jack - 5
       Jack - 5

一度印刷したいだけです。これが私のループです:

for (int counter = 0; counter < name.length; counter++)
    {
        String n = (name[counter]);
        int count = 0;
        for (int i = 0; i < name.length; i++){
            if (name[i].equals(n))
                count++;
        }

        System.out.println(n + " - " + count);
    }

理想的な出力は次のようになります。

                  Jack - 5

アスタリスクを出力として出力する必要があるので、それを言ってほしい

                 Jack (5) ***** 

各アスタリスクはオカレンスを表し、それらを印刷する方法を知っています。コードに入れましたが、表示されます

                ***** Jack(5) 

どうすればそれを修正できるのだろうかと思っていましたが、何かアイデアはありますか?

4

3 に答える 3

0

すでにカウントした出現回数を持つ名前を格納する別の配列 (たとえばencouteredNames) を試してみませんか? そして、検索対象の名前が以前に検索されていない (またはまだencounteredNames配列に格納されていない) と判断した場合にのみ、「カウント」ループのみを実行します。

これよりも優れた実装があると確信していますが、当面は:

String[] names = {"Jack", "James", "Charles", "Jack", "Jack", "James"};
String[] encounteredNames = new String[names.length];
int encounteredNamesCount = 0;
for (int counter = 0; counter < names.length; counter++) {
  String name = (names[counter]);
  boolean nameAlreadyEncountered = false;
  for (int i = 0; i < encounteredNames.length && encounteredNames[i] != null; i++) {
    if (encounteredNames[i] == name) {
      nameAlreadyEncountered = true;
      break;
    }
  }
  if (!nameAlreadyEncountered) {
    encounteredNames[encounteredNamesCount++] = name;
    int count = 0;
    for (int i = 0; i < names.length; i++){
      if (names[i].equals(name)) {
        count++;
      }
    }
    System.out.println(name + " - " + count);
  }
}
于 2013-04-17T15:48:45.717 に答える