각 단어를 파일로 읽고 해당 단어가 알파벳순으로 나타나는 인덱스를 만드는 프로그램을 만들어야합니다. 파일이 있다면파일 인덱싱 프로그램이 작동하지 않습니다.
예를 들어, : 계곡 주변 혼잡
흰색 흰색 개 을
는출력은 다음과 같아야합니다 주위
: 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();
}
}
어떤 도움을 주시면 감사하겠습니다, 감사합니다.
compareTo는 그냥 만들어야 할 필요가없는 문자열을 비교합니다. – user3053331
아마도 완전히 질문에 대한 오해가있었습니다 만, 문제는 출력이 알파 순서가 아니라는 것입니다. – user1445967
이것이 주된 문제입니다. – user3053331