2012-08-06 96 views
3

我试图调试的代码的一部分用于分配(我还是很新到Java),并通过许多资源梳理解决这一冲突,但仍不能完全解决它出。Java错误,重复的局部变量

public static void main(String [] args){ 
    Scanner keyboard = new Scanner(System.in); 
    String input = null; 
    do 
    { 
     System.out.println("Enter 'A' for option A or 'B' for option B."); 
     String input = keyboard.next(); 
     input.toLowerCase(); 
     input.charAt(0); 
    } 
    while ((input != "a") || (input != "b")); 
} 

我总是得到一个重复的局部变量错误与输入字符串。

任何帮助将不胜感激!

回答

1

Yoy've复制String input声明。一次就够了。

+0

感谢帮助,欢呼声 – Ryan 2012-08-07 05:00:30

12

input = keyboard.next(); 

更换

String input = keyboard.next(); 

如果你把一个String变量名之前,它是一个宣言。而且你可以在一个范围内只声明一次变量名。

+0

感激的帮助,感谢 – Ryan 2012-08-07 04:45:02

+0

我不明白的Java。内部'输入'不应该在块范围内。外部'输入'在main()块中。他们为什么属于同一个范围? – 2017-06-20 10:16:43

0
public static void main(String [] args){ 
    Scanner keyboard = new Scanner(System.in); 
    String input = null; 
    do 
    { 
     System.out.println("Enter 'A' for option A or 'B' for option B."); 
     input = keyboard.next(); 
     input.toLowerCase(); 
     input.charAt(0); 
    } 
    while ((input != "a") || (input != "b")); 
} 

问题是你在do{}里再次声明输入。 所以它应该只是

input=keyboard.next();

4

声明该input变量的两倍。你需要改变这一行:

String input = keyboard.next(); 

这样:

input = keyboard.next(); 

此外,此代码将最有可能无法正常工作:

((input != "a") || (input != "b")) 

在Java中,字符串所使用的比较.equals()方法,所以此行:

((input != "a") || (input != "b")) 

个需要改变这样:

((!input.equals("a")) || (!input.equals("b"))) 
+0

有趣。我想,任何时候'{}'使用新范围创建这样就可以让要创建两个输入字符串。情况并非如此? – 2012-08-06 07:16:09

+0

@答案:*问题*是当嵌套作用域时,如上所述,在外部作用域内声明的变量仍然在内部作用域中可见。这会导致编译器混淆,因为就其而言,变量已经存在。你可以这样做:'{... {String str = ...} ... String str = ...'。这应该工作,但。 – npinti 2012-08-06 07:20:14

+0

感谢您的解释:) – 2012-08-06 07:39:05

0

声明该input变量的两倍。在main方法内部只声明input一次。使用内do {}下面的代码:

input = keyboard.next(); instead of String input = keyboard.next(); 
0

据我所知,这是不是你隐藏的变量。

这里是我的意思

private static String input = null;  
public static void main(String [] args){ 
    Scanner keyboard = new Scanner(System.in); 
    do 
    { 
     System.out.println("Enter 'A' for option A or 'B' for option B."); 
     String input = keyboard.next(); 
     input.toLowerCase(); 
     input.charAt(0); 
    } 
    while ((input != "a") || (input != "b")); 
}