未能比较数组中的两个元素。rugs.Sort();//此句是错误的???
program : private void Form2_Load(object sender, EventArgs e)
{
Carpet c1 = new Carpet("Frieze" ,1 ,12);
Carpet c2 = new Carpet("Saxony" , 2 , 9);
ArrayList rugs = new ArrayList();
rugs.Add(c1);
rugs.Add(c2);
rugs.Sort();
Knapsack sack = new Knapsack(25);
sack.fillSack(rugs);
Console.Write(sack.getItems()); }
program : private void Form2_Load(object sender, EventArgs e)
{
Carpet c1 = new Carpet("Frieze" ,1 ,12);
Carpet c2 = new Carpet("Saxony" , 2 , 9);
ArrayList rugs = new ArrayList();
rugs.Add(c1);
rugs.Add(c2);
rugs.Sort();
Knapsack sack = new Knapsack(25);
sack.fillSack(rugs);
Console.Write(sack.getItems()); }
{
#region IComparer<men> Members public MenCompare()
{
}
public int Compare(object manA, object manB)
{
Carpet man1 = (Carpet)manA;
Carpet man2 = (Carpet)manB;
return man1.id.CompareTo(man2.id);
} #endregion
} public class Carpet
{
public int id;
}
Carpet c1 = new Carpet();
Carpet c2 = new Carpet();
c1.id = 2;
c2.id = 1;
ArrayList rugs = new ArrayList();
rugs.Add(c1);
rugs.Add(c2); rugs.Sort(new MenCompare());
namespace DelegateKnowledge
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void Form2_Load(object sender, EventArgs e)
{
Carpet c1 = new Carpet("Frieze" ,1 ,12);
Carpet c2 = new Carpet("Saxony" , 2 , 9);
ArrayList rugs = new ArrayList();
rugs.Add(c1);
rugs.Add(c2);
rugs.Sort();
Knapsack sack = new Knapsack(25);
sack.fillSack(rugs);
Console.Write(sack.getItems()); }
} /// <summary>
/// 地毯 carpet
///Thief 小偷
///背包 knapsack
/// </summary>
public class Carpet
{
private string item; //number
private float val; // nums private int unit; // inits stock
public Carpet(string i, float v, int u)
{
item = i;
val = v;
unit = u; } public int compareTo(Carpet c)
{
return (this.val.CompareTo(c.val));
}
// set unit
public int getUnit()
{
return unit;
}
// set item members
public string getItem()
{
return item;
}
// set number nums to stocks
public float itemVal()
{
return val; }
//set units nums to sotcks
public float getVal()
{
return val * unit;
}
} public class Knapsack
{
private float quantity;
SortedList items = new SortedList();
string itemlist; public Knapsack(float max)
{
// float max;
quantity = max; }
public void fillSack(ArrayList obj)
{
int pos = obj.Count - 1; //current position
int totalUnits = 0; // total units nums
int totalVal = 0; // nums
int tempTot = 0; // temp total units while (totalUnits < quantity)
{
tempTot += ((Carpet)obj[pos]).getUnit();//save unit nums to temp table
if (tempTot < quantity)
{
//not items
totalUnits += Convert.ToInt32(((Carpet)obj[pos]).getVal());//get total units to stocks
items.Add(((Carpet)obj[pos]).getItem(), ((Carpet)obj[pos]).getUnit());// items ,units
}
else
{
//have items
float tempUnit = quantity - totalUnits;
float tempVal = ((Carpet)obj[pos]).itemVal() * tempUnit;
totalVal += Convert.ToInt32(tempVal);
totalUnits += (int)tempUnit;
items.Add(( (Carpet)obj[pos]).getItem() , tempUnit); }
pos--;// counts change into smaller } } //circle array inorder to get items units in items types
public string getItems()
{
foreach (object k in items.GetKeyList())
{
itemlist += k.ToString() + " :" + items[k].ToString() + "";
}
return itemlist; }
}
}
{ public MenCompare()
{
}
public int Compare(object manA, object manB)
{
Carpet man1 = (Carpet)manA;
Carpet man2 = (Carpet)manB;
return man1.itemVal().CompareTo(man2.itemVal());
} #endregion
} private void Form2_Load(object sender, EventArgs e)
{
Carpet c1 = new Carpet("Frieze" ,1 ,12);
Carpet c2 = new Carpet("Saxony" , 2 , 9);
ArrayList rugs = new ArrayList();
rugs.Add(c1);
rugs.Add(c2);
rugs.Sort(new MenCompare());
Knapsack sack = new Knapsack(25);
sack.fillSack(rugs);
Console.Write(sack.getItems()); }