2011-12-29 3 views
2

기본적으로 문제는 코드의 일부분이 자바 메서드에서 아주 약간의 변형을 통해 재사용되어야한다는 것입니다.Java - 클래스 메서드 내에서 메서드/함수/서브 루틴 정의

이 코드 섹션도 클래스 메서드 내에서만 정의 된 변수에 대한 액세스가 필요합니다.

검색을했지만 메소드 내에서 서브 루틴을 추가 할 수있는 방법이 없습니다. 로컬 클래스를 추가하는 방법에 대해 생각했지만 정적 메서드를 사용할 수없는 것 같습니다. 실제로 필요한 메서드입니다. 그것이 내 목표는 게임 보드를 초기화하는 모든 것입니다 도움이된다면

, 즉 기본적으로 구성

GameSquare[][] board = new GameSquare[15][15]; 

각 통화 :

board[a][b] = new GameSquare(params); 

에 대한 해당 호출이 있어야한다 :

board[b][a] = new GameSquare(params); 
board[15-a][15-b] = new GameSquare(params); 
board[15-b][15-a] = new GameSquare(params); 

어떤 특별한 사각형도 다른 네 모퉁이를 가로 질러 미러링해야합니다.

나는이 모든 것을 단일 방법으로 포함시키기를 바라고 있습니다.

method(int a, int b, otherparams passed to GameSquare constructor){ 
    //initialise those 4 squares. 
} 

을하지만, 지금까지 내가이 일을하는 방식을 발견하지 않은 : 방법 내에서 방법을 가지고 할 수있는 방법이 있다면, 난 그냥있을 수 있습니다.

건배.

+0

당신이하려는 일에 대한 의사 코드를 제공하면 더 나은 도움을 얻을 수 있습니다.지역 함수로 수행 할 수있는 모든 작업은 익명의 클래스에서 수행 할 수 있지만 다른 언어에서 제공하는 것만큼이나 유용하지는 않습니다. 지금 당장 나는 지역적 방법이 필요한 이유 또는 그것이 할 일에 대해 분명하지 않다. –

+0

문제가 무엇인지 잘 모릅니다. 좌표 쌍과 매개 변수를 취하여 모든 모퉁이를 설정하는 setter 메서드 (예 : "GameBoard"클래스의'setCorners')를 쓸 수 있습니까? 실제로 어떤 변형을 시도하고 있습니까? – Dunes

답변

1

배열이기 때문에 배열을 매개 변수로 메서드에 전달하는 방법은 무엇입니까? 프리미티브 (int, float 등)를 제외하고 Java의 매개 변수는 참조로 전달되므로 여전히 동일한 배열을 수정하고 있습니다. 그것을 사용

method(GameSquare[][] board, int a, int b, otherparams passed to GameSquare constructor){ 
    board[a][b] = new GameSquare(params) 
    board[b][a] = new GameSquare(params) 
    board[15-a][15-b] = new GameSquare(params) 
    board[15-b][15-a] = new GameSquare(params) 
} 

:

GameSquare[][] board = new GameSquare[15][15]; 
method(board,a,b,params); 
+0

헤이 그거 꽤 예쁘다! 그런 일이 있다면 제가 할 수있는 것보다 좀 더 장황한 것이지요. – Liang

+0

이것이 효과가 있지만, 그다지 OOP는 아닙니다. 어떤 클래스에이 메소드가 있습니까? – user949300

+0

보드를 가지고있는 것이 합리적 일지 모르지만 처음에는 Square에 메서드를 넣었습니다. 대신이 작업을 수행합니다. – Liang

0

우리는 가끔 짜증나는 자바,하지 않을 수 없음.하지

Kevin 쇼와 같이 외부에 메서드를 선언 할 수 있습니다. 그렇게 나쁘진 않네.

로컬 클래스도 좋습니다. 이 메서드는 정적 일 필요는 없습니다.

final GameSquare[][] board = ... 

class Util 
    void method(...) 
     board[][]... 

Util util = new Util(); 

util.method(...); 

좀 더 자세한 정보입니다.

0

당신은 당신의 특별한 사각형을 어떻게 원합니까?

class GameSquare { 
    GameSquare(int x) { 
     this.x = x; 
    } 
    public String toString() { 
     return "" + x; 
    } 
    int x; 
} 
public class Main { 
    void print() { 
     for (int i = 0; i < n; i++) { 
      for (int j = 0; j < n; j++) 
       if (board[i][j] == null) System.out.print("oops"); 
       else if (board[i][j].x < 10) System.out.print(board[i][j] + " "); 
       else 
        System.out.print(board[i][j] + " "); 
      System.out.println(); 
     } 
    } 
    void makeSpecial(int i,int j,int k) { 
     board[i][j] = new GameSquare(k); 
     board[j][i] = new GameSquare(k); 
     board[n - 1 - i][n - 1 - j] = new GameSquare(k); 
     board[n - 1 - j][n - 1 - i] = new GameSquare(k); 
     board[i][n - 1 - j] = new GameSquare(k); 
     board[n - 1 - j][i] = new GameSquare(k); 
     board[n - 1 - i][j] = new GameSquare(k); 
     board[j][n - 1 - i] = new GameSquare(k); 
    } 
    void init() { 
     int k = 0; 
     for (int i = 0; i < n; i++) 
      for (int j = 0; j < n; j++, k++) 
       board[i][j]=new GameSquare(0); 
     makeSpecial(2,3,1); 
     makeSpecial(5,6,2); 
    } 
    public static void main(String[] args) { 
     Main main = new Main(); 
     main.init(); 
     main.print(); 
    } 
    final int n = 7; 
    GameSquare[][] board = new GameSquare[n][n]; 
} 
+0

안녕하세요 레이 네, 그건 제가 원했던 것입니다. 예외적으로, 다른 자리에서 사각형의 다른 유형을 초기화하려고 할 때마다 두 개의 중첩 된 루프 사이에 거대한 코드 블록을 갖고 싶지 않았습니다. – Liang

+0

그 8 문장이 필요합니다. 내가 그것을 기능으로 바꾸도록하자. 편집을 참조하십시오. 당신은 어딘가에이 논리가 필요합니다. –

1

GameSquares의 배열을 포함하는 새로운 클래스 인 GameBoard가 필요합니다. 그것은의 (a INT, INT의 B, GameSquare의 GS) 방법을

setSquare있을 것 미러링에 대해 알고

.

+0

네가 좋은 지적을했다. 나는 이것이 가능하다면 궁금해하고 있었는데, 자바가 그런 메커니즘을 가지고 있다면 이것이 문제가되었다. – Liang