Для с если заявление Ява - PullRequest
0 голосов
/ 13 июня 2011

Мне нужно проверить, где индекс char c находится в строке, и если char c отсутствует, верните -1. ​​

public class Find {
    private String _st;
    int i;

    public Find(String st) {
        _st = st;
    }

    public int whatIstheIndex(char c) {
        for (i=0;i<_st.length();i++)
            if (_st.charAt(i) == c) {
                return i;
            } else {
                return -1;
            }
        return i;
    }
}

Я получаю всегда -1.Зачем?Последний return i; не нужен?

Ответы [ 8 ]

3 голосов
/ 13 июня 2011

Удалите предложение else, оно возвращает -1, если первый символ в строке неверен.

Затем вам также необходимо изменить инструкцию возврата в конце метода.

2 голосов
/ 14 июня 2011

Вот альтернативное решение, которое также работает.

public int whatIstheIndex(char c) {
    int result = -1;
    for (int i = 0; i < _st.length(); i++) {
        if (_st.charAt(i) == c) {
            result = i;
        } 
    }
    return result;
}

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

2 голосов
/ 13 июня 2011

Почему бы вам просто не использовать встроенный метод indexOf? Это было бы намного проще и быстрее, чем перебирать строку и проверять каждый символ.

Но если вам нужно использовать этот метод по какой-то странной причине, избавьтесь от вашего условия else, потому что оно заставляет функцию возвращать -1 каждый раз, когда проверяемый символ не соответствует.

1 голос
/ 13 июня 2011

Почему бы не использовать метод String.indexOf(int).

public  int whatIstheIndex (char c) {
    return _st.indexOf(c);
}

Иначе, возвращайте -1 только после завершения цикла:

public  int whatIstheIndex (char c) {

    for (i=0;i<_st.length();i++)

        if (_st.charAt(i) == c )  {
           return i;
        }
    }

    return -1;
}
1 голос
/ 13 июня 2011

Ваш код должен быть таким:

public int whatIstheIndex(char c) {

        for (int i = 0; i < _st.length(); i++)

            if (_st.charAt(i) == c) {
                return i;
            } 

        return -1;

    }

Надеюсь, это поможет!

1 голос
/ 13 июня 2011

То, что происходит, это то, что он смотрит на первый символ, и, если он не совпадает, он немедленно возвращает -1 (и, следовательно, не продолжает циклически повторять символы, пока не найдет правильный).

Вам нужно возвращать -1, только если вы закончили цикл for и не нашли символ.Так должно быть:

public int whatIstheIndex(char c) {
    for (i = 0; i < _st.length(); i++) {
        if (_st.charAt(i) == c) {
            return i;
        }
    }
    return -1;
}
0 голосов
/ 13 июня 2011

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

0 голосов
/ 13 июня 2011

Вы всегда возвращаетесь после просмотра первого символа.Ваш тест не смотрит на других персонажей.Отладчик покажет вам это.Последний return i вызывается только если длина равна 0.

...