2016-10-05 9 views
0

텍스트 파일의 단어 목록이 모두 고유한지 또는 HashSet을 사용하여 복제본이 있는지 알려주는 프로그램을 작성 중입니다. 중복이있는 경우 유일한 출력은 "NOT_UNIQUE"이어야하며 중복이 없으면 "UNIQUE"가 출력되어야합니다.HashSet을 테스트 할 때 루프에서 하나의 출력 만 얻는 방법

이 방법은 파일의 단어를 HashSet에 추가하는 것이고 단어가 중복 될 수 없기 때문에 단어를 추가 할 수 없다고 생각합니다. 나는 이미 프로그램을 만들었지 만, 프로그램이 끝날 때 한 번만하는 것이 아니라 모든 단어에 대해 "UNIQUE"를 출력합니다. 이것은 while 루프와 infile.readLine()의 사용과 관련이 있다고 생각합니다.하지만 여기에서 무엇을해야할지 모르겠습니다. 도와 줘서 고마워. 당신의 BufferedReader 각 줄 읽기에서 읽을 준비하는 동안 당신은 루프에 UNIQUE 또는 NOT_UNIQUE 출력을 인쇄하는

import java.io.*; 
import java.util.*; 

public class Lab5 
{ 
    public static void main (String[] args) throws Exception 
    { 
     HashSet<String> set = new HashSet<String>(); 
     BufferedReader infile = new BufferedReader(new FileReader(args[0])); 
     while (infile.ready()) 
     { 
      String word = infile.readLine(); 
      if (!set.add(word)) 
       System.out.println("NOT_UNIQUE \n"); 
      else 
       System.out.println("UNIQUE \n"); 
     } 
    } 
} 

답변

1

깃발은 우아하지 않지만,이 경우 실용적인 해결책이라고 생각합니다. 당신이 모든 단어를 표시하지 않은 경우에는 루프 밖으로 플래그와 보석을 설정할 수 있습니다

import java.io.*; 
import java.util.*; 

public class Lab5 
{ 
    public static void main (String[] args) throws Exception 
    { 
     boolean isUnique = true; 
     HashSet<String> set = new HashSet<String>(); 
     BufferedReader infile = new BufferedReader(new FileReader(args[0])); 
     while (infile.ready()) 
     { 
      String word = infile.readLine(); 
      if (!set.add(word)) { 
       isUnique = false; 
       break; 
      } 
     } 

     System.out.println(isUnique ? "UNIQUE \n" : "NOT_UNIQUE \n"); 

    } 
} 

당신이 응용 프로그램에이를 넣을 경우 파일 기술자를 종료해야합니다.

+0

대답은 Berger 's보다 효율적이지만 삭제되면 스트림을 닫지 않습니다 (OP는 그다지 신경 쓰지 않습니다). – Mena

1

, 그래서 그것을 읽은 된 각 라인에 대한 값을 인쇄 할 수 있습니다 : 내 코드는 다음과 같습니다 .

여기에서 디자인을 리팩토링하고 싶을 것입니다. 아래 논리는 실제로 파일에서 읽은 전체 데이터를 유지하려는 경우에만 적용됩니다. 그렇지 않으면보다 효율적인 솔루션이 제공됩니다 (Max Mammel 참조).

  • 가있는 파일
  • 스토어 그들로부터 모든 라인을 예약비 List (수 중복)
  • 새로운 Set이 (당신의 List 생성자를 전달하는가에 그것을 트림 것 초기화, 읽기 완료 독특한 String 집합)
  • 다음 두 가지의 크기를 비교하십시오 - 다르다면 고유하지 않은 항목이 있습니다
  • 오프 주제 : 스트림을 닫아야합니다!
+0

도움 주셔서 감사합니다. –

+0

@Alex 환영합니다! – Mena

+0

오프 주제에 관해서는, 스트림을 닫는 것이 무엇을 의미합니까? –