Это должно работать. Я go рассмотрю несколько ошибок, которые вы допустили в своем коде.
public class Qwerty{
static int[] bubbleSort(String arr[][]) {
int n = arr.length;
int temp = 0;
int []myAge = new int[n];
for (int i = 0; i < n; i++)
{
myAge[i] = Integer.parseInt(arr[i][1]);
}
boolean sorted = false;
while (!sorted){
sorted = true;
for(int i = 1; i < n; i++) {
if(myAge[i-1] > myAge[i]) {
temp = myAge[i-1];
myAge[i-1] = myAge[i];
myAge[i] = temp;
sorted = false;
}
}
}
return myAge;
}
public static void main(String[] args) {
Qwerty bs = new Qwerty();
String arr [][] = {{"Ace","10"},
{"Ben","8"},
{"Cid","20"},
{"Dan","5"},
{"Eve","12"}};
int myAge[] = bs.bubbleSort(arr);
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i][0]+ myAge[i]);
}
}
Во-первых, когда вы сделали Integer.parseInt
, вы делали это только для j, а не j-1, что означает что в первой итерации вы сравниваете 8 с 0 (что является значением по умолчанию для элемента массива int), когда вы выполняете if(myAge[j-1] > myAge[j])
. Я сделал это более ясным, просто предварительно проанализировав массив в отдельном l oop.
Во-вторых, в вашей пузырьковой сортировке вы узнаете, что сортировка завершена, когда вы можете go через массив без каких-либо перестановок. Это то, что я сделал с логическим значением sorted
.
В-третьих, в вашем основном методе, когда вы просто делаете bs.bubbleSort(arr)
, ничего не произойдет, потому что метод возвращает void. Итак, я изменил метод, чтобы он возвращал массив int, и сохранил его в переменной myAge в методе main.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Увы, после прочтения вашего комментария я вижу, что вы также хотите, чтобы имена соответствовали каждому числу, мой плохой. Вот новый код, и я объясню, что я изменил.
public class Qwerty{
static String[][] bubbleSort(String arr[][]) {
int n = arr.length;
int tempAge = 0;
String tempName = "";
int []myAge = new int[n];
String myName[] = new String [n];
for (int i = 0; i < n; i++)
{
myAge[i] = Integer.parseInt(arr[i][1]);
myName[i] = arr[i][0];
}
boolean sorted = false;
while (!sorted){
sorted = true;
for(int i = 1; i < n; i++) {
if(myAge[i-1] > myAge[i]) {
tempAge = myAge[i-1];
myAge[i-1] = myAge[i];
myAge[i] = tempAge;
tempName = myName[i-1];
myName[i-1] = myName[i];
myName[i] = tempName;
sorted = false;
}
}
}
for (int i = 0; i < arr.length; i++)
{
arr[i][0] = myName[i];
arr[i][1] = Integer.toString(myAge[i]);
}
return arr;
}
public static void main(String[] args) {
Qwerty bs = new Qwerty();
String arr [][] = {{"Ace","10"},
{"Ben","8"},
{"Cid","20"},
{"Dan","5"},
{"Eve","12"}};
arr = bs.bubbleSort(arr);
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i][0]+ arr[i][1]);
}
}
Я заставил метод bubbleSort возвращать отсортированный String [] [] вместо простого массива int, как раньше. Я создал отдельный массив для имен, который является myName
массивом. Это делается для того, чтобы в пузырьковой сортировке всякий раз, когда происходил обмен между двумя возрастами, имена также менялись местами с использованием переменной tempName
. После того, как все перестановки сделаны в массивы myName
и myAge
, я использую al oop, чтобы поместить их обратно в строковый массив [] [], а затем вернуть его.
Извините, мне следовало бы более внимательно прочитать ваш вопрос. Спасибо.