2013-12-20 6 views
2

각 단어를 파일로 읽고 해당 단어가 알파벳순으로 나타나는 인덱스를 만드는 프로그램을 만들어야합니다. 파일이 있다면파일 인덱싱 프로그램이 작동하지 않습니다.

예를 들어, : 계곡 주변 혼잡

흰색 흰색 개 을

출력은 다음과 같아야합니다 주위

: 2 붐비 : 2 개 : 1 : 2 계곡 : 1 흰색 : 1, 1


내 파일이 포함되어있는 경우 : 두 개의 물고기 푸른 물고기 녹색 물고기 소 물고기 우유 물고기 개 물고기 붉은 물고기 당신이 흰색 송아지 출력은

을 찾을 수있는 작은 양 을 찾을 수 있습니다

한 생선 (NOT ALPHA 순서)! : 잘못된

A : 3 4 송아지 : 4 찾기 : 3 4 4 양 : 작은 3 : 3 흰색 : 4 당신에게 4 : 3블루 : 1 수 : 3 소 : 2 개 : 2 녹색 : 1 1 2 2 2 2 우유 : 2 빨간색 : 2 2 : 1 1 1 물고기 : 1 하나 : 1

여기


내 코드 ::

INDEXMAKER의 마스터 클래스

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

public class IndexMaker { 
    private ArrayList<Word> words; 
    private String fileName; 
    private String writeFileName; 

    public IndexMaker(String fileName, String writeFileName) { 
     this.fileName = fileName; 
     this.writeFileName = writeFileName; 
     words = new ArrayList<Word>(); 
    } 

    public void makeIndex() { 
     try { 
      File file = new File(fileName); 
      Scanner lineScanner = new Scanner(file); 
      int lineNum = 0; 
      while (lineScanner.hasNext()) { 
       lineNum++; 
       Scanner wordScanner = new Scanner(lineScanner.nextLine()); 
       while (wordScanner.hasNext()) { 
        String word = wordScanner.next().toLowerCase(); 
        if (!words.contains(new Word(word))) { 
         insertInto(word, findPosition(word), lineNum); 
        } else { 
         addLineNum(word, lineNum); 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void displayIndex() { 
     try { 
      //FileWriter fileWriter = new FileWriter(new File(writeFileName)); 
      //BufferedWriter writer = new BufferedWriter(fileWriter); 
      for (Word word : words) 
       System.out.println(word.getWord() + ": " + word.getLineNums()); 
     } catch (Exception e) { 
     } 
    } 

    private int findPosition(String word) { 
     for (int i = 0; i < words.size(); i++) { 
      if (word.compareTo(words.get(i).getWord()) <= 0) 
       return i; 
     } 
     return 0; 
    } 

    private void insertInto(String word, int pos, int lineNum) { 
     words.add(pos, new Word(word, String.valueOf(lineNum))); 
    } 

    private void addLineNum(String word, int lineNum) { 
     int pos = findPosition(word); 
     words.get(pos).addLineNum(lineNum); 
    } 
} 

WORD입니다 CLASS

public class Word { 
    private String word; 
    private String lineNums; 
    public Word(String word, String lineNum) { 
     this.word = word; 
     this.lineNums = lineNum; 
    } 
    public Word(String word) { 
     this.word = word; 
     this.lineNums = ""; 
    } 
    public String getWord() { 
     return word; 
    } 
    public String getLineNums() { 
     return lineNums; 
    } 
    public void addLineNum(int num) { 
     lineNums += " " + num; 
    } 
    @Override 
    public boolean equals(Object w) { 
     if (((Word)w).getWord().equals(word)) 
      return true; 
     else 
      return false; 
    } 
} 

CLIENT

public class Client { 
    public static void main(String[] args) { 
     IndexMaker indexMaker = new IndexMaker("readme.txt", "readme.txt"); 
     indexMaker.makeIndex(); 
     indexMaker.displayIndex(); 
    } 
} 

어떤 도움을 주시면 감사하겠습니다, 감사합니다.

답변

0

compareTo에 대한 정의를 찾을 수 없습니다. 이것이 프로그램의 핵심 부분이 될 것 같습니까?

제대로 당신은 compareTo를 구현하고

자신의 비교를하는 것은 당신이 그것을 제대로 할 경우가 작동 할 수있는 "확인"입니다에서 System.out.println

를 사용하여 비교 결과를 인쇄하여 제대로 작동 확인합니다. 당신이 할 수있는 다른 일은 Comparable을 구현하는 것이고 자바를 사용하여 단어 목록을 정렬 할 수 있습니다.

+0

compareTo는 그냥 만들어야 할 필요가없는 문자열을 비교합니다. – user3053331

+0

아마도 완전히 질문에 대한 오해가있었습니다 만, 문제는 출력이 알파 순서가 아니라는 것입니다. – user1445967

+0

이것이 주된 문제입니다. – user3053331