数组中包含字符串和整数的二维冒泡排序 java 程序
2D bubble sort java program that have string and integer in array
不知道问题出在哪里。编译时,它不会对数字进行排序。我应该怎么办?我们学校急需产出。提前致谢!
public class Qwerty {
static void bubbleSort(String arr[][]) {
int n = arr.length;
int temp = 0;
int []myAge = new int[n];
for(int i = 0; i < n; i++) {
for(int j=1; j < n-i-1; j++)
{
myAge[j] = Integer.parseInt(arr[j][1]);
if(myAge[j-1] > myAge[j]) {
temp = myAge[j-1];
myAge[j-1] = myAge[j];
myAge[j] = temp;
}
}
}
}
public static void main(String[] args) {
Qwerty bs = new Qwerty();
String arr [][] = {{"Ace","10"},
{"Ben","8"},
{"Cid","20"},
{"Dan","5"},
{"Eve","12"}};
bs.bubbleSort(arr);
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i][0]+arr[i][1]);
}
}
这应该有效。我将检查您在代码中犯的一些错误。
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)
时,什么也不会发生,因为方法 return 无效。因此,我将方法更改为 return 一个 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 方法 return 排序为 String[][] 而不是像以前那样只是一个 int 数组。我为 myName
数组的名称创建了一个单独的数组。这样一来,在冒泡排序中,每当在 2 个年龄之间进行交换时,也会使用 tempName
变量交换名称。在对 myName
和 myAge
数组进行所有交换后,我使用循环将它们放回字符串 arr[][],然后 return。
抱歉,我应该更仔细地阅读你的问题。谢谢。
不知道问题出在哪里。编译时,它不会对数字进行排序。我应该怎么办?我们学校急需产出。提前致谢!
public class Qwerty {
static void bubbleSort(String arr[][]) {
int n = arr.length;
int temp = 0;
int []myAge = new int[n];
for(int i = 0; i < n; i++) {
for(int j=1; j < n-i-1; j++)
{
myAge[j] = Integer.parseInt(arr[j][1]);
if(myAge[j-1] > myAge[j]) {
temp = myAge[j-1];
myAge[j-1] = myAge[j];
myAge[j] = temp;
}
}
}
}
public static void main(String[] args) {
Qwerty bs = new Qwerty();
String arr [][] = {{"Ace","10"},
{"Ben","8"},
{"Cid","20"},
{"Dan","5"},
{"Eve","12"}};
bs.bubbleSort(arr);
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i][0]+arr[i][1]);
}
}
这应该有效。我将检查您在代码中犯的一些错误。
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)
时,什么也不会发生,因为方法 return 无效。因此,我将方法更改为 return 一个 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 方法 return 排序为 String[][] 而不是像以前那样只是一个 int 数组。我为 myName
数组的名称创建了一个单独的数组。这样一来,在冒泡排序中,每当在 2 个年龄之间进行交换时,也会使用 tempName
变量交换名称。在对 myName
和 myAge
数组进行所有交换后,我使用循环将它们放回字符串 arr[][],然后 return。
抱歉,我应该更仔细地阅读你的问题。谢谢。