java - 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:<)()([()()(((((](>
解决方案
问题是您在循环中更改了 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;
}
推荐阅读
- c# - .NET Core NUnit 上的单元测试失败
- android - 不要在 Motion Layout 的可点击子项上滑动
- c - x86-64 内核在设置 IDT 时崩溃
- sql-server - 在 SQL Server 中的例行操作期间在 DB 上搜索
- ansible - Ansible aws_ec2 插件多个私有 ip
- apache - 如何配置本地代理以发送自定义标头请求?
- firebase - 在使用 Firebase 身份验证时,密码是否已经加密?
- sql-server - 在文本 SQL Server 迁移文件中安全地包含敏感值
- .net - Kubernetes 配置:指定不同的服务帐户
- react-native - 在 React Native 中,模态不会旋转到横向屏幕?