这里不允许使用JAVA变量声明

The*_*XDX 1 java variables int if-statement declaration

我得到一个错误"这里不允许变量声明",我不知道为什么,我是java的新手并且找不到答案:/正如它所说,我不能在"if"中创建"int"但是有没有办法创造它?

import java.io.PrintWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;import java.util.Scanner;
 public class test{
  public static void main(String[] args) throws FileNotFoundException{
    File plik = new File("test.txt");
    PrintWriter saver = new PrintWriter("test.txt");

     int score = 0;
     System.out.println("Q: What's bigger");
     System.out.println("A: Dog B: Ant");
     Scanner odp = new Scanner(System.in);
     string odpo = odp.nextLine();

     if(odpo.equals("a"))
        int score = 1;
     else
         System.out.println("Wrong answer");

  }
}
Run Code Online (Sandbox Code Playgroud)

bar*_*kur 14

根据Java规范,当没有范围时,您不能声明局部变量.在声明int score = 1if的同时,没有范围.http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html

局部变量,以下之一
*块中
声明的局部变量*在for语句中声明的局部变量

您还已经声明了一个名为score上面的变量.即使您删除该声明,由于上述原因,您也会收到错误.


Psh*_*emo 5

改成。int score = 1;score = 1;

解释:

我们使用来声明变量

someType variable;
Run Code Online (Sandbox Code Playgroud)

为变量分配(或更改)值,我们使用

variable = value;
Run Code Online (Sandbox Code Playgroud)

我们可以将这些指令混合到一行中,例如:

someType variable = value;
Run Code Online (Sandbox Code Playgroud)

所以当你这样做时

int score = 1;
Run Code Online (Sandbox Code Playgroud)

您首先声明变量score,然后分配1给它。

这里的问题是我们不能在同一范围内有两个(或更多)具有相同名称的局部变量。所以像

int x = 1;
int x = 2;
System.out.println(x)
Run Code Online (Sandbox Code Playgroud)

是不正确的,因为我们无法决定x在这里应该使用哪个。

同样关于

int x = 1;
{
    int x = 2;
    System.out.println(x)
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您只是想更改已创建变量的值,请仅使用赋值,不要包含声明部分(删除类型信息)

int x = 1;
//..
x = 2;//change value of x to 2
Run Code Online (Sandbox Code Playgroud)

现在是时候混淆部分——范围了。您需要了解变量有一些可以使用它们的地方。该区域称为范围,并用{ }括号标记,包围变量的声明。所以如果你创建像这样的变量

{
    int x = 1;
    System.out.println(x); //we can use x here since we are in its scope 
}
System.out.println(x); //we are outside of x scope, so we can't use it here

int x = 2;
System.out.println(x); //but now we have new x variable, so it is OK to use it
Run Code Online (Sandbox Code Playgroud)

因此,由于像这样的地方的范围限制声明

if (condition)
    int variable = 2;
else
    int variable = 3;
Run Code Online (Sandbox Code Playgroud)

不正确,因为这样的代码等于

if (condition){
    int variable = 2;
}else{
    int variable = 3;
}
Run Code Online (Sandbox Code Playgroud)

所以这个变量无法在任何地方访问。