#java #eclipse #unit-testing #junit #test-class
Вопрос:
Отображение ошибки в классе, где я пытаюсь получить значения статического ArrayList<ArrayList> adjacent_list_train=new ArrayList<ArrayList>(); который возвращает ошибку типа: java.lang .Исключение IndexOutOfBoundsException: индекс 1 выходит за пределы длины 1. Проблема в статической переменной?
class Node{
static ArrayList<ArrayList<TrainVertices>> adjacent_list_train=new ArrayList<ArrayList<TrainVertices>>();
public void CList(){
//error thrown at the following line
if(FlightEdges.size>0) {
if(!adjacent_list.isEmpty()) {
for(int i=0;i<adjacent_list.size();i ) {
//error line
ArrayList<FlightEdges> fe_al=adjacent_list.get(i);
}
}
По моим наблюдениям, речь идет о том, что доступ к статической переменной осуществляется в нескольких тестовых классах. Поскольку я новичок в тестировании junit, не могли бы вы рассказать, что не так с тестовым классом
Комментарии:
1. Почему
Node
естьstatic
переменная?static
для переменных, которые связаны с классом, а не с отдельным экземпляром. У каждогоNode
есть то жеadjancent_list_train
самое? Если нет, то этого не должно бытьstatic
.2. С учетом сказанного я предлагаю вам отладить свой код, чтобы выяснить, почему он ведет себя не так, как вы ожидаете или хотите. В этой статье есть советы, которые помогут вам начать.
3. Это для построения графика, где к этому полю обращаются другие классы для получения значения смежного узла
4. Является ли список общим для каждого
Node
экземпляра? ИлиNode
у каждого должен быть свой собственный список? Это единственный вопрос, который важен при принятии решения о том, использовать или нетstatic
. Место доступа к нему не имеет значения.5. Еще один вопрос, который нужно задать:
adjacent_list_train
даже принадлежитNode
вообще? Если другим классам требуется доступ к нему, возможно, этот список принадлежит где-то еще. Один из способов выяснить это — описать, что такое aNode
? Что представляет этот класс? Я предполагаю, что это узел на графике. Итак, сделайте шаг назад и подумайте о том, как вы представляете график в коде. Какое представление вы используете здесь? Похоже, у вас естьTrainVertices
иFlightEdges
как два других класса. Для общей структуры данных графа у вас должны быть гораздо более общие имена, такие какVertex
иEdge
.