我有以下代码:
public String palindrome(String str)
{
String str, reverse = "";
Scanner in = new Scanner(System.in);
int length = str.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + str.charAt(i);
if (str.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
return "";
}
它有一个init()
方法,可以在角色“p'是键入的,它是检查当前字符串是否是回文。
然而,当我编译它时,行中有一个错误:
String str, reverse = "";
错误表明该变量可能尚未初始化。但是,当我初始化它时,会出现另一条错误消息,指出str
已经初始化。
答案 0 :(得分:2)
您有str
个重复,一次作为参数,一次作为局部变量。除此之外......
String str, reverse = "";
...使用""初始化reverse
,但不是str
:
String str, reverse = "";
System.out.println(str); // error here "The local variable str may not have been initialized"
但是...
String str = "", reverse = "";
System.out.println(str); // works fine
答案 1 :(得分:1)
String str, reverse = "";
这意味着反向=""并且str不是初始化
String str = "" , reverse = "";
答案 2 :(得分:1)
您正试图声明str两次
public String palindrome(String str)
String str, reverse = "";
几乎可以肯定你不打算这样做。改变它:
String reverse = "";
这是第二次没有初始化的str
答案 3 :(得分:1)
您应该初始化方法中的所有局部变量。您没有在程序中初始化变量str。 你应该写得像
String str =“”,reverse =“”;
答案 4 :(得分:0)
请注意,在函数参数中,您还有一个str
。
变量str已经在方法palindrome(String)中定义
str
或本地变量str
或str
的参数足够以获取所需的功能。另外,请考虑以下声明:
String str, reverse = "";
字符串str
未初始化,但只有reverse
初始化为""
(空字符串)。
您可以使用:
String str="", reverse = "";
为什么在同一个函数中打印的返回类型为String
?另外,请注意,在任何一种情况下都只返回""
。
public String palindrome(String str)
{
String strTmp = "", reverse = "";
Scanner in = new Scanner(System.in);
int length = str.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + str.charAt(i);
if (str.equals(reverse)){
strTmp = str;
System.out.println("Entered string " + str + " is a palindrome.");
}
else
System.out.println("Entered string " + str + " is not a palindrome.");
return strTmp;
}
答案 5 :(得分:0)
编译器很困惑。看看你的代码:
public String palindrome(String str)<-------- str as parameter
{
String str, reverse = ""; <-------- str as local variable [Also Not Initialized]
Scanner in = new Scanner(System.in);
int length = str.length(); <------------ Which str??? parameter or local Variable???
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + str.charAt(i);
if (str.equals(reverse)) <------------ Which str??? parameter or local Variable???
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
return "";
}
更改本地变量或参数的名称并相应地使用。
答案 6 :(得分:0)
此错误是因为您的参数变量和局部变量相同。所以str.length
是局部变量。
只需将局部变量更改为String str1=""
或String str=""
你没有发现任何错误。
答案 7 :(得分:0)
重命名局部变量或回文方法的参数str。
public static void main(String[] args) {
palindrome("hello");
}
public static String palindrome(String palindromeValue) {
String str = palindromeValue, reverse = "";
// Scanner in = new Scanner(System.in);
int length = str.length();
for (int i = length - 1; i >= 0; i--) {
reverse = reverse + str.charAt(i);
}
if (str.equals(reverse)) {
System.out.println("Entered string is a palindrome.");
} else {
System.out.println("Entered string is not a palindrome.");
}
return "";
}
答案 8 :(得分:0)
当您在函数本身中打印值时,您不需要
String
return type
。
将方法声明更改为void
public void palindrom(String str)
您的String
str
已在参数中定义。
无需再次定义,只需使用它即可。
public void palindrome(String str)
{
String reverse = "";
int length = str.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + str.charAt(i);
if (str.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
}
如果我再次声明字符串会发生什么
public void palindrome(String str)
{
String str, reverse = "";
}
此处重新定义了您的str
变量。参数值与相同的名称冲突,您的程序不会编译。
答案 9 :(得分:-1)
你得到str作为一个论点,你再次宣布