0

私は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.");
    }
}}

前もって感謝します。ダニエル

4

1 に答える 1

1

Java では、文字列を含むオブジェクトの等価性をチェックするには、.equals メソッドを使用する必要があります。したがって、indexOf と remove では、first.getValue().equals(oldValue)または類似のものを使用する必要があります。

于 2012-04-12T05:44:11.657 に答える