java - 我没有发现我的代码检查字谜字符串的错误
问题描述
如果字符串一个是另一个字符串的字谜,我必须编写一个应该测试的代码。但是我的代码不起作用。结果我每次都是假的。谁能解释我的错误在哪里?
public boolean anagram (String s1, String s2) {
count = 0;
for(int i = 0; i !=-1; i++) {
if(s1.indexOf(s2.charAt(i)) != -1) {
count++;
temp = Integer.toString(s1.indexOf(s2.charAt(i)));
s1.replace(temp,"");
} if(count+1 == s1.length())
return a == true;
}
return a == false;
解决方案
尝试这样的事情:
public boolean anagram (String s1, String s2) {
int count = 0;
boolean a = false;
for (int i = 0; i < s2.length(); i++) {
int s1index = s1.indexOf(s2.charAt(i));
if (s1index != -1) {
count++;
s1 = s1.replaceFirst(String.valueOf(s1.charAt(s1index)),"");
}
}
if ((count == s2.length()) && (s1.length() == 0))
a = true;
return a;
}
基本上测试应该在函数末尾和for
循环外完成,并且您希望返回 的布尔值a
,而不是的布尔值a == true
(应该始终是false
,因为从未在您的代码中a
分配值) true
.
编辑:我在最初的答案中纠正了两个错误,并添加了希望消除多次出现字母问题的代码(这就是为什么我的第一个答案在某些情况下不起作用的原因)。此代码修改s1
字符串 - 如果您不希望这样做,只需s1temp = s1;
在函数的开头执行并替换s1
为s1temp
函数的其余部分。该代码还使用字符串的replaceFirst()
方法 - 因为据我所知,该replace
方法会删除所有出现的字母,但是您可以切换到从字符串中删除字符的其他替代方法(有关详细信息,请参阅此问题)。顺便说一句,您的temp
方法错误地尝试替换索引一个字符,而不是实际字符,更不用说测试在从 0 开始递增的循环中i !=-1
毫无意义。for
i
注意:您可以在此处(在线 Java 编译器)验证它是否正常工作(每个步骤都打印在屏幕上)。
推荐阅读
- sql - 无法创建具有相同名称但条件不同的临时表
- google-cloud-platform - GCP:通过对等连接到 CloudSQL 实例
- xml - 在 xmltable 中使用“字符串连接”时出错
- swift - UITableView with custom cells empty
- python - plt.show(block=True) 启动黑色图
- spline - 是否可以在 gnuplot 中的曲线的两端使样条曲线连续且平滑
- python - 我用 python 编写的退出函数在 Ubuntu 上不起作用(以 exe 形式)
- vue.js - Vue.js 按键事件 Up、Down、Enter 来控制选择
- azure - azure key Vault 是否支持常规文本文件?
- html - 如何在 Jquery Mobile 中的另一个弹出窗口上弹出窗口?