Java-Selection 按 int 键对对象数组进行排序并显示在表中

标签 java arrays sorting

我目前正在为学校做一个项目,并且真的很挣扎。我应该对一组 Student 对象进行选择排序,然后按选择排序顺序显示它们。

Create an array with the size of 10 and assign student details (Name, BroncoId, age and TotalMarks) to the array. Perform the selection sort to sort the students in descending order based on their total marks.

a. Steps:

i. Create the student list (use Random class in java to generate the age (15-25) and total (0-100))

ii. Print the Student List in a table format

iii. Perform selection sort based on the total marks of the students

我目前陷入的困境是进行选择排序。我了解如何创建选择排序,但我似乎无法将其翻译用于此实现。

我的选择排序代码:

public static Student[] selectionSort(Student[] studentList)
{

    for(int i = 0; i <studentList.length-1; i++)
    {
        int minIndex = studentList[i].getGrades();
        int pos = i;

        for(int j = i + 1; j < studentList.length-2; j++)
        {

            if(studentList[j].getGrades() > studentList[minIndex].getGrades())
            {

                minIndex = studentList[j].getGrades();
                pos = j;

            }

        }

        int temp = studentList[pos].getGrades();
        studentList[pos] = studentList[i];
        int k = studentList[i].getGrades();
        k = temp;

    }
    return studentList;
}

当我运行此代码时,控制台返回:

我寻求辅导希望能解决这个问题,但我的导师给了我一些无用的建议。 session 结束时我们都被难住了。

我的打印代码:

public static void printStudentInfo(Student[] students)
{


    System.out.println("Name:                                              AGE:  idNumber:  Score:");

    for(Student student: students)
    {
        if(student.getName().length() <= 49)
            System.out.printf("%-50s %-5d %-10s %-4d\n", student.getName(), student.getAge(), student.getID(), student.getGrades() );

        else
        {

            System.out.printf("%-50s %-5d %-10s %-4d\n", student.getName().substring(0,48), student.getAge(), student.getID(), student.getGrades() );

            System.out.println();
            int i = 0;

            while(i <= student.getName().length())
            {

                System.out.printf("%-50s", student.getName().substring(49 +48*i, 97+48*i) );
                System.out.println();
                i++;

            }



        }

    }

}

更多的是出于热情,我试图制作一种有趣的打印方法。我的问题是,我也不知道如何解析和格式化 155 个字符的字符串。我要在 while lop 中放入什么来完成此操作?

我希望程序输出一个对象名称行,例如:

49 characters
49 chars

What ever is left

它可能永远不会超过三行,但是嘿,谁说我不能给出这样的例子?我应该在 while 循环的 header 中放入什么来完成此操作?

PS: 如果您需要的话,这是 Student 类。

public class Student
{

private String name;
private int age;
private String idNumber;
private int gradePoints;

public Student(String name, int age, String idNumber, int gradePoints)
{

    this.name = name;
    this.age = age;
    this.idNumber = idNumber;
    this.gradePoints = gradePoints;

}

public void setName(String name)
{

    this.name = name;

}
public void setAge(int age)
{

    this.age = age;

}
public void setidNumber(String idNumber)
{

    this.idNumber = idNumber;

}
public void setPoints(int gradePoints)
{

    this.gradePoints = gradePoints;

}

public String getName()
{

    return name;

}

public int getAge()
{

    return age;

}

public String getID()
{

    return idNumber;

}

public int getGrades()
{

    return gradePoints;

}

最佳答案

欢迎来到马修。

我认为为您提供一个自己解决问题的过程可能会更有用,而不是给您一个解决方案。

软件开发的良好实践是将您的问题分解为非常小的组件,确保每个组件都能完美工作(通过单元测试),然后从这些组件构建您的解决方案。

根据这种做法,我建议您执行以下操作:

  • 列出在纸上进行选择排序所需的每个步骤。
  • 选择最简单的一个(例如交换两个元素)。
  • 编写一个单元测试,如果您的交换方法有效,该测试就会通过
  • 运行单元测试并验证它是否失败
  • 编写最简单的代码来使测试通过
  • 编写一个新测试来涵盖尚不支持的更复杂的场景
  • 继续下去,直到您相信该方法完美有效
  • 转到下一个方法
  • 一旦所有组件都完美工作,请编写使用相同流程调用所有组件的方法(即先测试,然后编码)

如果您遵循此流程,那么您最终将得到一个您完全理解、有效、可维护并且可以重构的系统。它还有另一个非常显着的好处:这意味着当您带着问题来到 SO 时,您将询问您不知道如何解决的特定项目,而不是“为什么我的代码不起作用”的问题。具体问题往往会得到更好更快的答复。

在你的例子中,我将从交换项目的方法开始(提示:你的代码不起作用,当你编写单元测试时你会很快发现),然后继续寻找最小的项目子列表。然后是使用这两个方法将最小的项目放在子列表的开头。最后一个方法逐步对所有子列表执行该方法。在继续将它们组合在一起之前,请确保每种方法都能完美运行,包括检查参数的有效性。

关于Java-Selection 按 int 键对对象数组进行排序并显示在表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527626/

相关文章:

java - 使用 if-condition 还是 HashMap?

java - 使用链表上的递归进行快速排序

javascript - 根据数组对象中存在的键排序

java - 查找长度为零的二维数组的宽度

arrays - 是否可以实现动态数组而无需重新分配?

python - 将 Counter() 列表附加到 pygtk 树存储 (Python)

sorting - cli C++ 对某个属性的对象列表进行排序

java - 哪些类(class)成员应该有保护修饰符?

java - 当返回 ResponseEntity<Resource> 的方法抛出错误时如何返回 ModelandView?

java - 创建需要从 Java 方法返回的对象