1
public static void main(String[] args) throws FileNotFoundException {
    double agentID;
    String type;
    double price;
    Set<String> types = new TreeSet<String>();
    Map<Double, Double> agents = new TreeMap<Double, Double>();
    Scanner console = new Scanner(System.in);     
    String propertyID;
    double totalPrice = 0;

    System.out.print ("Please enter file name: ");
    String inputFileName = console.next();
    File inputFile = new File(inputFileName);
    Scanner in = new Scanner(inputFile);
    while (in.hasNextLine()) {
        propertyID = in.next();
        type = in.next(); 
        price = in.nextDouble();
        agentID = in.nextDouble();
        type = type.toUpperCase();   
        types.add(type);
        if (agents.containsValue(agentID)) {
            agents.put(agentID, agents.get(agentID)+price);
        }
        else {
            totalPrice = price;
            agents.put(agentID, totalPrice);
        }
    }
    in.close();
    System.out.println(types);
    System.out.println(agents);
}

値が既にマップに含まれているtotalPrice場合、マップ値を更新しようとしています。プログラムを実行すると、キーに割り当てられた初期値が出力されますが、. こちらの質問と API ドキュメントを確認しましたが、進展がありません。どんな助けでも大歓迎です。agentIDagentsagentIDtotalPrice + price

4

3 に答える 3

3

agentIdを価格にマッピングしようとしているようです。だから私はあなたが使う必要があるのは

if (agents.containsKey(agentID)) { ... }

詳細については、公式のcontainsKeyjavadocを参照してください。

問題がどこにあるのかを簡単に特定できるように、質問のコードを単純化してください(ファイルの読み取りやその他の不要な情報を削除してください)。

于 2012-05-17T18:28:41.533 に答える
3

代わりに、エージェントがマップで利用可能かどうかを確認する必要がある値を確認しています

変化する

if (agents.containsValue(agentID))

if (agents.containsKey(agentID))

agentIDここでキーとして使用しているため

agents.put(agentID, agents.get(agentID)+price);
于 2012-05-17T18:29:56.617 に答える
1

TreeMap では、 agentID をkey として、 totalPirceを valueとして使用しているため、コードでは次のようになります。

エージェント.containsKey(エージェントID)

いいえ

エージェント.containsValue(エージェントID)

よろしくイスル

于 2012-05-17T19:19:38.260 に答える