public class findMatching {
public static void main(String[] args) {
String matchOne = "caTch";
String matchTwo = "cat";
findMatching(matchOne, matchTwo);
}
public static void findMatching(String matchOne, String matchTwo) {
int lengthOne = matchOne.length();
int lengthTwo = matchTwo.length();
char charOne;
char charTwo;
while(!matchOne.equals(matchTwo)) {
for(int i = 0; i < lengthOne && i < lengthTwo; i++) {
charOne = matchOne.charAt(i);
charTwo = matchTwo.charAt(i);
if(charOne == charTwo && lengthOne >= lengthTwo) {
System.out.print(charOne);
} else if (charOne == charTwo && lengthTwo >= lengthOne){
System.out.print(charTwo);
} else {
System.out.print(".");
}
}
}
}
}
我创建了一个名为 findMatching 的静态方法,该方法接受两个String参数,然后将它们比较以匹配字符。如果检测到匹配的字符,它将打印所述字符,而不匹配的字符将用“。”表示。代替。
EX:对于
caTch
和cat
,预期输出应为ca...
,其中不匹配的字符用“。”表示。在较长的字符串中。
但是,现在,我的程序的输出仅打印出ca.
,因为它仅打印较短字符串的不匹配字符。我相信问题的根源可能在于我的 lengthOne 和 lengthTwo 的if语句的逻辑。
答案 0 :(得分:0)
第一个for
循环可打印所有常见和不常见(“。”)字符,第二个for
循环可打印不常见字符(“。”)直到使用大和小字符串之间的差异绝对(abs)函数
代码:
for(int i = 0; i < lengthTwo && i < lengthOne; i++){
if(matchOne.charAt(i) == matchTwo.charAt(i)){
System.out.print(matchOne.charAt(i));
}
else{
System.out.print(".");
}
}
for(int j = 0; j < java.lang.Math.abs(lengthOne - lengthTwo);j++){
System.out.print(".");
}
答案 1 :(得分:0)
当您遇到i < lengthOne && i < lengthTwo
时,只要遇到较短字符串的长度,您的for循环将终止。因此,您需要继续循环,直到到达较长的字符串的末尾为止,但是当较短的字符串中的字符不足时,请停止比较。
这样的事情就能完成
public static void findMatching(String matchOne, String matchTwo) {
int lengthOne = matchOne.length();
int lengthTwo = matchTwo.length();
char charOne;
char charTwo;
for(int i = 0; i < lengthOne || i < lengthTwo; i++) {
if(i < lengthOne && i < lengthTwo) {
charOne = matchOne.charAt(i);
charTwo = matchTwo.charAt(i);
if (charOne == charTwo) {
System.out.print(charTwo);
} else {
System.out.print(".");
}
} else {
System.out.print(".");
}
}
}
我不确定while循环的意义是什么会使程序永远运行,但是也许您希望将其作为if?