我必须比较不同学生的数组,所以它的输出是:
约翰·布洛格斯(工程学士)年级:6
约翰·史密斯(工程学学士)年级:6
约翰·布洛格斯(工程学学士)年级:7
约翰·史密斯(工程学学士)年级:7
布洛格斯,约翰(IT学士)年级:6
史密斯,约翰(IT学士)年级:6
John Bloggs (IT学士)年级:7
史密斯,约翰(IT学士)年级:7
简·布洛格斯(工程学士)年级:6
简·史密斯(工程学学士)年级:6
简·布洛格斯(工程学学士)年级:7
简·史密斯(工程学学士)年级:7
简布洛格斯(IT学士)年级:6
Smith,Jane (IT学士)年级:6
简·布洛格斯(IT学士)年级:7
Smith,Jane (IT学士)年级:7
我的输出与此类似,但我需要它自下而上地进行比较。
我不能使用array.Reverse方法,因为我的代码的主方法将不会被调用。我需要我的compareTo方法对其进行排序,以便获得以下结果:
名字按降序排列,后面是...以升序排列的度数,然后...按升序排列,然后是...姓氏按升序排列。
main方法运行array.Sort
我曾多次尝试重新排列我的compareTo()方法,但它没有按正确的顺序排列这些值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StudentGradeOrder
{
class Student : IComparable
{
private string firstName;
private string lastName;
private string degree;
private int grade;
/*Implementation of Parameterized constructor */
public Student(string firstName, string lastName, string degree, int grade)
{
this.firstName = firstName;
this.lastName = lastName;
this.degree = degree;
this.grade = grade;
}
/*Implementation of ToString method */
public override string ToString()
{
return String.Format("{0} , {1}, {2} Grade {3}", lastName, firstName, degree, grade);
}
/*Implementation of CompareTo method */
public int CompareTo(object obj)
{
Student studentObject = (Student)obj;
var firstnameofStudent = studentObject.firstName.CompareTo(firstName);
if (firstnameofStudent == 0)
{
var degreeValue = studentObject.degree.CompareTo(degree);
if (degreeValue == 0)
{
var gradeValue = studentObject.grade.CompareTo(grade);
if (gradeValue == 0)
{
var lastnameofStudent = studentObject.lastName.CompareTo(lastName);
if (lastnameofStudent == 0)
return lastnameofStudent;
}
return gradeValue;
}
return degreeValue;
}
return firstnameofStudent;
}
发布于 2019-04-14 15:02:15
我在这里可以看到两个错误: 1.返回firstnameofStudent时,应该乘以-1得到降序结果2.返回前无需将lastnameofStudent与0进行比较,无需进一步的字段比较
发布于 2019-04-14 16:11:39
如果只想颠倒顺序,可以包装CompareTo
方法并返回颠倒的结果。
新方法将新方法重命名为其他名称,如InternalCompareTo
CompareTo
返回相反的结果:public int result (Object obj) { var CompareTo= InternalCompareTo(obj) if(result > 0)返回-1;else if(result < 0)返回1;return 0;}
https://stackoverflow.com/questions/55672471
复制相似问题