Как ограничить "one" тремя символами?
Почти правильно, только сигнатура GetSubString у Вас какая? string GetSubString (string request)? А должна быть?
Подсказки
* добавить в код вспомогательный метод выделения из строки-источника определённого количества символов в строку начиная с определённой позиции
* private static string GetSubString(string source, int startPosition, int length)
* не забудьте про проверку индекса
Я пока "подправлю" Ваш метод. Как цикл работает Вы поняли, это уже хорошо.
Итак
В Вашем коде Вы "вытаскиваете" последовательно символы и сохраняете их в буфер - это то что нам нужно. Только
1. Вытаскивать надо из request, который передаётся в метод в качестве параметра source
2. Сколько? 3 символа, значит цикл должен рабоать только 3 раза
дальше коменты в коде
private static string GetSubString(string source, int startPosition, int length)
{
string rus = ""; // а для вытаскивания японских этот метод разве не подойдёт? ну ладно пусть будет rus
// string b = "рус"; // это к чему? выкидываем нафик
for (int i = 0; i < b.Length; i++) // почему с 0? стартовая позиция передаётся в метод в качестве параметра -> startPosition
// конечное условие? длина последовательности -> length, но нам нужен индекс символа, совершенно очевидно, что если мы начнём "вытаскивать" с 5-ой позиции, то условие 5 < 3 будет изначально ложно, и цикл не выполнится ни разу
// что надо сделать? пересчитать индекс символа с учётом стартовой позици. Логика: получить 3 символа, начиная с пятой позиции, значит какие индексы нам нужны? 5,6,7 или?
{
char ch = request[i];
rus = rus + ch;
}
return rus;
}
Вот и всё... Уже можно работать, НО опасно. А что если метод будет вызван со стартовым индексом 134? Я уже говорил, что доступ к не существующим индексам приведёт к обрушению программы. Значит, перед тем как его запускать
надо проверить стартовое и... конечное значение. Ведь если в метод будет передан индекс последнего символа, то на втором шаге индек будет больше количества элементов в строке.
Это делается простыми известными Вам
if-ами
Внимательно посмотрите, ниже Вы же сами написали в методе HasRUS:
// последовательность для проверки = Получить из запроса последовательность
длиной 3 символа, начиная с
текущей позиции string keySequence = GetSubString(request,
i,
3);
i - это и есть "текущая" позиция, знчение этой переменной изменяется в цикле, те на первом шаге метод GetSubString будет вызван с параметрами:
GetSubString(request,
0,
3);
GetSubString(request,
1,
3);
GetSubString(request,
2,
3);
и тд
Вспомним
пример из описания алгоритмаЭто как раз и даёт нам:
Поскольку мы не знаем, в каком месте они находятся, необходимо "пробежать" по всей строке
0 Пок
1 ока
2 каж
3 ажи
4 жи
5 и р
6 ру
7 рус
8 уск
и тд
Таким образом Ваша реализация метода не получает необходимой информации. Она получает только источник = все символы запроса, это правильно. Но,
1. она должна вытаскивать только 3. Можно эти 3 забить жёстко, тогда цикл будет выглядеть так for (int i = 0; i < 3; i++), но это снизит гибкость логики. А если нам потребуется вытаскивать не 3, а 2,4,5... Поэтому лучше передавать длину в качестве параметра.
2. цикл начинается всегда с 0, те сколько бы этот метод не вызывали, он ВСЕГДА будет возвращать только ПЕРВЫЕ три символа. Значит ему надо сообщить дополнительно, с какой позиции надо вытаскивать эти три символа: с нулевой, первой, второй и тд
Добавлено через 3 минуты и 15 секунд:Как остановить цикл, когда в переменную попадет нужное значение? Или опять не то делаю Я?
В данном случае речь не идёт о "нужном" значении. Или я не понимают что Вы имеете ввиду? Этот метод тупо должен вытаскивать запрошенное количество (в нашем случае 3) символов из переданной в него строки.
Всё. Что это за символы ему по барабану. Анализ не является задачей этого метода.