使用sort和shuffle方法创建动态数组,这两种方法都没有正常工作

时间:2018-06-12 19:22:01

标签: java arrays

对于Java类,我们必须创建一个Dynamic数组。不能使用arraylist。

这是我定义类

的地方
public class DynamicArray {

    private int array[];
    private int size;

这是被调用的构造函数:

/**
 * DynamicArray     copies the array
 * @param obj 
 */
public DynamicArray(DynamicArray obj) {
    array = obj.toArray();
    size = obj.getSize();
}

在main方法下,这里是我创建新数组对象并尝试排序和随机播放的地方(以及其他一些方法,但这些方法正在运行):

   /**
    * Calling the copy constructor, which calls the toArray method
    * Calling get method
    * Calling indexOfMethod
    * Calling findMax
    * Calling findMin
    * Calling shuffle
    */

   DynamicArray array3 = new DynamicArray(array2);
   array3.push(100);
   array3.push(150);
   array3.push(100);
   System.out.println(array3);
   array3.pop();
   System.out.println(array3);
   System.out.println("This number is at index 5: " + array3.get(5));
   System.out.println("The number 100 first appears at index: " + array3.indexOf(100));
   System.out.println("The highest number is: " + array3.findMax());
   System.out.println("The lowest number is: " + array3.findMin());
   System.out.println(array3);
   array3.shuffle();
   System.out.println(array3);
   array3.sort(array3.toArray());

toArray方法是这样的:

/**
 * toArray      accessor returns the array
 * @return 
 */
public int[] toArray() {
    int arrayCopy[] = new int[array.length];
    for (int i = 0; i < array.length; i++) {
        arrayCopy[i] = array[i];
    }

    return arrayCopy;
}

排序和随机方法是这样的:

/**
 * isEmpty      returns size = 0 is array is empty
 * @return 0 if empty
 */

public boolean isEmpty() {
    return size == 0;
}

/**
 * sort     sorts the numbers in the array
 */

public void sort(int [] array) {
    int lastPos;
    int index;
    int newNum;

    for (lastPos = array.length - 1; lastPos >= 0; lastPos--) {
        for (index = 0; index <= lastPos - 1; index++) {
            if (array[index] > array[index + 1]) {
                newNum = array[index];
                array[index] = array[index + 1];
                array[index + 1] = newNum;
            }
        }
    }
}

/**
 * shuffle      shuffles the array
 */
 public void shuffle() {
    Random r = new Random();
    for (int i = array.length - 1; i > 0; i--) {
        int index = r.nextInt(i);
        int tmp = array[i];
        array[i] = array[index];
        array[index] = tmp;
    }
}

sort的输出中包含0:

0,0,0,10,0,0,150,0,2,

洗牌并没有改变任何事情。

这些是在辅导实验室的帮助下创建的,我将它们与在线推荐进行了比较。

发生了什么事?

更新:

这是array2:

       /**
        * Calling constructor with parameter
        * also calling push to add items to the array
        */

       DynamicArray array2 = new DynamicArray(5);
       array2.push(4);
       array2.push(10);
       array2.push(15);
       array2.push(18);
       array2.push(2);
       array2.push(25);
       System.out.println("Size is: " + array2.getSize());
       array2.push(20);
       System.out.println("Size is: " + array2.getSize());
       System.out.println(array2);

这是getSize()

/**
 * getSize     gets size of the array
 * @return size
 */
public int getSize() {
    return size;
}

1 个答案:

答案 0 :(得分:0)

您能否提供有关 array2 如何即时消息的信息?这是算法的起点。

getSize()实现也很有用。

现在您可以在此检查排序算法: https://www.geeksforgeeks.org/sorting-algorithms/ 例如冒泡排序很容易理解和实现。

对于洗牌实施,您可以检查: http://www.vogella.com/tutorials/JavaAlgorithmsShuffle/article.html