未能比较数组中的两个元素。

feifeiyaqi3 2008-08-07 04:03:22
未能比较数组中的两个元素。

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());



}
...全文
1954 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQknife 2008-08-07
  • 打赏
  • 举报
回复
类型不一样?、
ericzhangbo1982111 2008-08-07
  • 打赏
  • 举报
回复
class MenCompare : IComparer
{

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());



}
feifeiyaqi3 2008-08-07
  • 打赏
  • 举报
回复
我的全部代码为
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;

}
}

}
W422080367 2008-08-07
  • 打赏
  • 举报
回复
楼上正解, 如果相对对象进行排序 必须在类中实现IComparer 接口 的Compare方法
ericzhangbo1982111 2008-08-07
  • 打赏
  • 举报
回复
class MenCompare : IComparer
{
#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());
zzyhuian06142 2008-08-07
  • 打赏
  • 举报
回复
是不能对对象进行排序

111,095

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧