0

私はしばらくスタックしています。デバッグを試みましたが、解決策がわかりませんでした。数字の出現を数えようとしています。だから私の問題は、出力を印刷すると

3 occurs 1 times
1 occurs 1 times
0 occurs 1 times
2 occurs 1 times
1 occurs 2 times
3 occurs 2 times
2 occurs 2 times
0 occurs 2 times
10 occurs 1 times
4 occurs 1 times

それ以外の

1 occurs 2 times
0 occurs 2 times
2 occurs 2 times
3 occurs 2 time
10 occurs 1 times
4 occurs 1 times 

したがって、数字に複数の出現がある場合は、出現する回数だけではなく、1回だけ言う必要があります。乾杯コードはこちら

import java.util.*;

public class CountingOccuranceOfNumbers
{

    public static void main(String[] args) 
    {
        countNumbers();
    }

    public static void countNumbers()
    {
        Scanner input = new Scanner(System.in);
        Random generator = new Random();
        int[] list = new int[11];
        int[] counts = new int[150];
        int counter = 0;
        int number = 1;


        while(counter <= 10)
        {
                number = generator.nextInt(11);
                list[counter] = number;
                counter++;
        }   
        for(int i=0; i<list.length - 1; i++)
        {
            counts[list[i]]++;
//          System.out.print(list[i] + " ");

            System.out.println(list[i] +" occurs " +  counts[list[i]] + " times");
        }

    }

}
4

6 に答える 6

3

を使用しHashMap<Integer>,<integer> htてカウントを管理する

if (ht.get(newNumber) == null) {
     ht.put(newNumber, 1); 
} else {
     ht.put(newNumber, ++ht.get(newNumber));
}

以前に訂正HashTable_HashMap++get(..)

于 2012-07-23T08:19:00.337 に答える
3

もう 1 つのオプションは、guava の Multiset クラスです。これは、カウントを追跡します。

int values[] = ...;
Multiset<Integer> ms = HashMultiset.create();
ms.addAll(Ints.asList(list));

int count0 = ms.count(Integer.valueOf(0));
int count1 = ms.count(Integer.valueOf(1));

ここで、Multiset、HashMultiset、および Ints はすべてグアバ クラスです。

Multiset は、マップとカウンターを使用してカウンターを追跡することで、誰かが上で述べたことのほとんどを行うことに注意してください。コードを単純にするために、抽象化されているだけです。

于 2012-07-23T13:22:42.673 に答える
2

発生をカウントするためのループが 1 つあります。これにより、実行中の合計も得られます。あなたが望んでいたのは、カウントが終了したときにのみ合計を印刷することです。つまり、別のループにある必要があります。

于 2012-07-23T08:21:02.087 に答える
1

わかりました、1 つまたは 2 つのヒントを提供します。

  1. 複数回出現する数字ごとに複数の行が出力されるため、カウントが完了するまでは何も出力しないでください。
  2. 出力は出現回数の後にソートする必要があるようです。この場合、カウントを配列に保存することはおそらく最善の方法ではありません。代わりにa を使用することを検討してくださいMap<Integer, Integer>。キーは数値、値は出現回数です。
于 2012-07-23T08:20:49.273 に答える
0

HashMap を作成し、値が整数であるキー、値を持つマップに新しいエントリを配置します。

同じ文字に遭遇した場合は、そのキーに関連付けられた整数値を増やします。これは新しいキーであり、値を 1 に設定します。

Integer entryValue;
Map map = new HashMap();


    for ( int i =0; i < s1.length(); i++)
    {
        entryValue = (Integer)map.get(s1.charAt(i));

        if (entryValue == null)
        {
            map.put(s1.charAt(i), new Integer(1));
        }

        else
        {
                map.put(s1.charAt(i), new Integer(entryValue.intValue()+1));
        }
    }
于 2014-01-31T12:49:46.847 に答える
0
    import java.io.BufferedReader;
    import java.io.InputStreamReader;


    public class NumberRepetition {



    public static void main(String[] args) throws Exception {
        int size;
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("enter size of array");
    size=Integer.parseInt(br.readLine());
    int el;
    int[] a=new int[size];
    for(int i=0;i<size;i++)
    {
        System.out.println("enter a number");
        el=Integer.parseInt(br.readLine());
        a[i]=el;
    }
    for(int i=0;i<size;i++)
    {
        for(int j=0;j<size-1;j++)
        {
            if(a[j]>a[j+1])
            {
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;

            }
        }
    }
    int count=0;
    for(int i=0;i<size;i++)
    {
        for(int j=0;j<size;j++)
        {
            if(a[i]==a[j])
            {
                count++;

            }



        }
        System.out.println(a[i]+" \t " +"occurence time is"+"\t"+count);
        if(count!=0)
        {
            i=i+count-1;
        }
        count=0;
    }

}

}
于 2013-12-03T13:21:03.080 に答える