gpt4 book ai didi

java - 如何正确地按降序对对象数组进行排序并在 Java 中搜索它们?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:28 25 4
gpt4 key购买 nike

我是本地大学的二年级学生,目前正在上计算机编程课。我在我的编程课上做得很好,虽然通常我会遇到问题。我们的教授给了我们一些不完整的算法,他希望我们完成这些算法作为另一项诊断测试。他事先告诉我们,我们必须不使用快捷方式,这意味着我不能使用比较器,我只能使用基本的排序算法,如冒泡、插入、选择和归并排序,我只能使用二进制或线性搜索。

我收到了一份不完整的文件,旨在对学生及其分数进行排序。我一直想出的一个特殊问题是我需要创建的排序算法和搜索算法。我们的讲师给了我们一些测试 Material ,看看我们的算法是否有效。令人惊讶的是,我的没有。我已经尝试了所有类型的排序算法,但由于某种原因测试表明该算法失败。我该如何解决这个困境。

操作系统:Windows 7,Java 工作台:Eclipse

这是算法的代码。如果看起来很乱,我深表歉意。这是目前的排序算法。假定的设计(由我的教授设计)是数组将按降序排序。

    public static void sort(Student[] students) {
if(students == null)
return;
for(int i=0;i<students.length-2;i++){
Student temp = students[i];
for(int k=i+1;k<students.length-1;k++){
Student temp2= students[k];
int result = temp2.compareTo(temp);
if(result > 0){
students[k] = temp;
students[i] = temp2;
}
}
}


}

这是搜索算法的代码。同样,假设的设计是它能够使用字符串“name”搜索学生的名字和姓氏。该算法的制作方式将忽略名称的格式,例如“lastname firstname”和“firstname lastname”,并且会忽略大写字母。再次为困惑的工作道歉。

    public static int search(Student[] students, String name) {
if(students == null || students.length == 0)
return -1;
for(int i=0;i<students.length;i++){
name.toLowerCase();
if(name.compareTo(students[i].getGivenName().toLowerCase()+" "+students[i].getFamilyName().toLowerCase()) == 0 || name.compareTo(students[i].getFamilyName().toLowerCase()+" "+students[i].getGivenName().toLowerCase()) == 0)
return 1;
}
return -1;
}

所以,总而言之,如果你跳到最后,我的问题是:我的排序算法做错了什么,有没有更好、更简单的方法来缩短搜索算法,同时仍然正常工作

编辑:这里分别是排序和搜索算法的测试算法。测试排序算法可以按照我做的排序算法,但是不知为什么没有通过教授制定的 boolean 条件。

    public void testSort() throws OutOfRangeException, FileNotFoundException {
Student[] students = new Student[6];
students[0] = new Student("joey", "mitchel", new int[]{42,51,64,70,81});
students[1] = new Student("Sandy", "luchel", new int[]{64,51,64,70,81});
students[2] = new Student("Sandy", "luchel", new int[]{42,51,64,70,81});
students[3] = new Student("amanda", "jones", new int[]{95,51,64,70,81});
students[4] = new Student("Susane", "Louis", new int[]{42,51,64,70,81});
students[5] = new Student("Samuel", "jones", new int[]{95,51,64,70,81});


StudentSearcherSorter.sort(students);
for(int i=0; i<students.length - 1; i++) {
boolean b1 = students[i].total() > students[i+1].total();
boolean b2 = false;
boolean b3 = false;
if(b1 == false && students[i].total() == students[i+1].total())
b2 = students[i].getFamilyName().compareTo(students[i+1].getFamilyName()) < 0;
if(b2 == false && students[i].total() == students[i+1].total() && students[i].getFamilyName().compareTo(students[i+1].getFamilyName()) == 0)
b3 = students[i].getGivenName().compareTo(students[i+1].getGivenName()) < 0;
assertTrue(b1 || b2 || b3);
}
}

和搜索测试算法。我不确定哪里出了问题,但一般来说,这可能与我处理搜索算法代码的方式有关。

    public void testSearch() throws FileNotFoundException, OutOfRangeException {
Student[] students = new Student[6];
students[0] = new Student("joey", "mitchel", new int[]{42,51,64,70,81});
students[1] = new Student("Sandy", "luchel", new int[]{64,51,64,70,81});
students[2] = new Student("Sandy", "luchel", new int[]{42,51,64,70,81});
students[3] = new Student("amanda", "jones", new int[]{95,51,64,70,81});
students[4] = new Student("Susane", "Louis", new int[]{42,51,64,70,81});
students[5] = new Student("Samuel", "jones", new int[]{95,51,64,70,81});


for(int i=0; i<students.length; i++) {
assertTrue(StudentSearcherSorter.search(students, students[i].getGivenName().toUpperCase()+" "+students[i].getFamilyName()) >= 0);
assertTrue(StudentSearcherSorter.search(students, students[i].getFamilyName()+" "+students[i].getGivenName().toUpperCase()) >= 0);
}
}

最佳答案

关于排序,在原始版本中,代码不比较students中的最后两个元素。数组。

public static void sort(Student[] students) {
if(students == null)
return;

循环的上限应该是students.length - 1 , 所以最后一个值的 i将是 students.length - 2 .

    // for(int i=0;i<students.length-2;i++){
for(int i=0;i<students.length-1;i++){
Student temp = students[i];

同样,这个循环的上限应该是students.length , 所以最后一个值的 k将是 stidents.length - 1 .或者,在这两种情况下,您都可以替换 <<= .

        // for(int k=i+1;k<students.length-1;k++){
for(int k=i+1;k<students.length;k++){
Student temp2= students[k];
int result = temp2.compareTo(temp);
if(result > 0){
students[k] = temp;
students[i] = temp2;
}
}
}
}

关于java - 如何正确地按降序对对象数组进行排序并在 Java 中搜索它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com