JAVA 此处不允许声明变量

JAVA Variable declaration not allowed here

我收到一个错误 "Variable declaration not allowed here",我不知道为什么,我是 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");

  }
}

string必须改为String.

通过编写 int score,您试图声明一个已经存在的新变量,您之前已经声明过该变量。只需删除 int 部分,您将获得所需的分配。

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

A local variable, one of the following
*A local variable declared in a block
*A local variable declared in a for statement

此外,您已经在上面声明了一个名为 score 的变量。即使你删除了那个声明,你也会因为上述原因得到错误。

int score = 1; 更改为 score = 1;

解释:

我们使用

声明变量
someType variable;

为我们使用的变量赋值(或更改)值

variable = value;

我们可以将这些指令混合成一行,例如;

someType variable = value;

所以当你这样做时

int score = 1;

你先声明变量score,然后给它赋值1

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

int x = 1;
int x = 2;
System.out.println(x)

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

同样

int x = 1;
{
    int x = 2;
    System.out.println(x)
}

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

int x = 1;
//..
x = 2;//change value of x to 2

现在是混淆部分 - 作用域的时候了。您需要了解变量有一些可以使用的地方。这个区域称为作用域,用 { } 方括号括起变量声明。所以如果你创建像

这样的变量
{
    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

因此,由于

等地方的范围限制声明
if (condition)
    int variable = 2;
else
    int variable = 3;

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

if (condition){
    int variable = 2;
}else{
    int variable = 3;
}

因此无法在任何地方访问此变量。

如果忘记括号,也可能会出现“JAVA此处不允许声明变量”。这是因为变量需要声明一个明确的范围。

在我的例子中,我忘记了我的 OUTER 周围的括号 - for 方法内部的循环 这给了我同样的错误。

public static void InsertionSort(int[] list){
        for (int i = 1 ; i < list.length ; i++)

            double currentValue = list[i];
            int k;
            for (k = i - 1 ; k >= 0 && list[k] > currentValue ; k--){

                list[k+1] = list[k];
            }

            // Insert the current element
            list[k+1] = currentValue;

        System.out.println("The sorted array is : "+Arrays.toString(list));
    }