现在我有我的数组排序(这比得到错误更好),除了它反向排序,而不是我想要它排序。
public static void sortDatabase(int numRecords, String[] sDeptArr,
int[] iCourseNumArr, int[] iEnrollmentArr)
{
System.out.println("\nSort the database. \n");
String sTemp = null;
int iTemp = 0;
int eTemp = 0;
String a, b = null;
for(int i=0; i<numRecords; i++)
{
int iPosMin = i+1;
for(int j=iPosMin; j<numRecords; j++)
{
a = sDeptArr[i];
b = sDeptArr[iPosMin];
if(a.compareTo(b) > 0)
{
sTemp= sDeptArr[j];
sDeptArr[j] = sDeptArr[iPosMin];
sDeptArr[iPosMin] = sTemp;
iTemp = iCourseNumArr[j];
iCourseNumArr[j] = iCourseNumArr[iPosMin];
iCourseNumArr[iPosMin] = iTemp;
eTemp = iEnrollmentArr[j];
iEnrollmentArr[j] = iEnrollmentArr[iPosMin];
iEnrollmentArr[iPosMin] = eTemp;
}
else if(sDeptArr[j].equals(sDeptArr[iPosMin]) && !(iCourseNumArr[j] < iCourseNumArr[iPosMin]))
{
sTemp= sDeptArr[i];
sDeptArr[i] = sDeptArr[iPosMin];
sDeptArr[iPosMin] = sTemp;
iTemp = iCourseNumArr[i];
iCourseNumArr[i] = iCourseNumArr[iPosMin];
iCourseNumArr[iPosMin] = iTemp;
eTemp = iEnrollmentArr[i];
iEnrollmentArr[i] = iEnrollmentArr[iPosMin];
iEnrollmentArr[iPosMin] = eTemp;
}
else continue;
}
}
}
同样,没有数组列表或array.sorts。我只需要反转这是如何排序,但我不知道如何。
答案 0 :(得分:3)
只需a.compareTo(b) < 0
代替> 0
编辑:我已经找到了问题所在。但由于这是作业(感谢老实说),我不会发布我的解决方案,但这里有一些提示:
您正在进行选择排序。算法并不像你做的那么复杂。如果要检查的两个元素的顺序错误,则只需要交换。我看到你有3个分支,没有必要。
了解分配a
和b
的时间。通过内部循环,j
正在发生变化,a
和b
永远不会改变,因为i
和iPosMin
保持不变。我希望有所帮助。
将算法分解为您知道通过提取方法工作的谨慎部分总是好的。您重复相同的交换代码两次,但索引的参数不同。拿出来然后做一个:
-
// swaps the object at position i with position j in all arrays
private static void swap(String[] sDeptArr, int[] iCourseNumArr, int[] iEnrollmentArr, int i, int j)
然后你会看到你的代码变得更清晰。
答案 1 :(得分:2)
首先我要说你需要构建一个数据结构来封装程序中的信息。所以我们称之为课程。
public class Course {
public String department;
public Integer courseNumber;
public Integer enrollment;
}
为什么不使用Java的内置排序功能?
List<Course> someArray = new ArrayList<Course>();
...
Collections.sort( someArray, new Comparator<Course>() {
public int compare( Course c1, Course c2 ) {
int r = c1.compareTo( c2 );
if( r == 0 ) { /* the strings are the same sort by something else */
/* using Integer instead of int allows us
* to compare the two numbers as objects since Integer implement Comparable
*/
r = c1.courseNumber.compareTo( c2.courseNumber );
}
return r;
}
});
希望能在你的作业中获得A。哦,然后放弃静静的Jr.也许有一天,你的教授可以解释为什么静力学很差。
答案 2 :(得分:1)
嗯......我想知道你怎么会改变读if(a.compareTo(b) > 0)
的行?