令牌上的语法错误' else',{expected

时间:2014-09-25 20:17:48

标签: java string if-statement input syntax

我对Java有点新,我试图用正确的字符串编写这个简单的程序,使其打印出“密码输入”,当输入其他内容时,它会说“密码错误”。但是它给了我这个错误,我不知道如何解决,它在令牌'else',{expected“

import java.util.Scanner; public class Main { public static void main(String[] args){ String code = ("1908"); Scanner s = new Scanner(System.in); String input; System.out.println("Please enter password!"); input = s.nextLine(); if(input==code) System.out.println("Password entered!"); } else { //<--- Syntax error on token 'else',{ expected System.out.println("Wrong password!"); } } }

2 个答案:

答案 0 :(得分:0)

在这一行if(input==code)上,您忘记添加左括号,只需将{添加到结尾即可。

所以看起来像

if(input==code) {
    System.out.println("Password entered!"); 
} else { 
    System.out.println("Wrong password!");
}

编辑评论

System.out.println("Password entered!");永远不会打印的原因是因为您使用的是==运算符。当==运算符用于比较对象时,它会检查对象是否引用内存中的相同位置。基本上它会检查对象名称是否引用了相同的内存位置。不应该使用==的示例就像

// Create two Strings with the same text "abc"
String obj1 = new String("abc");
String obj2 = new String("abc");

// Compare the two Strings
if (obj1 == obj2) {
    // Will never reach here and print TRUE
    System.out.println("TRUE"); 
} else {
    // Will always print FALSE
    System.out.println("FALSE"); 
}

上面的代码将始终打印FALSE,因为两个String对象并不位于内存中的同一位置 - 让我感到困惑!要说明何时使用==,请参阅下面的代码

// Create a new string object
String obj1 = new String("abc");
// Create another new string object but assign obj1 to it.
String obj2 = obj1; // obj1 and obj2 are now located in the same place in memory.

// Compare the two objects
if (obj1 == obj2) {
    // Will always print TRUE
    System.out.println("TRUE"); 
} else {
    // Will never print FALSE
    System.out.println("FALSE"); 
}

在上面的代码中,我们的两个对象位于内存中的相同位置,因此在比较每个对象的内存引用时,它们在某种意义上是相同的。

但显然你不想比较你想要比较每个对象包含的String值的对象的内存引用。所以你需要看的是equals()方法,我不会详细介绍这个方法,但它基本上比较了两个对象值而不是内存位置。看看下面的代码

// Create two Strings with the same text "abc"
String obj1 = new String("abc");
String obj2 = new String("abc");

// Compare the two String values using equals()
if (obj1.equals(obj2)) {
    // Will always print TRUE because the two string values
    // are equal/the same.
    System.out.println("TRUE"); 
} else {
    // Will never print FALSE
    System.out.println("FALSE"); 
}

因此,使用我们刚刚了解的==运算符和equals()方法,我们可以在您的代码中使用它,所以请尝试更改为

// Using equals because you want to compare the String values
// not the reference to memory location for each object
if(input.equals(code)) {
    // Should print true if input value is equal to code value.
    System.out.println("Password entered!"); 
} else { 
    System.out.println("Wrong password!");
}

如果您还有问题,请发表评论,希望这有帮助。

答案 1 :(得分:0)

您没有使用{在if()中打开'true'子句,因此当遇到} else时,}实际上会终止整个if() if (...) { ... } else { ... } if (...) ... else { ... } 1}}

它应该是以下任何一种:

{{1}}