I am just learning Java and have created my own Word List and Word Node classes in Java. However, I have found that my WordList Index Of method always returns -1. Can someone please tell me what is wrong with it? Has it something to do with using Scanner? (My textbook says it is not my add method). My code is below (each class in its own file):
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.");
}
}}
Thanks in advance.
Daniel
In Java, to check equality of objects, including Strings, you have to use .equals method. So in indexOf and remove, you will have to use
first.getValue().equals(oldValue)or similar.