为什么我的代码告诉我初始化已经初始化的变量?

时间:2015-07-30 09:37:13

标签: java variables initialization

我有以下代码:

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已经初始化。

10 个答案:

答案 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作为一个论点,你再次宣布