Для моей текущей домашней работы я пытаюсь отсортировать свой массив по универсальному классу, когда пользователь вставляет значения в свои местоположения. Когда размер читается как полностью загруженный, класс массива вызывает метод расширения, который увеличивает размер массива, сохраняя его значения в надлежащих местах, что я следовал из заметки моего профессора. По какой-то причине все мои значения, за исключением местоположения [0], кажутся либо неуместными, либо удалены из массива. Я полагаю, что проблема возникает в методе расширения, но я не знаю, как это исправить.
Например, начальный размер в настоящее время установлен на 5, но увеличивается на 3 при вызове метода расширения. Пользователь может вводить значения 1,2,3,4,5 отлично. Но расширение вызывается, когда пользователь вводит новое значение 6, которое выводит массив 1, 6, ноль, ноль, ноль, ноль. Любое дальнейшее приведет к ошибке «Исключение в потоке» main «java.lang.NullPointerException»
Вот мой класс Sorted Array:
public class SortedArray {
private int size;
private int increment;
private int top;
Comparable[] a;
public SortedArray(int initialSize, int incrementAmount)
{
top = -1;
size = initialSize;
increment = incrementAmount;
a = new Comparable [size];
}
public int appropriatePosition(Comparable value)
{
int hold = top;
if(hold == -1)
{
hold = 0;
}
else
{
for(int i = 0; i <= top; i++)
{
if(value.compareTo(a[i]) > 0)
{
hold = i + 1;
}
}
}
return hold;
}
public Comparable smallest()
{
return a[0];
}
public Comparable largest()
{
return a[top];
}
public void insert(Comparable value)// the method that my driver calls for.
{
int ap = appropriatePosition(value);
//Expansion if full
if(full() == true)
{
expansion();
}
//Shifting numbers to top
for(int i = top; i >= ap ; i--)
{
{
a[i + 1] = a[i];
}
}
a[ap] = value;
top++;
}
public boolean full()
{
if(top == a.length -1)
{
return true;
}
else
{
return false;
}
}
public void expansion()//here's where the expansion begins
{
int newSize = a.length + increment;
Comparable[] tempArray = new Comparable[newSize];
for(int i= 0; i < a.length; i++)
{
tempArray[i]= a[i];
a = tempArray;
}
}
Вот мой класс драйвера, который вызывает метод вставки в классе SortedArray.
public class IntDriver {
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
//Creating variables
int data;
boolean check = false;
int choice;
int size = 5;
int increment = 3;
SortedArray b = new SortedArray(size, increment);
//Creating Menu
System.out.println("Please choose through options 1-6.");
System.out.println("1. Insert\n2. Delete\n3. Clear\n4. Smallest\n5. Largest\n6. Exit\n7.Redisplay Menu");
while(check == false)
{
choice = keyboard.nextInt();
switch(choice)
{
case 1:
System.out.println("Type the int data to store in array location.");
data = keyboard.nextInt();
Integer insertObj = new Integer(data);
b.insert(insertObj);
System.out.println("The value " + data + " is inserted");
b.print();
break;