Задача состоит в организации и отображении пользовательского ввода, соответствующего отметкам.
Например,
Имя: Оскар Марк: 25, Имя: Рубин Марк: 45, Имя: Джейк Марк: 13
Поэтому он должен отображать:
Rubin 45
Oscar 25
Jake 13
В текущем коде отображаются только имена и метки, но не в упорядоченном порядке. Я подозреваю, что это может иметь отношение к int
и String
, но я не совсем уверен.
private void btnEnterActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 0; i < 5; i++) {
ArrNames[i] = JOptionPane.showInputDialog("Enter a Name:");
ArrMarks[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter a mark:"));
}
}
private void btnSortActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 0; i < 5 - 1; i++) {
for (int j = i +1; j < 5; j++) {
if (ArrNames[i].compareTo(ArrNames[j]); //>0 sorts in ascending order <0 sorts in descending order ==0 tests for duplicate string value
//using .compareTo because checking 2 names
{
//sorting the names
String temp = ArrNames[i];
ArrNames[i] = ArrNames[j];
ArrNames[j] = temp;
//sorting the marks
int temp1 = ArrMarks[i];
ArrMarks[i] = ArrMarks[j];
ArrMarks[j] = temp1;
}
}
}
}
private void btnDisplayActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 0; i < 5; i++) {
txaDisplay.append(ArrNames[i] + "\t\t" + ArrMarks[i] + "\n");
}
}
Правильное решение вопроса заключается в замене
if (ArrNames[i].compareTo(ArrNames[j]))
с
if (ArrMarks[i] < ArrMarks[j])
Первоначально я сравнивал имена, а не фактические целочисленные значения Marks.
Ваши требования говорят, что вы хотите, чтобы это было заказано по mark
, и все же вы сравниваете по name
.
StudentResult
или чего-то подобного, в котором есть как имя, так и знак. Тогда вам нужна только одна коллекция. Вы также должны сделать ваш код легче для чтения, отформатировав его ...