我无法解决此问题。我必须创建一个名为cercaCarattere的方法,该方法接受输入的两个字符串,将它们进行比较,如果找到一个字符(第一个,对应的字符),则必须返回它,否则必须返回“ *”。另外,基本上,我必须循环读取两个字符串,直到方法返回的字符和第一个字符串的最后一个字符不同为止。
这是我编写的代码
public class prova {
public static char cercaCarattere(String str1, String str2) {
boolean isCommon = false;
char letter;
for(int i=0; i<str1.length() && i<str2.length(); i++) {
if(str1.charAt(i) == str2.charAt(i)) {
isCommon = true;
letter = str1.charAt(i);
} else {
isCommon = false;
letter = '*';
}
}
return letter;
}
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
String str1, str2;
System.out.println("Inserire la stringa");
str1 = stdin.nextLine();
System.out.println("Inserire la stringa");
str2 = stdin.nextLine();
cercaCarattere(str1, str2);
}
在该方法中,我想编写一个for来读取两个字符串并检查每个字符是否都相同,如果是,则返回它,但是返回结果给我一个错误,因为说“ letter”未初始化。我该怎么解决?
我不能使用哈希集,数组或其他。
答案 0 :(得分:2)
进行以下两项更改:
在您的cercaCarattere()
中,找到第一个匹配项后,您就可以早日返回。方法也可以简化为:
public static char cercaCarattere(String str1, String str2) {
char letter = '*';
for (int i = 0; i < str1.length() && i < str2.length(); i++) {
if (str1.charAt(i) == str2.charAt(i)) {
return str1.charAt(i);
}
}
return letter;
}
然后,通过方法使用值 returned 将其打印出来
System.out.println(cercaCarattere(str1, str2));
答案 1 :(得分:0)
Ciao Andrea,该代码无法正常工作,因为:
letter = str1.charAt(i);
之后返回isCommon
,因为您不使用它代码变成了:
public static char cercaCarattere(String firstString, String secondString) {
char letter = '*';
for (int i = 0; i < firstString.length() && i < secondString.length(); i++) {
if (firstString.charAt(i) == secondString.charAt(i)) {
return firstString.charAt(i);
}
}
return letter;
}
答案 2 :(得分:0)
Java 8流解决方案:
char
public static char cercaCarattere(String str1, String str2) {
return IntStream.range(0, Math.min(str1.length(), str2.length()))
.filter(i -> str1.charAt(i) == str2.charAt(i))
.mapToObj(str1::charAt)
.findFirst()
.orElse('*');
}
char
: public static char cercaCarattere(String str1, String str2) {
return str1.chars().mapToObj(c1 -> (char) c1)
.filter(c1 -> str2.chars().mapToObj(c2 -> (char) c2).anyMatch(c2 -> c1 == c2))
.findFirst()
.orElse('*');
}
答案 3 :(得分:-1)
以这种方式,即使编译器没有抱怨变量,编写代码也不会执行任务。编译器吐出该错误的原因是,如果两个字符串的长度均为零,则letter
实际上保持未初始化状态。第二个问题是,一旦找到匹配项,您应该中断循环,但是代码没有。正确的方法是这样:
char letter = '*';
for(int i=0; i<str1.length() && i<str2.length(); i++) {
if(str1.charAt(i) == str2.charAt(i)) {
letter = str1.charAt(i);
break;
}
}
return letter;