3

特定の宛先番号に対して行われた呼び出しに関する情報を含むオブジェクトの配列リストがあります。私は、このリストを検索して、出現回数が最も多い数と、これらの出現回数(リンクされたクラスの別のメソッドから呼び出される)を返すための最良の方法を見つけようとしています。

例えば:

名簿の乱数を呼び出すことでリストに呼び出しを追加するこのメソッドがあります

public void makeCall(Phonecall call)
    {
     call = new Phonecall();
     call.setDestination(anyNumber());
     call.setDuration(0 + (int)(Math.random() * (((balance/25) * 60) - 0) + 1));
     double cost = (call.getDuration()/60 * 25);
     balance = getBalance() - cost;
     updateCallHistory(call);
    }

次に、更新しているarraylist callHistoryを検索して、最も多く呼び出された宛先を見つけ、その数とカウントを返すことができる必要があります。

次に、人が持っている「電話」ごとにこれらの値を呼び出し、すべての「電話」の中で最も多い数の宛先とその数を印刷します。

私は周りを見回して、特定のオブジェクトの出現を見つけるための情報を見つけましたが、オブジェクト自体ではなく、そのオブジェクト内の特定のフィールドをチェックする方法を理解できませんでした。

これが複雑に聞こえる場合は申し訳ありませんが、私はかなり混乱してアイデアが不足しています。ハッシュマッピングはまだそれほど強力ではなく、見つけた例を微調整して自分のやりたいことを実行できませんでした。

以下のコメントに基づいて私は

public void mostCalled(String[] args) 
    {
        Map<Phonecall,Integer> map = new HashMap<Phonecall, Integer>();  
        for(int i=0;i<callHistory.size();i++){              
            Integer count = map.get(callHistory.get(i));         
            map.put(callHistory.get(i), count==null?1:count+1);  
        }  
        System.out.println(map);
    }

しかし、オブジェクト自体の代わりにPhonecallの宛先フィールドを使用する方法がわかりません。

このようなものがより適切でしょうか:

public void mostCalled(String[] args) 
    {
        Map<String,Integer> map = new HashMap<String, Integer>();  
        for(Phonecall call : callHistory)
        {
            Integer count = map.get(call.destination);         
            map.put(call.destination, count==null?1:count+1);  
        }  
        System.out.println(map);
    }
4

2 に答える 2

2

Map<String, Integer> phoneCount1つの解決策は、電話番号をキーとして保持し、この番号に対して行われた呼び出しの数を値として保持するaを宣言することです。

次に、オブジェクトのをループしArrayListPhoneCallマップを作成します。最も価値のあるレコードはあなたが探しているものです。

于 2013-01-19T19:14:33.463 に答える
0

これをやりたいと思っている他の人にとって、これは私が最終的に得たものです。

public void mostCalled() 
    {
        Map<String,Integer> map = new HashMap<String, Integer>();  
        for(Phonecall call : callHistory)
        {
            Integer count = map.get(call.destination);         
            map.put(call.destination, count==null?1:count+1);  
        }  
        List<String> maxKeyList=new ArrayList<String>();
        Integer maxValue = Integer.MIN_VALUE; 
        for(Map.Entry<String,Integer> entry : map.entrySet()) 
        {
             if(entry.getValue() > maxValue) 
             {
                 maxValue = entry.getValue();
                 maxKeyList.add(entry.getKey());
             }
        }
        System.out.println("Phone numbers called the most : "+maxKeyList);
    }
于 2013-01-20T12:55:43.807 に答える