这应该可行。我将检查您在代码中遇到的一些错误。
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])。通过事先在单独的循环中解析数组,我更清楚地说明了这一点。
其次,在您的冒泡排序中,您知道排序完成的方式是您能够在不进行任何交换的情况下遍历数组。这就是我对 sorted 布尔值所做的。
第三,在你的 main 方法中,当你只做bs.bubbleSort(arr) 时,什么都不会发生,因为方法返回 void。因此,我将方法更改为返回一个 int 数组,并将其保存到 main 方法中的 myAge 变量中。
我希望这会有所帮助。
编辑:糟糕,在阅读了您的评论后,我发现您还希望名称与每个数字相对应,我的错。这是新代码,我将解释我所做的更改。
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 数组。这样在冒泡排序中,每当在 2 个年龄之间进行交换时,名称也会被交换,使用 tempName 变量。在对myName 和myAge 数组进行所有交换之后,我使用循环将它们放回String arr[][],然后返回它。
很抱歉,我应该更仔细地阅读您的问题。谢谢。