Нужна помощь: что-то не работает прямо в моем цикле.Я считаю, что результат + строка результата вызывает проблемы? - PullRequest
0 голосов
/ 11 февраля 2019

Я делаю это конкретное упражнение здесь: Вопрос: Если задана непустая строка и int N, вернуть строку, созданную начиная с char 0, изатем каждый N-й символ строки.Поэтому, если N равно 3, используйте char 0, 3, 6, ... и так далее.N равно 1 или более. Например: EveryNth ("Чудо", 2) → "Mrce"

Мой код:

public String everyNth(String str, int n) {
  int a = 0; String result= ""; 

  for (int i=0;i<str.length();i++) {
    if (str.charAt(i) % n == 0) { 
      result = result + str.charAt(i);
    a++; 
  }  
 }
  return result;
}

Я могу 't выяснить, как исправить мой код, исходя из моего плана: 1. Переместить результат в результат String 2. Запустить цикл и перемещать данные только в том случае, если модульное значение = 0

Но вместо получения Mrce , я получаю rl Мне не нужно более простое решение, я просто хочу понять, что происходит неправильно и как заставить его работать.

Упражнение Ref: https://codingbat.com/prob/p196441

1 Ответ

0 голосов
/ 11 февраля 2019

Я не знаю, как вам посоветовать, не сказав вам ответа, что довольно просто.Вы хотите каждый n-й символ.Таким образом,

if (str.charAt(i) % n == 0) { 

должно быть просто

if (i % n == 0) {

Только с этим изменением (и вашим предоставленным вводом) я получаю (как и ожидалось)

Mrce

Тем не менее, мы можем действительно сделать это проще, увеличивая на n на каждой итерации цикла.Таким образом устраняется необходимость проверки, если i делится на n.Мы также можем сделать метод static.И я бы предпочел StringBuilder.Мол,

public static String everyNth(String str, int n) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < str.length(); i += n) {
        sb.append(str.charAt(i));
    }
    return sb.toString();
}
...