это мой первый пост. Как вы можете догадаться, это вопрос, связанный с домашней работой, но у меня возникли некоторые проблемы с этой топикой c, потому что другие не могли использовать компараторы для сравнения нулевых объектов друг с другом, я не могу. Вот мой код:
Здесь строка объявлена и расположена
public class OrderedStringArrayList {
private String[] array;
@SuppressWarnings("unchecked")
public OrderedStringArrayList() {
array = new String[10];
}
Это фактическая сортировка
public int insert(String item) {
boolean arrIsOpen = false;
//------------------------Insert Sort Vars---------------------------
int parseOne = 0;
int parseTwo = 0;
int reaLen = array.length;
String check = "";
//-------------------------------------------------------------------
for (int i = 0; i < array.length; i++) {
/*---------------------------------------------Check for Open slot-----------------------------------------------*/
if (array[i] == null) {
arrIsOpen = true;
}
if (arrIsOpen == true) {
array[i] = item;
break;
}
}
/*--------------------------------------------------------------------------------------------*/
if (arrIsOpen == true) { //Insert Sort here
for (parseOne = 1; parseOne < (reaLen); parseOne++) {
check = array[parseOne];
parseTwo = parseOne - 1;
while (parseTwo >= 0 && ((check.compareTo(array[parseTwo]) < 0))) {
array[parseTwo + 1] = array[parseTwo];
parseTwo--;
}
array[parseTwo + 1] = check;
}
}
else { // Grow the array by factor of 2 and copy over elements
String[] backingArray = new String[2 * array.length];
for (int i = 0; i < array.length; i++) {
backingArray[i] = array[i];
}
/*----------------------------------------------------------------------Sort--------------------*/
reaLen = backingArray.length;
for (parseOne = 1; parseOne < (reaLen); parseOne++) {
check = array[parseOne];
parseTwo = parseOne - 1;
while (parseTwo >= 0 && (check.compareTo(array[parseTwo]) < 0)) {
array[parseTwo + 1] = array[parseTwo];
parseTwo--;
}
array[parseTwo + 1] = check;
}
}
return 0;
}
и вот тест
@Test
public void insertOneItem() {
OrderedStringArrayList a = new OrderedStringArrayList();
assertEquals("Size should be 0 after construction!", 0, a.size());
a.insert("Hello!");
assertEquals("Size should be 1 after one insert!", 1, a.size());
}
Моя ошибка возникает во втором блоке кода в этой строке:
while (parseTwo >= 0 && (check.compareTo(array[parseTwo]) < 0)) {
Я получаю исключение NullPointerException, поскольку check == null и его попытка сравнить. Дело в том, что я не могу использовать компараторы для сортировки. Моя конечная цель - поместить элемент в этот массив, увеличить его на 2, если места нет. Чтобы проверить, есть ли место, в моем строковом массиве должно быть пустое (нулевое) место, но я не могу ничего сравнить с пустым местом, поэтому не могу отсортировать массив. Это беспокоило меня в течение нескольких дней, пожалуйста, помогите.
РЕДАКТИРОВАТЬ: Вот Stacktrace / Ошибка
java.lang.NullPointerException
at OrderedStringArrayList.insert(OrderedStringArrayList.java:57)
at OrderedStringArrayListTests.insertOneItem(OrderedStringArrayListTests.java:15)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)