2015-02-01 11 views
-2

저는 간단한 텍스트 기반의 rpg를 만들고 있습니다. 이 오류가 발생합니다 : "illegal start of expression". String 적으로부터 public 수정자를 제거하면 불법적 인 표현 오류를 수정하지만 두 개의 "cannot find symbol" 오류가 발생합니다.public string (불법적 인 표현식)을 선언 할 수 없습니다.

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 
+4

로컬 변수를 public으로 선언하면 어떻게한다고 생각하십니까? –

답변

1

액세스 한정자 (public, privateprotected)의 분야에 응용 (및 방법, 및 클래스) 될 수있다. 그것은 의미가 없으므로 지역 변수에 적용 할 수 없습니다.

로컬 변수는 선언 후에 아무 곳에서나 선언 할 수 있습니다. 익명 클래스와 람다 식 (특수 규칙이있는 경우)을 제외하고는 로컬 변수에 선언 된 블록에서 액세스 할 수 있습니다.

0

컴파일러는 public 키워드를 어떻게 처리해야하는지 알지 못합니다. visibility 키워드가 쓸모 없도록 지역 변수를 선언하고 있습니다. 또한 null 또는 뭔가 초기화해야합니다.

0

은 클래스가 아닌 함수입니다. 함수 내에서 변수에 지시자를 사용하면 안됩니다.
클래스 멤버에 'public'을 사용하는 경우 외부에서 공개 여부를 지정할 수 있습니다.
그러나 함수 내부의 변수 범위는 함수 내에 있습니다. 외부에서는 보이지 않습니다.

전투()는 (인스턴스의) 표시기가 필요합니다. 예 :

rat.battle(); 

마지막으로 rpggame 클래스에는 '적'이라는 입력란이 없습니다.
rpggame 클래스 내에 필드가 필요할 수 있습니다. 예 :

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