Java для индекса цикла: "j" не начинается с начала моего массива char после одного цикла моего индекса: "i" - PullRequest
0 голосов
/ 05 октября 2019

У меня есть проблема с этим кодом, в начале он работает хорошо, когда он обнаружен в первый раз, но когда он найден во второй раз, он говорит, что в строке нет похожего символа, я думаю, потому что во второй букве"p" он не понимает, что у него есть другой "p" в начале массива.

Некоторая помощь, чтобы решить это, пожалуйста?!

Спасибо.

Вот мой код

public class DuplicateEncoder {
    static String encode(String word){
    word = word.toLowerCase();
    char[] c = word.toCharArray();
    //")"
    char close = 41;
    //"("
    char open = 40;
    for (int i = 0; i < c.length; i++) {
      int count = 0;
      for (int j = 0; j < c.length; j++) {
        if(c[i] == c[j]) {
          count++;
        }
      }
      if(count > 1){
        c[i] = close;
      }
      else if (count == 1){
        c[i] = open;
      }
    }
    String string = new String(c);
    return string;
  }
}

Вот этот тест

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;


public class DuplicateEncoderTest {
    @Test
    public void test() {
      assertEquals(")()())()(()()(",
            DuplicateEncoder.encode("Prespecialized"));
      assertEquals("))))())))",DuplicateEncoder.encode("   ()(   "));
    }
}

Вот мой неправильный результат

expected:<)()([))()(()()](> but was:<)()([()()(((((](>

1 Ответ

0 голосов
/ 05 октября 2019

Проблема в том, что вы изменяете значения массива char, равного c, в то время как находитесь в цикле.

Изменение кода на это решит вашу проблему:

static String encode(String word){
    word = word.toLowerCase();
    char[] c = word.toCharArray();
    char[] d = word.toCharArray();
    //")"
    char close = 41;
    //"("
    char open = 40;
    for (int i = 0; i < c.length; i++) {
      int count = 0;
      for (int j = 0; j < c.length; j++) {
        if(c[i] == c[j]) {
          count++;
        }
      }
      if(count > 1){
        d[i] = close;
      }
      else if (count == 1){
        d[i] = open;
      }
    }
    String string = new String(d);
    return string;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...