我要创建一个检查拼写的方法。
要求用户输入一个单词,该单词存储在str
中。字典中的单词存储在word
中,但是我遇到了问题。我没有设法让这段代码工作。
如果可以从str
中删除其中一个字母(用户输入的字符串),以便它与字典中的单词相同,则该方法应返回true
。
例如,如果用户输入字符串“appple”
该方法将返回单词“apple”
的true
。
//You neeed to complete this method. The method should return
//true, if a letter is deleted from any place of str (the user entered)
//it becomes the word (a word from the dictionary).
public static boolean oneAdditionalLetter(String word, String str) {
if (str.length() <= word.length() && str.length() == word.length() + 2)
return false;
char temp1;
char temp3;
for(int i = 0; i < str.length() - 1; i++){
temp1 = str.charAt(i);
temp3 = word.charAt(i);
if(temp1 == temp3)
return true;
}
return false;
}
据我了解您的任务,您需要找出两个字符串的长度是否相差,一个字符串除了一个字符串之外具有所有相同的字母。
为此,首先您需要检查字符串长度是否满足要求,然后通过迭代其索引并根据字典中的字符串字符检查其字符来验证给定字符串。
用于验证长度的条件不正确。
str.length() <= word.length() && str.length() == word.length() + 2
给定字符串的长度是一个不同的值,它可以小于或等于word.length()
或等于word.length() + 2
。但不能两者兼而有之,因此这种情况总是false
.
要修复它的逻辑和&&
需要替换为逻辑或||
,在第二部分中==
您必须应用>=
来caver整个可能的无效大小范围。它可以简化为
str.length() != word.length() + 1
为了验证给定字符串的内容,您需要引入一个boolean
标志,指示找到两个字符串不同的字母。
如果标志设置为true
(即发现不匹配),则需要通过在给定字符串的索引中添加+1
来应用shift,同时检查两个字符串的字符相等性,因为不应考虑单个不匹配的字符。如果遇到第二个不匹配,则给定的字符串被视为无效- 方法立即返回false
。
仅当给定字符串的所有字符都成功与字典中的字符串字符进行检查时,它才被证明是有效的(仅包含一个不匹配的字符)。因此,循环后return
语句产生true
。
public static boolean hasOneAdditionalLetter(String word, String str) {
if (str.length() != word.length() + 1) {
return false;
}
boolean mismatchFound = false;
for (int i = 0; i < str.length() - 1; i++) {
if (!mismatchFound) {
if (str.charAt(i) != word.charAt(i)) {
mismatchFound = true; // first mismatch was found
}
} else if (str.charAt(i + 1) != word.charAt(i)) { // because mismatch was already found shift i + 1 is used
return false; // there's more than mismatch
}
}
return true; // all letter apart from one are the same
}
public static void main(String[] args) {
System.out.println(hasOneAdditionalLetter("apple", "appple")); // true
System.out.println(hasOneAdditionalLetter("horse", "hhorse")); // true
System.out.println(hasOneAdditionalLetter("apple", "applet")); // true
System.out.println(hasOneAdditionalLetter("mountain", "mounYtain")); // true
System.out.println(hasOneAdditionalLetter("fiz", "baz")); // false
}
输出
true - "apple", "appple"
true - "horse", "hhorse"
true - "apple", "applet"
true - "mountain", "mounYtain"
false - "fiz", "baz"
旁注:方法名称通常包含一个动词,因为它们是用来表示动作(get
、put
、compute
、remove
等),方法返回一个传统上以is
或has
开头的boolean
值。
你得到true
的原因是 if 语句中的返回,它只是结束函数并在第一个测试用例返回true
这是真的。 例如,如果用户输入的字符串是"appple",则该方法将为单词"apple"返回true,该函数将在选中"a"后返回。 要使其工作,请修改 if 语句以在找到不匹配的字母时返回 false,并将函数本身修改为在末尾返回 true。