2011-11-02 3 views
0

내 수업 중 하나에서 두 가지 컴파일 오류가 발생했으며 그 이유를 이해할 수 없습니다.중괄호/세미콜론으로 닫는 중 오류

또 다른 세미콜론이 있어야하고 하단에는 다른 닫는 중괄호가 필요하다는 오류가 있습니다.

다른 중괄호를 넣으면 맨 아래쪽 오류가 사라지지만 위쪽 중괄호는 표시되지 않습니다. 어떤 아이디어?

는 (이 아마 나를 장님되는 경우입니다/바보 그래서 난 당신이 직접) 코드합니다 ( for 루프를 넣어 시도했습니다

package com.pathfinding; 

import java.util.ArrayList; 


public class EdgeNodeFactory 
{ 
static boolean[][] edgeMatrix = new boolean[100][100]; 
for (int i = 0; i < 100; i++) 
{ 
    for (int j = 0; j < 100; j++) 
    { 
     edgeMatrix[i][j] = false; 
    } 
} 

static ArrayList<Node> nodes = new ArrayList<Node>(); 
static ArrayList<Edge> edges = new ArrayList<Edge>(); 

static int edgeCount = 0; 
static int nodeCount = -1; 
} 

errors regarding curly braces

+0

신고하기 전에 기쁘게 코드를 게시하십시오 –

+0

파일을 여기에 붙여주십시오. –

+0

화면 캡처 대신 실제 코드를 게시하십시오. – Oded

답변

2

사전 :)에 사과 당신의 클래스 - 생성자, 메서드 또는 정적/인스턴스 이니셜 라이저에 없습니다. 그건 유효하지 않아. 언제 그 코드가 실행되기를 원합니까?

나는 의심 정말이 같아야 코드 : 나는 모든 필드 개인 및 비 정적 ... 당신은 거의 확실히 예를를 작성해야한다을했습니다 방법

public class EdgeNodeFactory 
{ 
    private boolean[][] edgeMatrix = new boolean[100][100]; 
    private int edgeCount = 0; 
    private int nodeCount = -1; 
    private List<Node> nodes = new ArrayList<Node>(); 
    private List<Node> edges = new ArrayList<Edge>(); 

    public EdgeNodeFactory() 
    { 
     // You *could* put your for loop here... but the array 
     // elements will all be false anyway, as that's the default... 

     // If you don't need any code in this constructor, and you 
     // don't declare any other constructors, you can remove it 
     // entirely - the compiler will create it by default. 
    } 

    // Other methods here 
} 

주 정적 필드를 사용하는 대신 EdgeNodeFactory을 사용해야하며 거의 항상 필드를 비공개로 설정해야합니다.

+0

오 고마워요! 그게 정말 내 코드를 많이 정리합니다! – bananamana

2

나는 자바를 한참 동안 사용 해왔다.하지만 for 루프는 클래스 선언이 아닌 메서드 나 함수의 내부에 있어야한다고 생각한다.

나는 그것이 생성자에 있다는 것을 의미한다고 생각합니다.

0

for 루프는 정적 배열 필드의 초기화라고 생각합니다. 클래스 수준에서 static { ... } 내부

package com.pathfinding; 

import java.util.ArrayList; 


public class EdgeNodeFactory 
{ 
static boolean[][] edgeMatrix = new boolean[100][100]; 
static { 
    for (int i = 0; i < 100; i++) 
    { 
     for (int j = 0; j < 100; j++) 
     { 
      edgeMatrix[i][j] = false; 
     } 
    } 
} 

static ArrayList<Node> nodes = new ArrayList<Node>(); 
static ArrayList<Edge> edges = new ArrayList<Edge>(); 

static int edgeCount = 0; 
static int nodeCount = -1; 
} 

코드를 클래스가로드 처음 (한 번만) 실행 :이 경우는 다음과 같이 static 초기화 코드를 넣어해야합니다. 이것은 클래스의 인스턴스가 생성되기 전에 그리고 다른 코드가 그 클래스에 접근하기 전에 실행된다는 것을 의미합니다.

필드가 정적이어야하는지 여부는 여전히 논란의 여지가 있지만 확신해야한다면이를 초기화해야합니다.