我想生成代码,它将为我执行以下操作:
出于某种原因(我认为这可能是因为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
答案 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