找到整数并返回其在数组中的位置

时间:2015-11-11 17:36:04

标签: java arrays int

我想生成代码,它将为我执行以下操作:

  • 将元素插入数组
  • 在数组中找到元素的位置

出于某种原因(我认为这可能是因为insertionSort方法),我没有得到预期的结果。例如,如果我将4个元素插入到长度为5的数组中,则插入的最后一个元素应该在索引3处。但是,此时我得到的位置是4,这是错误的。

我的问题是,当我尝试使用Integer代替int时,我必须使用该代码才能正常运行(以检查null是否有insertionSort下一个阻止NullPointerException执行的位置)我收到int[](我将所有Integer[]替换为public class arrayImplementation implements programInterface { int pointer = 0; int number = -1; static int[] theArray; public arrayImplementation(int size) { theArray = new int[size]; } @Override public void insert(int key) { theArray[pointer] = key; if(pointer != 0){ insertionSort(theArray); } pointer++; } @Override public int find(int key) { int low = 0; int high = theArray.length - 1; while (high >= low) { int mid = (low + high) / 2; if (theArray[mid] == key) { number = mid; return number; } if (theArray[mid] < key) { low = mid + 1; } if (theArray[mid] > key) { high = mid - 1; } } return number; } @Override public void delete(int key) {} public void insertionSort(int[] theArray) { for (int i = 1; i < theArray.length; i++) { int temp = theArray[i]; int j = i; while (j > 0 && temp < theArray[j - 1]) { theArray[j] = theArray[j - 1]; j = j - 1; } theArray[j] = temp; } } public static void main(String arg[]) { arrayImplementation arrImp = new arrayImplementation(5); arrImp.insert(1); arrImp.insert(2); arrImp.insert(3); arrImp.insert(7); System.out.println(arrImp.find(7)); for(int i = 0;i<theArray.length;i++){ System.out.println(theArray[i]+", "); } } } 而不更改任何其他内容。)

itms-apps://itunes.apple.com/app/idID_OF_YOUR_APP

1 个答案:

答案 0 :(得分:0)

“将int插入到阵列中并同时进行排序”会导致丢失一些值。 int arr[] = new int [5]表示您的数组具有“5”数字,均为“0”({0,0,0,0,0})。如果在添加数字时对它们进行排序,则会丢失一些int值。您应该在添加所有数组后对其进行排序。运行自己的代码时,您会发现数组中没有“2”。如果使用Integer对象而不是'int',则将为null而不是'0'。我编写自己的排序方法,最后发送空值。请尝试下面的代码。

import java.util.Arrays;

public class ArrayImplementation {

    int pointer = 0;
    static Integer[] theArray;

    public ArrayImplementation(int size) {
        theArray = new Integer[size];
    }

    public void insert(int i) {
        theArray[pointer++] = i;
    }

    public int find(int i) {
        int c = 0;
        for (int n : theArray) {
            if (n == i)
                return c;
            c++;
        } 
        return -1;
    }
    public void sort () {

        Arrays.sort(theArray, new Comparator<Integer>() {
            @Override
            public int compare(Integer x, Integer y)
            {
                if (x == null || y == null)
                    return 1; // sends null value at the end of the array.
                return x - y;
            }
        });
    }
    public static void main(String arg[]) {
        ArrayImplementation arrImp = new ArrayImplementation(5);
        arrImp.insert(1);
        arrImp.insert(2);
        arrImp.insert(3);
        arrImp.insert(7);
        arrImp.sort(); // you should sort at the end of insertion. 
        for (int i = 0; i < theArray.length; i++) {
            System.out.println(theArray[i] + ", ");
        }

        System.out.println("");
        System.out.println(arrImp.find(7));
    }
}

“7”在数组中保持为3。

  

打印:

1, 
2, 
3, 
7,
null

3