java - 构建所有可能字符串并找到特定字符串的代码无法按预期工作
问题描述
我试图解决的部分任务是构建所有可能的字母和空格组合。我试图找到一个特定的字符串,同时构建组合。我认为我很好地实施了解决方案,但我的测试告诉我并非如此。
我从数组中获取字符,并在 for 循环中从它们构建一个字符串,然后打印解决方案。当我构建了“1 个字符组合”的所有组合时,我将继续使用“2 个字符组合”。我有一个布尔值来检查 StringBuilder 的内容是否等于我要查找的给定字符串。我检查了,示例 String 确实构建了,但布尔值没有改变。
public static void main(String[] args) throws InterruptedException {
findString("rxc");
}
public static void findString(String string) {
boolean isFound = false;
String allChars = "abcdefghijklmnopqrstuvwxyz ";
char[] sequence = allChars.toCharArray();
int lengthOfExpression = 3;
//builder contains 3 whitespaces at the beginning
StringBuilder builder = new StringBuilder(" ");
int[] pos = new int[lengthOfExpression];
int total = (int) Math.pow(allChars.length(), lengthOfExpression);
for (int i = 0; i < total; i++) {
for (int x = 0; x < lengthOfExpression; x++) {
if (pos[x] == sequence.length) {
pos[x] = 0;
if (x + 1 < lengthOfExpression) {
pos[x + 1]++;
}
}
builder.setCharAt(x, sequence[pos[x]]);
}
pos[0]++;
if (builder.toString() == string) {
isFound = true;
}
System.out.println(builder.toString());
}
System.out.println(isFound);
}
预期的结果将是最后打印的“真实”。相反,我的结果如下:
//省略了很多组合行
r
s
t
u
v
w
x
y
z
错误的
解决方案
不要将字符串与 进行比较==
,.equals()
而是使用;所以对于你的代码:
更改if (builder.toString() == string)
为if (builder.toString().equals(string))
推荐阅读
- clojure - clojure:scheme 的 `set!` 的等价物是什么?
- regex - 从部分地址获取街道名称的最佳正则表达式
- c++ - 处理智能指针的错误
- protocol-buffers - 在 ESP-IDF 中使用 Google Protobuffers(C++)
- android - onActivityResult() 在我的代码中提供空数据以捕获图像并将其上传到 Firebase 存储
- android-intent - Flutter:通过flutter执行代码时未收到PendingIntents
- r - select rows that match condition in several columns
- javascript - window.confirm 对话框不允许元素样式更改完成应用。任何解决方法?
- html - 如何在不离开它的情况下将制表键事件保留在自己的 div 中
- typescript - TypeScript 又一个带有不存在键的“prop”函数