#java #for-loop #indexof
#ява #для цикла #индекс #java #indexof
Вопрос:
Я пытаюсь создать простой indexOf()
метод, который возвращает значение int и который распознает строку (не char) строкового массива.
public int indexOf(String str) {
/*Getting and return the index of the first
*occurrence of the specified String. Return
*-1 if string not in the list
*/
for(int i = 0; i < listArray.length; i ) {
if(listArray[i].equals(str)) {
return str.indexOf(listArray[i]);
}
}
return -1;
}
Я использую indexOf()
метод из Java для первого возврата, но он всегда возвращает 0. Почему это так, и есть ли лучший способ написать этот метод?
Комментарии:
1. Если вы пытаетесь реализовать свою собственную
indexOf
функцию (я полагаю, для практики), не приведет ли использование встроенной функции к поражению цели упражнения? Может быть, вам следует подумать о том, что на самом деле делает функция (или взглянуть на реализацию в вашем JDK) и взять ее оттуда.2. Не рассматривая другие проблемы в вашем коде, лучше просто вернуть i, как только вы усердно поработаете и повторите весь путь до него …:)
3. Что, черт возьми, такое
listArray
?4. Также для хорошего чтения, посмотрите, что
equals
из себя представляет, быстро взглянув на стандартную реализацию алгоритма Кнута-Морриса-Пратта topcoder.com/community/data-science/data-science-tutorials /…5. Метод indexOf всегда возвращает индекс первого вхождения строки. И теперь мне интересно, почему это работает только с возвращаемым значением i? Почему он не возвращает ту же строку, что и другие индексы? Например, слово ‘hello’ сначала появляется в индексе 1, затем оно появляется в индексе 3; и метод вернет индекс 1.
Ответ №1:
Ваш цикл for в порядке, проблема в том, что когда вы его находите, вы возвращаете индекс, в котором строка находится сама по себе, и это всегда будет 0.
Например, «hello» находится в позиции 0 для строки «hello».
Вы должны просто вернуть i
, вот так:
public int indexOf(String str) {
/* Getting and return the index of the first
* occurrence of the specified String. Return
* -1 if string not in the list
*/
for (int i = 0; i < listArray.length; i ) {
if (listArray[i].equals(str)) {
// If we get here, it means that the item for position `i` is equal to `str`.
return i; // just return `i`
}
}
return -1;
}
Ответ №2:
return i;
по определению listArray[i]
равно str
.
Ответ №3:
Потому что всякий раз, когда вы запускаете return str.indexoOf(listArray[i]);
, у вас уже есть str
equals listArray[i]
. Конечно, вы получаете 0
все время, это эквивалентно str.indexOf(str);
И вам действительно не нужно этого делать. Вы уже нашли элемент в списке, который равен заданной строке, просто верните его местоположение:
return i;
Ответ №4:
Вы должны вернуть i (индекс), когда выполняется условие if.
public int indexOf(String str) {
for(int i = 0; i < listArray.length; i ) {
if(listArray[i].equals(str)) {
return i;
}
}
return -1;
}
Ответ №5:
Я думаю, вы запутались. если вы хотите найти строку из ArrayList и если вы уже нашли строку в своем if(listArray[i].equals(str))
, то все, что вам нужно сделать, это просто вернуть этот индекс i, поскольку вы его уже нашли.
for(int i=0;i<listArray.length;i ){
if(listArray[i].equals(str)){
return i;
}
}
это ответ.
Всегда помните: Если вы даже опубликуете содержимое или образец вашего listArray и образец строки для поиска в нем… Это поможет нам лучше понять, где именно вы застряли
Ответ №6:
Вы можете сделать это с помощью цикла for.
- Проверьте, совпадает ли строка с использованием equals.
- Если да, верните индекс.
- Если вы выйдете из цикла for, верните значение -1.
Ответ №7:
public int indexOf(String iparam){
String astring = "" //YOUR OWN STRING
boolean astat = false;
List<Integer> alist = null;
for(int i=0; i<astring.toCharArray().length; i ){
alist = new ArrayList<>();
for(int j=0; j<iparam.toCharArray().length; j ){
try{
if(astring.toCharArray()[i j] == iparam.toCharArray()[j]){
alist.add(i j);
}else{
break;
}
}catch(Exception ex){
ex.printStackTrace();
break;
}
}
if(alist.size() == iparam.toCharArray().length){
astat = true;
break;
}
}
if(astat){
return alist.get(0);
}else{
return -1;
}
}