0

わかりましたので、あいまいな問題について助けを求めるのは嫌いですが、現在、コンパイル時にエラーが発生していないように見えるプロジェクトに取り組んでいますが、要求されたことは実行しません。簡単に言えば、このプロジェクトは、テキスト エディターとして機能する連結リスト (具体的には順序付けられていないリスト) です。コマンドライン引数としてファイルを受け取り、ドキュメントの各行をノードとしてリストに保存します。確かにそれを行っているかどうかはわかりませんが、その後、プログラムは特定のコマンド(キーボード入力)を受け取り、要求に応じてファイルのテキストを編集またはリストします。

問題は、ファイルがリストに保存されているかどうかさえわからないことです。なぜなら、リストにコマンド L を与えるたびに、プログラムはそれを「スキップ」して、何も要求されていないかのように続行するからです。なんらかの理由でファイルが保存されていないか、unorderedList クラスの toString メソッドに問題がある可能性があります。

私のすべてのクラスのコードは次のとおりです。

public class LinearNode<T> {

    //Begin by declaring the basic node and its data
    private LinearNode<T> next;
    private T element;

    public LinearNode() {
        //The basic null constructor
        next = null;
        element = null;

    }

    public LinearNode(T elem)   {
        //The overloaded constructor to create a node
        next = null;
        element = elem;

    }

    public LinearNode<T> getNext()  {
        //Get the node reference
        return next;

    }

    public void setNext(LinearNode<T> node) {
        //Create or redirect a node reference
        next = node;

    }

    public T getElement()   {
        //Get the actual data stored in the node
        return element;

    }

    public void setElement(T elem)  {
        //Create or redirect the node's data
        element = elem;

    }

}

そしてリストのために

public abstract class LinkedList<T> implements ListADT<T>, UnorderedListADT<T> {

    protected int count;
    protected LinearNode<T> head, tail;
    protected int modCount;

    public LinkedList ()    {
        count = 0;
        head = null;
        tail = null;
        head = tail;
        head.setNext(tail);
        modCount = 0;
    }

    public T remove(T targetElement) throws EmptyCollectionException, ElementNotFoundException  {
        if(isEmpty())
            throw new EmptyCollectionException("LinkedList");

        boolean found = false;
        LinearNode<T> previous = null;
        LinearNode<T> current = head;

        while(current!=null&&!found)    {
            if(targetElement.equals(current.getElement()))  {
                found = true;
            }

            else    {
                previous = current;
                current = current.getNext();
            }

        }

        if(!found)
            throw new ElementNotFoundException("Linked List");

        if(size()==1)   {
            head = tail = null;
        }

        else if(current.equals(head))
            head = current.getNext();

        else if(current.equals(tail))   {
            tail = previous;
            tail.setNext(null);
        }

        else    {
            previous.setNext(current.getNext());
        }

        count--;
        modCount++;

        return current.getElement();
    }


}

 

import java.util.Iterator;

public class UnorderedList<T> extends LinkedList<T>{

    public UnorderedList()  {
        super();
    }

    public void addToFront(T element)   {
        if(head==null)  {
            head = new LinearNode<T>(element);
            if(tail==null)  {
                tail = head;
            }
            count++;
            modCount++;
        }
        else    {
            LinearNode<T> current = head;
            head.setElement(element);
            head.setNext(current);
            count++;
            modCount++;
        }
    }

    public void addToRear(T element)    {
        if(tail.getElement()==null) {
            tail.setElement(element);
            count++;
            modCount++;
        }
        else    {
            LinearNode<T> current = tail;
            tail = new LinearNode<T>(element);
            current.setNext(tail);
            count++;
            modCount++;
        }
    }

    public void addAfter(T element, T target)   {
        LinearNode<T> current = head;
        LinearNode<T> node = new LinearNode<T>(element);
        LinearNode<T> temp = null;
        while(!(current.getElement()==target))  {
            current = current.getNext();
        }
        if(!(current.getNext()==null))  {
            temp = current.getNext();
            //temp.setElement(current.getElement());
        }
        current.setNext(node);
        node.setNext(temp);
        count++;
        modCount++;
    }

    public T removeLast()   {
        T last = tail.getElement();
        tail = null;
        LinearNode<T> current = head;
        while(!(current.getNext()==null))   {
            current = current.getNext();
        }
        current = tail;
        count--;
        modCount++;
        return last;
    }

    public int size()   {
        return count;
    }

    public Iterator<T> iterator()   {
        Iterator<T> itr = this.iterator();
        return itr;
    }

    public boolean isEmpty()    {
        boolean result = false;
        if(head==null&&tail==null)  {
            result = true;
        }
        else
            result = false;
        return result;
    }

    public T first()    {
        return head.getElement();
    }

    public T last() {
        return tail.getElement();
    }

    public boolean contains(T elem) {
        boolean result = false;
        for(T element : this)   {
            if(element==elem)   {
                result = true;
                break;
            }
        }
        return result;
    }

    public T removeFirst()  {
        LinearNode<T> current = head;
        head = current.getNext();
        count--;
        modCount++;
        return current.getElement();
    }

    public String toString()    {
        LinearNode<T> current = head;
        String s = "";
        for(int countA=0;countA<count;count++)  {
            s += (countA+1)+"> "+current.getElement()+"\n";
            current = current.getNext();
        }
        return s;
    }

}

そしてメインエディター

import java.util.Scanner;
import java.util.Iterator;
import java.io.*;

public class myEditor {

    public static void saveToFile(String text, String filename) throws IOException{
        PrintWriter out = new PrintWriter(new File(filename));
        out.println(text);
        out.close();
    }

    public static void main(String args[])  {
        boolean quit = false;
        try {
            if(args.length!=1)  {
                throw new IllegalArgumentException();
            }

            String filename = args[0];
            Scanner input = new Scanner(new File(filename));
            //Add exception
            UnorderedList<String> list = new UnorderedList<String>();
            while(input.hasNextLine())  {
                if(list.head==null) {
                    list.addToFront(input.nextLine());
                }
                list.addToRear(input.nextLine());
            }

            System.out.println(">");

            do  {
                Scanner command = new Scanner(System.in);
                String comm = command.next();
                String[] comm1 = comm.split(" ");
                if(comm1.length==1) {
                    if(comm1[0].equalsIgnoreCase("I"))  {
                        System.out.println("Type a line of text >");
                        comm = command.next();
                        list.addToRear(comm);
                    }
                    else if(comm1[0].equalsIgnoreCase("L")) {
                        System.out.print(list.toString());
                    }

                    else if(comm1[0].equalsIgnoreCase("E")) {
                        saveToFile(list.toString(), filename);
                        quit = true;
                        break;
                    }
                }
                else    {
                    if(comm1[0].equalsIgnoreCase("I"))  {
                        int linNum = Integer.parseInt(comm1[1]);
                        Iterator<String> itr = list.iterator();
                        String current = "";
                        for(int count=0;count<linNum;count++)   {
                            current = itr.next();
                        }
                        list.addAfter(comm, current);
                    }

                    else if(comm1[0].equalsIgnoreCase("D")) {
                        int linNum = Integer.parseInt(comm1[1]);
                        if(linNum<=list.count&&linNum>0)    {
                            Iterator<String> itr = list.iterator();
                            String current = "";
                            for(int count=0;count<linNum;count++)   {
                                current = itr.next();
                            }
                            list.remove(current);
                        }
                    }
                }

            }
            while(!quit);
        }
        catch(IllegalArgumentException e)   {
            System.err.print(e.getMessage());
        }
        catch(FileNotFoundException e)  {
            System.err.print(e.getMessage());
        }

        catch(IOException e)    {
            System.err.print(e.getMessage());
        }

    }
}

他にもいくつかのクラスといくつかのインターフェースがありますが、私が経験している問題については、それらはそれほど関係がないと思います。

ここで何が起こっているのか、またはプログラムがコマンドを無視するために間違って書いた可能性があることを誰かが見ていますか?

4

1 に答える 1