无法声明公共字符串(非法启动表达式)

时间:2015-02-01 05:17:59

标签: java regex

我正在制作一个简单的基于文本的RPG。我收到此错误:"illegal start of expression"。当我从String敌人中删除public修饰符时,它修复了非法的表达式错误开始,但是会产生两个"cannot find symbol"错误。

import java.io.*;
import java.util.*;

public class rpggame {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    for(;;)//Character Creation
    {       
            //All the code here is irrelevant to my problem, removed for space
    }
        Enemy rat = new Enemy(5, 5, 5, 1);
        Enemy slime = new Enemy(5, 5, 5, 1);
        Enemy bat = new Enemy(5, 5, 5, 1);
        Enemy bunny = new Enemy(5, 5, 5, 1);

        System.out.println("Time to battle! What do you want to fight?\nA. Rat\nB. Slime\n C. Bat\n D.Bunny");
            String enemyChoice = input.next();
            public String enemy; //Error here
            enemy = null;

            switch(enemyChoice)
            {
                case "a":
                case "A":
                    enemy = "Rat";
                break;
                case "b":
                case "B":
                    enemy = "Slime";
                break;
                case "c":
                case "C":
                    enemy = "Bat";
                break;
                case "d":
                case "D":
                    enemy = "Bunny";
                break;
            }
            battle(); //When I remove the public modifier from enemy, I get "cannot find symbol" here.



}//end of main method



    public static class Enemy
        {
            public static int enemyDamage;
            public static int enemySpeed;
            public static int enemyDefense;
            public static int enemyLevel;

            Enemy(int Da,int Sp,int De,int Lv)
            {
                enemyDamage=Da;
                enemySpeed=Sp;
                enemyDefense=De;
                enemyLevel=Lv;
            }

            public void battle() {
                    System.out.println("You have encountered " + rpggame.enemy + " Level" + enemyLevel); //When I remove the public modifier from enemy, I get "cannot find symbol" here.
                }

        }}//Closing brace for rpggame

3 个答案:

答案 0 :(得分:1)

访问修饰符(publicprivateprotected)可以应用于字段(以及方法和类)。它们不能应用于局部变量,因为它没有任何意义。

本地变量可以在声明之后的任何地方访问,在块中声明它们,除了内部匿名类和lambda表达式(具有特殊规则)。

答案 1 :(得分:0)

编译器不知道如何处理public关键字。您正在声明一个局部变量,因此可见性关键字是无用的。您还应该将其初始化为null或其他内容。

答案 2 :(得分:0)

public static void main 

是一个函数,而不是一个类。 您不能在函数内使用变量指示器。
如果您对班级成员使用“公共”,则可以从外部指定其可见性 但是,函数内部的变量范围在函数内部。从外面看不到它。

battle()需要一个指示符(一个实例)。例如,

rat.battle();

最后,rpggame类没有名为'enemy'的字段。
您可能需要rpggame类中的字段。如,

public class rpggame {
private Enemy enemy;
public static void main(String[] args) {