【问题标题】:2D bubble sort java program that have string and integer in array数组中有字符串和整数的二维冒泡排序java程序
【发布时间】:2020-07-05 13:35:29
【问题描述】:

我不知道问题出在哪里。编译时,它不会对数字进行排序。我该怎么办?我们学校的输出急需。提前致谢!

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

【问题讨论】:

    标签: java arrays 2d bubble-sort


    【解决方案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] &gt; 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 变量。在对myNamemyAge 数组进行所有交换之后,我使用循环将它们放回String arr[][],然后返回它。

    很抱歉,我应该更仔细地阅读您的问题。谢谢。

    【讨论】:

    • 谢谢兄弟!你只是救了我的命。解释得很好!
    • 兄弟还是有问题。排序过程中不包括姓名,仅包括年龄。
    • 感谢您的回复兄弟!非常感谢您的解释。我希望我和你一样擅长编程。
    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多