私はJavaを学んでいて、Javaで独自のWordListクラスとWordNodeクラスを作成しました。ただし、WordListIndexOfメソッドは常に-1を返すことがわかりました。誰かがそれの何が悪いのか教えてもらえますか?スキャナーの使用と関係がありますか?(私の教科書には、それは私のaddメソッドではないと書かれています)。私のコードは以下のとおりです(独自のファイル内の各クラス):
WordNode.java:
public class WordNode {
private String value;
private WordNode next;
public WordNode(String newValue) {
value = newValue;
next = null;
}
public WordNode(String newValue, WordNode nextNode) {
value = newValue;
next = nextNode;
}
public String getValue() {
return value;
}
public WordNode getNextNode() {
return next;
}
public void setNextNode(WordNode node) {
next = node;
}}
WordList.java:
public class WordList {
private WordNode first;
public WordList(String firstNode) {
first = new WordNode(firstNode);
}
public void add(String newValue) {
first = new WordNode(newValue, first);
}
public void remove(String oldValue) {
if (first.getValue() == oldValue) {
first = first.getNextNode();
return;
}
WordNode temp = first;
while (temp != null && temp.getNextNode().getValue() != oldValue)
temp = temp.getNextNode();
if (temp != null)
temp.setNextNode(temp.getNextNode().getNextNode());
}
public void moveToStart(String toMove) {
remove(toMove);
add(toMove);
}
public int indexOf(String item) {
WordNode temp = first;
int i = 1;
while (temp != null && temp.getValue() != item) {
temp = temp.getNextNode();
i++;
}
if (temp == null)
return -1;
else
return i;
}
public String itemAtIndex(int index) {
WordNode temp = first;
int i = 1;
while (temp != null && i != index) {
temp = temp.getNextNode();
i++;
}
if (i == index)
return temp.getValue();
else
return "";
}}
MTFencoder.java:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;
public class MTFencoder {
public static void main(String[] args) {
try
{
Scanner scan = new Scanner(new FileReader(args[0]));
WordList dictionary = new WordList(scan.next());
while (scan.hasNext()) {
String newWord = scan.next();
int index = dictionary.indexOf(newWord);
if (index == -1) {
System.out.println("0 " + newWord);
dictionary.add(newWord);
}
else {
System.out.println(Integer.toString(index));
dictionary.moveToStart(newWord);
}
}
}
catch (Exception ex) {
System.out.println("An error occured while reading the file. Check that it exists and is valid.");
}
}}
前もって感謝します。ダニエル