2016-03-02 118 views
0

我有這個練習,儘管我嘗試實現IComparable接口,我無法按重量從最少到最多排序列表............... .................................................. ...........列表沒有被排序

using System; 
using System.Collections.Generic; 
namespace Program 
{ 
    abstract class Animal : IComparable<Animal> 
    { 
     private double weight; 
     private int name; 
     abstract public override string ToString(); 
     public int CompareTo(Animal right) 
     { 
      return weight.CompareTo(right.weight); 
     } 
    } 
    class Cat : Animal 
    { 
     public Cat(double weight, string name) 
     { 
      this.weight = weight; 
      this.name = name; 
     } 
     private double weight; 
     private string name; 
     public override string ToString() 
     { 
      return "I'm the cat " + name + " and I weight " + weight; 
     } 
    } 
    class Hello 
    { 
     static void Main(string[] args) 
     { 
      List<Animal> myArray = new List<Animal>(); 
      for (int counter = 9; counter > 0; counter--) 
      { 
       myArray.Add(new Cat(counter * 3.5, counter.ToString())); 
      } 
      foreach (Animal CatOrDog in myArray) 
      { 
       Console.WriteLine(CatOrDog.ToString()); 
      } 
      myArray.Sort(); 
      foreach (Animal CatOrDog in myArray) 
      { 
       Console.WriteLine(CatOrDog.ToString()); 
      } 
     } 
    } 
} 
+0

我認爲你可以嘗試使用'LINQ'' OrderBy'來代替排序來給出排序的一些條件 – Ian

+0

問題是這是一個關於List和IComparable接口的練習。 – user3646717

+1

我看...練習.. – Ian

回答

2

你有邏輯權限,它會正確排序。然而,你的類定義是錯誤的:

abstract class Animal : IComparable<Animal> 
{ 
    private double weight; 
    private int name; 
    abstract public override string ToString(); 
    public int CompareTo(Animal right) 
    { 
     return weight.CompareTo(right.weight); 
    } 
} 
  1. 兩個weightname保護,不是私人的,讓Animal任何子類可以閱讀它們。
  2. name應該是string

class Cat : Animal 
{ 
    public Cat(double weight, string name) 
    { 
     this.weight = weight; 
     this.name = name; 
    } 
    private double weight; 
    private string name; 
    public override string ToString() 
    { 
     return "I'm the cat " + name + " and I weight " + weight; 
    } 
} 

卸下字段weight和從Catname。目前,他們隱藏了字段,因此您將值指定爲Cat.weight,但在Animal.weight上排序。進行這些更改,並且您的代碼將完美工作。

+0

這是應該怎麼做! :) – Ian

+0

謝謝,這是我的書中的一個錯誤。它指示我在抽象類中使用私人成員進行練習。 – user3646717

+0

@ user3646717如果這是練習的要求,則可能:但是'Cat'構造函數必須調用'base'構造函數,而不是自己分配字段。例如,'Cat'只有'ToString()'和'公貓(雙重字符串名稱):base(weight,name){} – Rob