0

問題1:次の「ClassDog」の「特定の」ソートされた値を、クラス「Ser」で使用される「マップ」に追加したい。しかし、私はこれを達成する方法がわかりません、

問題2:マップが正常に入力された場合に、マップの入力された値にアクセスする方法

以下は私の必死の試みです。

 class Dog implements Comparator<Dog>, Comparable<Dog>{

   private double Price;
 private String Operator;
  Dog(){
   }

  Dog( double p, String o){

   Price= p;
   Operator=o;
  }

  public double getPrice(){
  return Price;
  }
    public String getOperator(){
      return Operator;
   }


  // Overriding the compareTo method
  public int compareTo(Dog d){

   double data= Price - d.Price; 
   if ( data > 0.00001)return 1;
   if (data < 0.00001) return -1;
   return 0;
 }


   // Overriding the compare method to sort the age 
  public int compare(Dog d, Dog d1){

  double data= d.Price - d1.Price; 

   if ( data > 0.00001)return 1;
   if (data < 0.00001) return -1;
   return 0;

      }

}

 public class Ser {                          
   /**                                     
    * @param args
   */
   public static void main(String[] args) {
// Takes a list o Dog objects
ArrayList <Dog> list1 = new ArrayList<Dog>();

Map <Integer, ArrayList<Dog> > map= new HashMap <Integer, ArrayList<Dog> > ();

  list1.add(new Dog(0.99 , "A"));
  list1.add(new Dog(0.91 , "C"));
  list1.add(new Dog(0.92 , "A"));
  list1.add(new Dog(0.97 , "B"));
  list1.add(new Dog( 0.93 , "C"));
  list1.add(new Dog(0.97 , "B"));
  list1.add(new Dog(0.92, "A"));
  list1.add(new Dog(0.97, "C"));
  list1.add(new Dog(0.92, "A"));
  // Sorts the array list using comparator

  Collections.sort(list1, new Dog());

  for(Dog a: list1)//printing the sorted list of ages
      System.out.println( a.getOperator()+"  : "+ a.getPrice());

  map.put(92,  list1);
  map.put(445, list1);
  map.put(966, list1);

 // Collections.sort(list1, new Dog());

 for (ArrayList<Dog> key: map.values() )     
         System.out.println(key);
         }

   }

OutPut:C:0.91、A:0.92、A:0.92、A:0.92、C:0.93、C:0.97、B:0.97、B:0.97、A:0.99

マップ値の出力:[Dog @ a981ca、Dog @ 8814e9、Dog @ 1503a3、Dog @ 1a1c887、Dog @ 743399、Dog @ e7b241、Dog @ 167d940、Dog @ e83912、Dog @ 1fae3c6] [Dog @ a981ca、Dog @ 8814e9 、Dog @ 1503a3、Dog @ 1a1c887、Dog @ 743399、Dog @ e7b241、Dog @ 167d940、Dog @ e83912、Dog @ 1fae3c6] [Dog @ a981ca、Dog @ 8814e9、Dog @ 1503a3、Dog @ 1a1c887、Dog @ 743399、 Dog @ e7b241、Dog @ 167d940、Dog @ e83912、Dog @ 1fae3c6]

4

2 に答える 2

2

Object.toString表現が表示Dogされているので、そのメソッドをオーバーライドする必要があります。

@Override
public String toString() {
    return "Dog [Price=" + Price + ", Operator=" + Operator + "]";
}
于 2013-01-24T19:48:18.337 に答える
1

問題 1:

Map整数キーを作成し、それを犬のリストにマップするオブジェクトを作成しました。Integers を Dogs にマップしたい場合は、これから始める必要があります:

Map <Integer, Dog> map= new HashMap <Integer, Dog> ();

さて、あなたのソートが機能していると仮定して(私はそれを調べていません。それが機能しているかどうかを証明するためにデバッグさせます).get(int)、コレクションのメソッドを使用して、配置したいリストからList犬をフェッチする必要がありますマップに。

あなたが今していることは、異なる整数を同じリストに 3 回マッピングすることです。

map.put(92, list1.get(0));

0 はリスト内の最初の Dog オブジェクトを参照し、list10 の代わりに必要なものを選択します。

さて、それらを印刷する必要がある問題2toString()では、 Reimeusが言ったように関数をロールするか、手動で実行する必要があります.

for (Dog d : map.values()) {
  System.out.println("Dog " + d.getPrice() + " " + d.getOperator());
}

繰り返しますが、以前に行っていたListのは、マップ内の整数にマップしたオブジェクトをフェッチすることでした。その形式を維持する場合は、リスト内の各値を反復処理する必要があります。

for (List<Dog> ld : map.values()) {
  for (Dog d : ld) {
    System.out.println(...);
  }
}

これがお役に立てば幸いです。

于 2013-01-24T19:57:01.020 に答える