2013-11-30 2 views
1

Очень новый для Java, я нахожусь в классе в колледже и делаю проект. Я пытаюсь сделать метод, который ищет массив String для введенного состояния и возвращает индекс. Если пользователь вводит запрос, который не находится в массиве, я бы хотел, чтобы он попросил новое состояние выполнить поиск. Мое исключение говорит, что «переменная statePosition может быть не инициализирована». Ниже приведен код.для циклов с вложенным циклом if в java

Спасибо заранее!

static final int NUM_STATES = 50; 

public static int askState(String[] stateNames) { 
    Scanner keyboard = new Scanner(System.in); 
    String state; 
    int statePosition; 
    System.out.println("Please enter a state that you would like to search:"); 
    state = keyboard.next(); 
    { 
     for (int i = 0; i < NUM_STATES; i++) { 
      if (state.equals(stateNames[i])) { 
       statePosition = i; 
      } else { 
       System.out.println("Please enter a valid state:"); 
      } 
      state = keyboard.next(); 
     } 
     return statePosition; 
    } 
+0

Initalialize variable statePosition. 0 будет работать нормально. – bmargulies

+0

String state = null; int statePosition = -1; –

+0

Возможно, пришло время принять ответ ... –

ответ

1

Вы можете использовать

int statePosition = -1; 

Это будет возвращать -1, если он не найден. Ошибка означает, что вы не присвоили значение statePosition.

0

Я думаю, вам нужно инициализировать переменную int statePosition; так:

int statePosition =-1; 

также инициализировать String state; так:

String state = null; 
+1

Спасибо! – user3052882

+1

@ user3052882: - Добро пожаловать!Примите это как ответ, если это вам помогло! –

0

Как состояний исключения, вы должны инициализировать Int statePosition:

int statePosition = null; 

или

int statePosition = 0; 

... вы знаете, что я имею в виду?

+0

Да, спасибо! – user3052882

+0

Вы больше всего приветствуетесь :) – Ben

0

вам необходимо инициализировать обе переменные

String state= null; 
int statePosition=-1; 
0

Проблема здесь заключается в том, что вы никогда не экземпляр переменной statePosition, но вы всегда вернуть его.

Попробуйте присвоить statePosition значение (как, например, другие сказали -1).

Также попробуйте сделать это за какое-то время (вместо оператора for), которое ломается, если ваше состояние было найдено.

0

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

String state= null; 
int statePosition=-1; 

Положите это в код, чтобы решить возникшие проблемы.

0

Возможно, вы захотите перейти с int на Integer. Integer - это объект, поэтому он может быть нулевым. Таким образом вы можете проверить, было ли оно установлено перед выполнением каких-либо дальнейших действий.

static final int NUM_STATES = 50; 

public static Integer askState(String[] stateNames) { 
    Scanner keyboard = new Scanner(System.in); 
    String state; 
    Integer statePosition; 
    System.out.println("Please enter a state that you would like to search:"); 
    state = keyboard.next(); 

    for (int i = 0; i < NUM_STATES; i++) { 
     if (state.equals(stateNames[i])) { 
      statePosition = i; 
     } else { 
      System.out.println("Please enter a valid state:"); 
     } 
     state = keyboard.next(); 
    } 
    if (statePosition == null) { 
     throw new Exception("State Position Not Set :("); 
    } 
    return statePosition; 
} 
Смежные вопросы