0

我尝试运行此代码,它是一个移到前端的编码器,但我得到了这个异常:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 0 在 MTFencoder.main(MTFencoder.java:10)

有人可以解释为什么会这样吗?

import java.io.FileReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;
import java.io.IOException;

public class MTFencoder {
    public static void main(String[] args) {
        String filename = args[0];
        WordList wordList = new WordList();

        try {
            String line;
            BufferedReader br = new BufferedReader(new FileReader(filename));
            StringTokenizer st;
            int index;

            while ((line = br.readLine()) != null) {
                st = new StringTokenizer(line);

                while (st.hasMoreTokens()) {
                    String currentword = st.nextToken();

                    if (wordList.hasElement(currentword)) {
                        index = wordList.Index(currentword);
                        wordList.remove(currentword);
                        wordList.add(currentword);
                        System.out.println(Integer.toString(index));
                    } else {
                        wordList.add(currentword);
                        System.out.println("0" + currentword);
                    }
                }
            }
        } catch (IOException e) {
        }
    }
}


class Node {
    private String word;
    private Node next;

    public Node(String w) {
        word = w;
        next = null;
    }

    public String getWord() {
        return word;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node n) {
        next = n;
    }
}


class WordList {
    Node head;

    public WordList() {
    }

    public void add(String w) {
        Node n = new Node(w);
        n.setNext(head);
        head = n;
    }

    public int length() {
        Node tmp = head;
        int count = 0;
        while (tmp != null) {
            count++;
            tmp = tmp.getNext();
        }
        return count;
    }

    public boolean hasElement(String w) {
        Node tmp = head;
        while (tmp != null) {
            if (tmp.getWord().equals(w)) return true;
            tmp = tmp.getNext();
        }
        return false;
    }

    public void remove(String w) {
        if (!hasElement(w)) return;
        if (head.getWord().equals(w)) {
            head = head.getNext();
            return;
        }
        Node tmp = head;
        while (!(tmp.getNext().getWord().equals(w))) tmp = tmp.getNext();
        tmp.setNext(tmp.getNext().getNext());
    }

    public void dumpList() {
        for (Node tmp = head; tmp != null; tmp = tmp.getNext())
            System.out.println(" >> " + tmp.getWord());
    }

    public int Index(String w) {
        int counter = 1;
        Node temp = head;
        while (!(temp.getWord().equals(w))) {
            counter++;
            temp = temp.getNext();
        }
        return counter++;
    }
}
4

1 回答 1

4

该程序需要命令行参数。你没有通过它。

该程序需要以java MTFencoder fileyouwanttoprocess. 您没有传递文件名参数。

这是第 10 行

String filename = args[0];

args[0] 是第一个命令行参数 - 您没有传递命令行参数。

于 2013-04-01T04:53:35.683 回答