【问题标题】:Why is this array not printing all it's values (Prints 0's)?为什么这个数组不打印它的所有值(打印 0)?
【发布时间】:2013-11-05 23:59:19
【问题描述】:

基本上,程序会生成 x,y,z 坐标的位置,包括距离索引。程序将它们存储在每个指定的索引中,并继续对它们进行排序。结果输出已排序,但有些列打印了一堆零(好像从未在该位置生成数组)。任何帮助,将不胜感激!

示例输出:

(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(2.1933026),(3.873999),(2.6528487)),(5.1822824)
(2.1933026),(3.873999),(4.9137025)),(6.6304536)
(3.4213266),(5.4315333),(5.976922)),(8.771011)
(4.084449),(5.4315333),(5.976922)),(9.050297)
(6.4669027),(5.4315333),(5.976922)),(10.346303)

主程序

//import java.util.ArrayList;

import java.util.*;
public class MyQuickSort {
  private static float a[][] = new float [10][4];

  public static void main(String[] args) {
    System.out.println("(" + "X Length" + "),(" + "Y Length" + "),(" + "Z Length" + "),(" + "Distance Length" + ")");
    for(int i = 0; i < a.length ; i++) {
      for(int j = 0; j < 3; j++) {
        a[i][j] = (float)(Math.random () * 6) +1 ;
        //a[i][3] = (float)Math.sqrt((a[i][0] * a[i][0]) + (a[i][1] * a[i][1]) + (a[i][2] * a[i][2]));
        for (int k = 0; k < 4; k++ ) {
          quickSort(a, 0, a.length - 1,k);
        }
      }
              a[i][3] = (float)Math.sqrt((a[i][0] * a[i][0]) + (a[i][1] * a[i][1]) + (a[i][2] * a[i][2]));
      System.out.println("(" + a[i][0] + "),(" + a[i][1] + "),(" + a[i][2] + ")" + "),(" + a[i][3] + ")"); 
    }
  }

  public static void quickSort(float[][] a, int p, int r,int k)
  {
    if(p<r)
    {
      int q=partition(a,p,r,k);
      quickSort(a,p,q,k);
      quickSort(a,q+1,r,k);
    }
  }

  private static int partition(float[][] a, int p, int r,int k) {

    float d = a[p][k];
    int i = p-1 ;
    int j = r+1 ;

    while (true) {
      i++;
      while ( i< r && a[i][k] < d)
        i++;
      j--;
      while (j>p && a[j][k] > d)
        j--;

      if (i < j)
        swap(a, i, j,k);
      else
        return j;
    }
  }

  private static void swap(float[][] a, int i, int j, int k) {

    float temp = a[i][k];
    a[i][k] = a[j][k];
    a[j][k] = temp;
  }
}

【问题讨论】:

  • 您是否尝试对每个单独的次要数组进行单独排序(对每个“行”中的值进行排序),或者您是否尝试按次要数组中的某个值对主要数组进行排序(全部排序)通过一些“列”键行)?
  • 基本上,我正在尝试对每个列键中的值进行排序。因此,第 1 列将减少到增加,依此类推。
  • 您是否考虑过转置数组(将每列存储在自己的数组中)然后使用 Java 内置的归并排序 (bit.ly/1aEvNdX) 对每个数组进行排序?

标签: java arrays class sorting constructor


【解决方案1】:

您混合了数组初始化和排序 - 这就是问题所在。在第一次迭代中,填充第一个元素,然后运行排序,这会将这个元素移动到数组的末尾,因为它大于未初始化的零。排序后打印第一个元素,该元素现在用零填充。这种情况一直持续到第 6 次迭代,此时已初始化元素的数量大于未初始化元素的数量。

您可能希望将代码分成三部分:初始化、排序和打印。

【讨论】:

    【解决方案2】:

    你在循环中排序。这意味着填充的值被排序到最后,然后被覆盖。

    修复:先做i/j循环填充,然后排序一次,再单独循环打印数据

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 2016-01-17
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多