2013-08-06 2 views
-1

나는 클래스 사전을 가지고있다. 그냥 몇 가지 단어가 들어있는 텍스트 파일 (main 메서드에서)을 읽고 해시 집합에 저장합니다. 또한 클래스에는 Hashset에 주어진 단어가 포함되어 있는지 검사하고 부울을 반환하는 "contains"(정적) 메서드가 있습니다. Hashset 변수는 정적 변수로 정의됩니다.클래스 B에서 클래스 A의 정적 메서드를 호출 할 때 클래스 A의 기본 메서드가 실행됩니까?

이제 다른 프로그램이 있고 정적 메서드 "contains"를 호출하면 Dictionary 클래스의 "main"메서드가 실행됩니까? 내 프로그램에서 Dictionary가 비어있는 것처럼 실행되지 않는 것 같습니다 (contains 메서드에 대한 모든 호출은 false를 반환합니다). main 메소드를 실행하고 사전을 채우려면 어떻게해야합니까?

물론 메소드를 정적이 아니게 만들고 사전 객체를 만들거나 사전을 내 호출 프로그램의 내부 클래스로 만들 수 있습니다. 그러나 이것을하기위한 더 좋은 방법이 있는지 알고 싶습니다.

필요한 경우 코드를 공유합니다.

PS : Dictionary 클래스는 독립적으로 실행될 때 잘 실행되고 "contains"메서드 호출은 잘 작동합니다.

private static Set<String> dictionary = new HashSet<String>(); 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    try{ 
     System.out.println("Reading dictionary...."); 
     FileReader fr = new FileReader("dictionary.txt"); 
     BufferedReader br = new BufferedReader(fr); 
     String s; 
     while((s = br.readLine()) != null){ 
      dictionary.add(s); 
     } 
     br.close(); 
     fr.close(); 
    }catch(IOException ioe){ 
     ioe.printStackTrace(); 
    } 
    System.out.println("Dictionary contains the following words"); 
    for(String s : dictionary){ 
     System.out.println(s); 
    } 
} 
public static boolean contains(String inpword){ 
    //String[] args = new String[0]; 
    //main(args); 
    if(dictionary.contains(inpword)) 
     return true; 
    return false; 
} 
+0

프로그래밍 할 언어를 지정해야합니다. – EJP

+0

자바 또는 C#을 사용하고 있습니까? – Bohemian

+0

짧은 코드 샘플이 좋습니다. 약 10 줄 또는 20 줄 정도면 충분합니다. – Arafangion

답변

1

다른 프로그램이 있고 정적 메서드를 "contains"라고하면 Dictionary 클래스의 "main"메서드가 실행됩니까?

아니요.

내 프로그램에서 사전이 비어있는 것처럼 보이지 않습니다 (모든 메소드 호출에 false가 반환 됨). main 메소드를 실행하고 사전을 채우려면 어떻게해야합니까?

사전 클래스 main 메서드를 명시 적으로 호출 할 수 있습니다. 예를 들어 : (현재 작성된) Dictionary.main이 사전을 초기화 외에 더 않기 때문에

public class OtherClass { 
     .... 
     public static void main(String[] args) { 
      ... 
      Dictionary.main(args); // ... or provide a different argument list 
      ... 
     } 
    } 

는하지만 그 나쁜 생각입니다. 당신은 가장 가능성 ... 표준 출력에 기록 된 사전을 원하고

Dictionary 더 객체 지향 만들 수있는 훨씬 더 좋은 생각이 될 것입니다 :

  • dictionary 변수 비 정적
  • 만들기 확인 contains 방법 비 정적
  • 이동 생성자
  • 에 초기화 코드는 Dictionary.main 메소드가 Dictionary 인스턴스를 작성합니다 ...

그러면 클래스를 작성하여 Dictionary 인스턴스를 생성하고 사용할 수 있습니다.


일반적으로 클래스에는 "main"메소드가 필요하지 않습니다. 응용 프로그램의 진정한 진입 점 인 클래스에 대해서만 제공해야합니다.

테스트 용 "메인"을 포함하는 것은 구식입니다. 테스트 코드와 하네스를 별도로 구현하는 것이 더 좋습니다. 예 : JUnit 또는 TestNG와 같은 테스트 프레임 워크를 사용합니다.

+0

스티븐 감사합니다. 그게 내가 가진 모든 문제를 해결해 줄거야. – ski

2

아니요 : 클래스의 정적 메서드를 호출하면 main() 메서드가 실행되지 않습니다.

2

주 방법은 항상 필요한 것은 아닙니다. 배열을 사용하여 사전에 대한 미니 데이터베이스를 만드는 것이 좋습니다. 항목을 넣은 다음 호출하십시오. 그렇게 쉬운 방법입니다.

또한 비 정적 void 메서드는 정적 메서드에서는 작동하지 않습니다.

관련 문제