2015-04-10 2 views
0

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

public static void insertCandidate(Candidate[]list , String find, String candidate, int votes) 
{ 
int location = 0; 
for (int i =0; i < list.length; i ++){ 
    String temp = list[i].returnName(); 
    if (temp.equals(candidate)){ 
     location = i; 

     } 
} 


for (int index = list.length - 1; index > location; index --){ 
     list[index] = list[index - 1]; 
     } 
     list[location ] = new Candidate(candidate, votes); 


} 
} 

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

Я не уверен, как пройти мимо этой проблемы, поэтому помощь будет оценена.

+0

'location' установлен до тех пор, пока' кандидат' находится в списке. –

+1

Вы пытаетесь вставить новое значение или перезаписать существующий? Вы должны посмотреть на это: http://stackoverflow.com/questions/586182/insert-item-into-array-at-a-specific-index –

+0

Пожалуйста, выберите правильный ответ – Ungeheuer

ответ

1

В своем первом цикле, где вы проверяете имя кандидата, вместо создания совершенно новый объект, вы можете сделать это, как returnName() возвращает строку:

if(list[i].returnName().equals(candidate)) 
{ 
    location = i;//saves answer 
    break;//gets out of loop 
{ 

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

Кроме того, я предлагаю установить значение, равное -1, если оно не найдено в списке, так как список не имеет отрицательных индексов.

1

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

int location = 0; 
label: for (int i =0; i < list.length; i ++){ 
    String temp = list[i].returnName(); 
    if (temp.equals(candidate)){ 
     location = i; 
     break label; 
    } 
} 
+1

Вам не нужна ярлык для разрыва. Просто используйте 'break;' будет делать трюк. –

+1

@ThomasHsieh прав, перерыв сделает трюк. Но если у вас несколько циклов и все усложняется, рекомендуется поставить метку в цикле; чтобы быть уверенным, какой конкретный цикл вы выходите. – Toni

Смежные вопросы