JAVA Variable declaration not allowed here

折月煮酒 提交于 2019-11-27 07:32:54

问题


I get an error "Variable declaration not allowed here" and I don't know why, I'm new in java and can't find answer :/ As it says, I can't make "int" in "if" but is there a way to create it?

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");

  }
}

回答1:


string must be changed to String.

By writing int score you're trying to declare a new variable that already exists, which you declared before already. Just remove the int part and you will get the assignment you want.




回答2:


As per Java spec, You cannot declare a local variable when there is no scope. While declaring int score = 1 in if, there is no scope. 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

Also you have already declared a variable named score above. Even if you remove that declaration, you'll get the error because of the above reason.




回答3:


Change int score = 1; to score = 1;.

Explanation:

To declare variable we use

someType variable;

To assign (or change) value to variable we use

variable = value;

We can mix these instruction into one line like;

someType variable = value;

So when you do

int score = 1;

you first declare variable score and then assign 1 to it.

Problem here is that we can't have two (or more) local variables with same name in same scope. So something like

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

is incorrect because we can't decide which x we should use here.

Same about

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

So if you simply want to change value of already created variable use only assignment, don't include declaration part (remove type information)

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

Now it is time for confusing part - scope. You need to understand that variable have some are in which they can be used. This area is called scope, and is marked with { } brackets which surrounds declaration of variable. So if you create variable like

{
    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

So because of that scope limitation declarations in places like

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

are incorrect because such code is equal to

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

so this variable couldn't be accessible anywhere.




回答4:


Having same name variable declared and initialized in the same scope is not permitted and hence you are seeing the problem.

You should just have it declared once and then reassign new value to it.

     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"))
        score = 1; // No need to Declare score again here
     else
         System.out.println("Wrong answer");

  }


来源:https://stackoverflow.com/questions/31230722/java-variable-declaration-not-allowed-here

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!