【问题标题】:Can't declare public String (illegal start of expression) [duplicate]无法声明公共字符串(表达式的非法开头)[重复]
【发布时间】:2015-02-01 14:06:55
【问题描述】:

我正在制作一个简单的基于文本的 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

【问题讨论】:

  • 你认为将局部变量声明为 public 应该怎么做?

标签: java regex


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      public static void main 
      

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

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

      rat.battle();
      

      最后,rpggame 类没有名为“enemy”的字段。
      您可能需要一个 rpggame 类中的字段。例如,

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2014-01-03
        • 2018-08-16
        • 2017-04-30
        相关资源
        最近更新 更多