2014-03-04 5 views
0

"세계는 최종 선언되어야합니다."라는 오류를 파악할 수 없습니다. 어떤 충고? 나는 gridworld 프로젝트 (일치하는 게임)를 만들고있다. 세그먼트배열을 마지막으로 만드는 방법은 무엇입니까?

최종적으로 필요합니다 ...하지만 마지막 world.get 등을 추가하는 것은 불법적 인 표현을 말합니다.

import info.gridworld.actor.ActorWorld; 
import info.gridworld.actor.*; 
import info.gridworld.grid.*; 
import info.gridworld.world.*; 



import java.awt.Color; 
import java.util.ArrayList; 

public class cardGameDriver extends ActorWorld 
    { 
    public static void main(String[] args) 
    { 
    World world = new World(); 
    world.show(); 

    world.add(new card1()); 
    world.add(new card1()); 
    world.add(new card2()); 
    world.add(new card2()); 
    world.add(new card3()); 
    world.add(new card3()); 
    world.add(new card4()); 
    world.add(new card4()); 
    world.add(new card5()); 
    world.add(new card5()); 
    world.add(new card6()); 
    world.add(new card6()); 
    world.add(new card7()); 
    world.add(new card7()); 
    world.add(new card8()); 
    world.add(new card8()); 
    world.add(new card9()); 
    world.add(new card9()); 
    world.add(new card10()); 
    world.add(new card10()); 
    world.add(new card11()); 
    world.add(new card11()); 
    world.add(new card12()); 
    world.add(new card12()); 
    world.add(new card13()); 
    world.add(new card13()); 
    world.add(new card14()); 
    world.add(new card14()); 
    world.add(new card15()); 
    world.add(new card15()); 
    world.add(new card16()); 
    world.add(new card16()); 
    world.add(new card17()); 
    world.add(new card17()); 
    world.add(new card18()); 
    world.add(new card18()); 
    System.out.println("Time yourself to see how fast you can make all 18 matches."); 


    ArrayList<cards> temparray = new ArrayList<cards>(); 


    java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager() 
    .addKeyEventDispatcher(new java.awt.KeyEventDispatcher() 
    { 
    public boolean dispatchKeyEvent(java.awt.event.KeyEvent event) 
    { 
    String key = javax.swing.KeyStroke.getKeyStrokeForEvent(event).toString(); 
    int x = 0; 
    if (key.equals("pressed ENTER")) 
     { 
     temparray.add(world.getLocation().getColor()); 
     x++; 
     if(x == 2) 
      { 
      if(temparray.get(0) == temparray.get(1)) 
       { 
       System.out.println("User has made a match!"); 
       } 
      else 
       { 
       System.out.println("Try again!"); 
       } 
      x = 0; 
      } 
     } 
    return true; 
     } 
    }); 

    } 

}

+0

우리는 AP 컴퓨터 과학에서 그리드 월드 (Grid World)라고 불렀습니다. 좋은 시간 ;-) – Solace

+0

익명 클래스의'dispatchKeyEvent' 메소드에서 언급 되었기 때문에. 그러므로 최종이어야합니다. – Bart

답변

5

당신이 방법 로컬 클래스 내에서 지역 변수를 사용하려는 때문에, 변수는 final를 선언해야합니다. 그래서, 단지 변수 선언에 final 개질제를 추가

예컨대 아닌 로컬 클래스 main 방법에 국부적 다른 변수 유사한
final World world = new World(); 

temparray. final World world = new World();

은 "표현의 불법 시작이"아마 inditectly이 관련이있다 :

+0

고마워요! 그러나 getLocation은 이제 "정적 컨텍스트에서 참조 할 수 없습니다"라는 오류를 가져옵니다. 월드 클래스의 코드는 액터를 확장 한 다음 공용 위치 인 getLocation(), return super.getLocation(); } – user3381138

+0

@ user3381138 다른 질문입니다. 정적 메서드 내에서 정적이 아닌 메서드를 호출하는 것 같습니다. –

0

이보십시오.
아마도 올바른 방법으로 final으로 표시하지 않았을 것입니다.