Java-Selection сортировка массива объектов по ключу int и отображение в таблице - PullRequest
0 голосов
/ 27 сентября 2018

Я сейчас работаю над проектом для школы и действительно борюсь.Я должен выбрать сортировку группы объектов Ученика, а затем отобразить их в порядке сортировки выбора.

Создать массив размером 10 и назначить данные студента ( Имя , BroncoId , age и TotalMarks ) для массива.Выполните сортировку выбора, чтобы отсортировать учащихся в порядке убывания на основе их общих оценок.

a.Шаги:

i.Создайте список учеников (используйте Случайный класс в Java, чтобы сгенерировать возраст (15-25) и общее количество (0-100))

ii.Распечатайте список студентов в виде таблицы

iii.Выполните сортировку по общему количеству баллов учащихся

Место, в котором я застрял в настоящее время, выполняет сортировку по выбору.Я понимаю, как создать сортировку выбора, но не могу перевести ее для этой реализации.

Мой код сортировки выбора:

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;
}

Когда я запускаю этот код, консольвозвращает:

Я искал репетитора, чтобы, надеюсь, решить эту проблему, но мой репетитор дал мне несколько нефункциональных предложений.Мы оба были в тупике в конце сеанса.

Мой код для печати:

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 символов.Что я могу добавить в это время, пока выполняется lop для этого?

Я хочу, чтобы программа выводила одну строку имени объекта, например:

49 символов 49 символов ... Что еще осталось

Вероятно, это никогда не пройдет три строки, но, эй, кто сказал, что я не могу привести такой пример?Что для этого нужно добавить в заголовок цикла while?

PS: Вот класс ученика, если он вам нужен.

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;

}

1 Ответ

0 голосов
/ 27 сентября 2018

Добро пожаловать на SO Мэтью.

Вместо того, чтобы дать вам решение, я подумал, что было бы полезно дать вам процесс решения проблемы самостоятельно.

Хорошая практика в разработке программного обеспечения - разбить вашу проблему на очень маленькие компоненты, убедиться, что каждый из них работает идеально (через модульное тестирование), а затем построить свое решение из этих компонентов.

ВВ соответствии с этой практикой, я предлагаю вам сделать следующее:

  • перечислить каждый из отдельных шагов, необходимых для выполнения сортировки выбора на бумаге.
  • Выберите самый простой (например, обмен двух элементов).
  • Напишите модульный тест, который прошел бы, если бы ваш метод подкачки работал
  • Запустите модульный тест и убедитесь, что он не прошел
  • напишите самый простой код, который вы можете сделать, чтобы пройти этот тест
  • написать новый тест, чтобы охватить более сложный сценарий, который еще не поддерживается
  • продолжайте до тех пор, пока вы не поверите, что метод работает отлично
  • переходите к следующему методу
  • как только все компоненты работают отлично, напишите метод, который вызывает их все, используя один и тот же процесс (т. Е. Сначала проверьте, а затем код)

Если вы выполните этот процесс, то в итоге получитесистема, которую вы понимаете отлично, работает, является ремонтопригодной, и что вы можете рефакторинг.Это имеет еще одно очень существенное преимущество: это означает, что когда вы приходите в SO с вопросом, вы будете задавать вопрос о конкретном элементе, который вы не знаете, как решить, а не вопрос «почему мой код не работает».Конкретные вопросы имеют тенденцию получать лучшие и более быстрые ответы.

В вашем случае, я бы начал с методов обмена элементами (подсказка: ваш код для этого не работает, который вы обнаружите быстро, когда будете писать модульtest), а затем перейдем к поиску наименьшего элемента в подсписке.Затем метод, который использует эти два, чтобы поместить наименьший элемент в начало подсписка.Наконец, метод, который выполняет этот метод для всех подсписков постепенно.Убедитесь, что каждый метод работает отлично, включая проверку правильности аргументов, прежде чем переходить к их объединению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...