2015-09-23 3 views
0

Я думаю, что это мой вопрос? В принципе, этот код не будет работать независимо от того, сколько способов я его пробую. Состояние не будет задано для данного массива.Можно ли инициализировать массив с помощью условных выражений?

if(difficulty == "easy") { 
    state= new int[] {1,3,4,8,6,2,7,0,5}; 
    blankTile = 7; 
    Node start = new Node(difficulty,state,blankTile); 
    openList.add(start); 
} 
else if(difficulty == "medium") { 
    state= new int[] {2,8,1,0,4,3,7,6,5}; 
    blankTile = 3; 
    Node start = new Node(difficulty,state,blankTile); 
    openList.add(start); 
} 
else if(difficulty == "hard") { 
    state= new int[] {2,8,1,4,6,3,0,7,5}; 
    blankTile = 6; 
    Node start = new Node(difficulty,state,blankTile); 
    openList.add(start); 

} 
else if(difficulty == "worst"){ 
    state= new int[] {5,6,7,4,0,8,3,2,1}; 
    blankTile = 4; 
    Node start = new Node(difficulty,state,blankTile); 
    openList.add(start); 
} 

Я имел в конструктор узла на первый, где я бы просто передать в затруднении, и было бы установить состояние и blankTile в конструкторе. но это тоже не работало. Кто-нибудь будет любезен, чтобы помочь мне?

+0

Возможно, мне что-то не хватает, но не следует заявлять и начинать объявляться вне операторов if? Вы можете инициализировать их после факта внутри операторов if, но вы теряете область действия, если вы больше не находитесь в операторах if. –

+0

Так что состояние объявлено снаружи, я просто не показывал его здесь. Начать не было, но после исправления его в моем коде он все равно ничего не меняет. Когда я перехожу к состоянию печати, чтобы проверить, правильно ли он назначен, я получаю нулевой указатель. – DeadApe

+2

Возможный дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – yshavit

ответ

2

Это не то, как вы сравниваете строки в Java. Вы сравниваете, если две ссылки на строковый объект одинаковы, а не сами строки.

Именно поэтому state не назначается.

Вы должны использовать String.equals()

if(difficulty.equals("easy")) { 
    state= new int[] {1,3,4,8,6,2,7,0,5}; 
    blankTile = 7; 
    ... 
} 
else if(difficulty.equals("medium")) { 
    state= new int[] {2,8,1,0,4,3,7,6,5}; 
    blankTile = 3; 
    ... 
} 

В качестве примечания, вы повторяете линии

Node start = new Node(difficulty,state,blankTile); 
openList.add(start); 

несколько раз. Возможно, было бы полезно переместить их за пределы своих заявлений if.

+0

Yup ... все. Большое спасибо. – DeadApe