2013-12-20 14 views
2

我必须制作一个程序,它可以读取文件中的每个单词,并按字母顺序对单词出现在哪一行进行索引。文件索引程序不能正常工作

例如,如果文件有:

在山谷拥挤白色白色的狗

输出应该是:

一个 各地:2 拥挤:2 狗: 1 the:2 valley:1 white:1,


当我的文件包括:

一条鱼两条鱼蓝鱼绿鱼 牛鱼奶鱼狗鱼红色的鱼 你可以找到一只小羊羔 你可以找到一个白色的小腿

的输出WRONG!:(不是字母顺序)

一个4:3 小牛:4 发现:3 4 4 羊肉:3 一点:3 白:4 你:3 4 蓝:1 可以:3 牛:2 狗:2 绿色:1 1 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

做你自己的比较是在“OK”如果你做得不好就会工作,比较的结果正常工作。你可以做的另一件事是实现Comparable,然后你可以让Java为你排序一个单词列表。

+0

compareTo只是比较它不需要的字符串 – user3053331

+0

也许我完全误解了你的问题,但它看起来像你说的问题是输出不是按照字母顺序。 – user1445967

+0

那是主要问题 – user3053331