2016-07-08 5 views
-3

私はこのコードを持っていますが、最終的な目的は複数の配列をソートすることです。 私のカラーコンパレータで ".color"にアクセスしようとすると問題が発生します。 愚かな質問を申し訳ありませんが、私はアンドロイドで新しいです。コンストラクタに関する問題

私のコンストラクタ:

import java.util.*; 
    public class ColorClothes { 

     public ColorClothes() // <------ method 
     { 

     } 

     public Clothes[] Initialize(Clothes[] item) { 
      Clothes firstry[] = new Clothes[4]; 


      System.out.println("Unsorted"); 

      for (int i = 0; i < item.length; i++) { 
       System.out.println(item[i].record + "  " + item[i].color + "  " + item[i].clothes); 
      } 

      System.out.println("\nSorted By Color\n"); 

      Arrays.sort(item, new ColorComparator()); 

      for (int i = 0; i < item.length; i++) { 
       System.out.println(item[i].record + "  " + item[i].color + "  " + item[i].clothes); 
      } 





      return item; 

     } 


     public class Clothes { 
      public int record; 
      public String color; 
      public String clothes; 
     } 
    } 

マイColorComparator:

import java.util.Comparator; 

class ColorComparator implements Comparator 
{ 
    public int compare(Object str1, Object str2) 
    { 
     String str1Color = ((ColorClothes)str1).color; 
     String str2Color = ((ColorClothes)str2).color; 

     return str1Color.compareTo(str2Color); 

    } 
} 

が、これは私のColorComparatorに起こる "色" を解決できません。私は何を間違っているのですか?

+0

'ColorClothes'はフィールド 'color'を持たず、' Clothes'クラスです。 –

+2

'ColorClothes'のインスタンスには色がありません。代わりに 'Clothes 'のインスタンスを受け入れる必要があるように思えます。 Javaを初めて使う人は、混乱してしまうので、ネストされた型の使用を避けることを強くお勧めします。ジェネリックについて学び、 'Comparator 'を実装してパブリックフィールドを避けることもお勧めします。 –

+0

私のエラーを理解するのに役立つ問題を解決しました:) –

答えて

0

あなたの色の属性は、クラスClothesであるが、あなたはColorClothesにキャスティングされているが((ColorClothes)str1).color

試してみてください。

((Clothes)str1).color 

PS:クラスのpublic属性が本当にない

0

布をプログラミングオブジェクト指向解決されていません。 これを試してみてください:

String str1Color = ((ColorClothes.Clothes)str1).color; 

String str2Color = ((ColorClothes.Clothes)str2).color; 
+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – abarisone