Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Хорошая эвристика для A-Star с загадкой 15 - это число квадратов, которые находятся не в том месте. Поскольку вам нужно как минимум 1 ход на квадрат, который не на своем месте, количество квадратов не на месте гарантированно будет меньше или равно количеству ходов, необходимых для решения головоломки, что делает ее подходящей эвристикой для A-Star .
Быстрый поиск Google поднимает пару бумаг, которые касаются этого в некоторых деталях: один на Параллельный Комбинаторный Поиск , и один на Поиск Графика Внешней памяти
Общее правило ползунка когда дело доходит до алгоритмических проблем: кто-то, вероятно, сделал его перед Вами и опубликовал их результаты .
Просто используйте игровое дерево. Помните, что дерево является специальной формой графика.
В Вашем случае листы каждого узла будут игровым положением после создания одного из перемещений, которое доступно в текущем узле.
Также. будьте внимательны, который с A-звездообразным алгоритмом, по крайней мере, необходимо будет выяснить допустимую эвристику, чтобы определить, ближе ли возможный следующий шаг к законченному маршруту, чем другой шаг.
Это задание для задачи с 8 головоломками, о котором говорилось об использовании алгоритма A * довольно подробно, но также довольно просто:
http://www.cs.princeton.edu /courses/archive/spring09/cos226/assignments/8puzzle.html
Вот, пожалуйста http://www.heyes-jones.com/astar.html
Помните, что A * будет искать в проблемном пространстве, продвигаясь по наиболее вероятному пути к цели, как определено вашим эвристиком.
Только в худшем случае придется затопить все проблемное пространство, это обычно случается, когда нет реального решения вашей проблемы.