【问题标题】:how can i sort my array using (shifting to right)我如何使用(向右移动)对我的数组进行排序
【发布时间】:2018-09-17 11:51:59
【问题描述】:

我必须从文件中读取并将学生姓名和 ID 添加到对象数组中,在我之后 添加它我想要排序索引(按 id 的信息) 这是输入示例

100 加 123 aa bb 添加 899 cc dd 加 222 ff gg 添加 565 ii hh 添加 777 kk oo 退出

    int maxNumStudents = read.nextInt();
    Student[] arrayObStudent = new Student[maxNumStudents];
    while (read.hasNext()) {
        do {
            command = read.next();

            switch (command) {
                case "ADD":

                    arrayObStudent[Student.getNumStudents()] = new Student();
                    arrayObStudent[Student.getNumStudents()].setID(read.nextInt());
                    arrayObStudent[Student.getNumStudents()].setFname(read.next());
                    arrayObStudent[Student.getNumStudents()].setlName(read.next());

//这将打印它而不排序 System.out.println(arrayObStudent[Student.getNumStudents()].getID() + "\n"); System.out.println(arrayObStudent[Student.getNumStudents()].getFname()); System.out.println(arrayObStudent[Student.getNumStudents()].getlName()); Student.increseStudents(1); 等等。

【问题讨论】:

  • “向右移动”是什么意思?你的输入数据是什么格式的?考虑使用通用文件类型,例如 csv、json、xml 或类似文件。
  • Student为什么有函数getNumStudents()
  • 我正在使用 java,我的输入文件是 txt ,向右移动意味着我试图移动它的数组的索引,因为我想在空白索引中插入从 1 开始的排序 id -8 示例和 getNumStudents() 用于了解您是哪个学生索引
  • .txt 扩展名只是一个可以包含任何内容的文本文档。您应该使用可接受的数据类型,例如 json、xml、csv 或类似的东西。此外,您不应将索引存储在对象内。索引应该存储在集合级别。

标签: arrays sorting object shift


【解决方案1】:

在每次插入时,您都可以检查数组中的正确位置以插入学生。 这就是数组保持排序的方式。

int insertStudent (int arrayObStudent[], int firstStudentId, int lastStudentId, Student target)
{
  int i = lastStudentId;  
  while ((i > firstStudentId) && (target.getID() < arrayObStudent[i-1]))
    {   
      arrayObStudent[i] = arrayObStudent[i-1];
      i = i - 1;
    }
  arrayObStudent[i] = target; 
  return i;
}

希望这会有所帮助。

【讨论】:

  • 我试过你的代码,但是在这一行我得到一个错误(Student cannot convert into int)arrayObStudent[i] = target;
  • 传递给函数的arrayObStudent是'int'类型,只是将其更改为Student类型,它将起作用.. int insertStudent (Student arrayObStudent[], int firstStudentId, int lastStudentId, Student target) { int我 = 最后一个学生 ID; while ((i > firstStudentId) && (target.getID()
  • 这一行的另一个错误 while ((i > firstStudentId) && (target.getID()
  • 很好,没有错误很抱歉问我在哪里可以把这个方法准确地工作,当我调用它时我应该写什么参数
  • 1.请根据您的类结构更改代码以消除错误。 2. 需要保存之前输入的studentId,作为lastStudentId的参数传入。 3. 我建议你使用 ArrayList 来存储学生而不是数组。会更容易。
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 2022-06-25
  • 1970-01-01
  • 2010-10-12
  • 2014-07-05
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
相关资源
最近更新 更多