首页 > 解决方案 > Java for 循环索引:“j”不是在我的索引的一个循环之后从我的 char 数组的开头开始:“i”

问题描述

我对这段代码有疑问,起初它在找到第一次出现时运行良好,但是当发现第二次出现时,它表示字符串中没有类似的字符,我认为这是因为在第二个字母“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:<)()([()()(((((](>

标签: javaarraysloopsfor-loopindexing

解决方案


问题是您在循环中更改了 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;
  }

推荐阅读