0

私は私のコードを実行しています、そしてそれが最初の印刷ステートメントを言った後、それは一時停止します。関数を「挿入」と呼び、何も応答しない時点で一時停止します。「犬、猫、馬を追加」と表示されますが、停止し、その後は何もしません。

主な機能

package assignment2;
public class Main {
    public static void main(String[] args) {
        OrderedStringList myList = new OrderedStringList(5);

        System.out.println("adding dog, cat, & horse");
        myList.Insert("dog");
        myList.Insert("cat");
        myList.Insert("horse");

        myList.Display();

        System.out.println("Value pig find = "+ myList.Find("pig"));
        System.out.println("Value horse find = "+ myList.Find("horse"));

        System.out.println("Adding mouse & rat");
        myList.Insert("mouse");
        myList.Insert("rat");

        myList.Display();

        System.out.println("myList size: "+ myList.Size());

        if (!myList.Insert("chinchilla"))
            System.out.println("Could not add chinchilla, full");

        System.out.println("Removing dog, adding chinchilla.");
        myList.Delete("dog");
        myList.Insert("chinchilla");

        myList.Display();
    }
}

これが私の関数のコードです

package assignment2;
public class OrderedStringList {
    int length;
    int numUsed;
    String[] storage;
    boolean ordered;

    public OrderedStringList(int size){
        length = size;
        storage = new String[length];
        numUsed = 0;
    }


    public boolean Insert(String value){
        boolean result = false;
                int index = 0;
                if (numUsed < length) {
                    while (index < numUsed) {
                        int compare = storage[index].compareTo(value);
                        if (compare < 0)
                            index++;
                    }
                    moveItemsDown(index);
                    storage[index] = value;
                    numUsed++;
                    result = true;
                }
                return result;
    }
    private void moveItemsDown(int start){
        int index;
        for (index = numUsed-1; index >=start; index--){
            storage[index+1] = storage[index];
        }
    }

    private void moveItemsUp(int start){
        int index;
        for (index = start; index < numUsed-1; index++){
            storage[index] = storage[index+1];
        }
    }

    public boolean Find(String value){
        return (FindIndex(value) >= 0);
    }

    private int FindIndex(String value) {
        int result = -1;
        int index = 0;
        boolean found = false;
        while ((index < numUsed) && (!found)) {
            found = (value.equals(storage[index]));
            if (!found)
                index++;
        }
        if (found)
            result = index;
        return result;
    }

    public boolean Delete(String value){
        boolean result = false;
        int location;
        location = FindIndex(value);
        if (location >= 0) {
            moveItemsUp(location);
            numUsed--;
            result = true;
        }
        return result;
    }

    public void Display() {
        int index;
        System.out.println("list Contents: ");
        for (index = 0; index < numUsed; index++) {
            System.out.println(index+" "+storage[index]);
        }
        System.out.println("-------------");
        System.out.println();
    }

    public void DisplayNoLF() {
        int index;
        System.out.println("list Contents: ");
        for (index = 0; index < numUsed; index++) {
            System.out.print(storage[index]+" ");
        }
        System.out.println("-------------");
        System.out.println();
    }

    public int Size(){
        return numUsed;
    }
}
4

2 に答える 2

7

Insert 関数の while ステートメントで無限ループに陥っています。次のコードを検討してください。

while (index < numUsed) {
    int compare = storage[index].compareTo(value);
    if (compare < 0)
        index++;
}

の場合はどうcompare >= 0なりindex = 0ますか? インデックスが上方にインクリメントされない場合、while ループが無限に呼び出されindex = 0ます。if ステートメントの外で index をインクリメントし、if ステートメントに別の条件を入れる必要があります。

于 2013-02-18T22:16:12.307 に答える
0
            while (index < numUsed && storage[index].compareTo(value) < 0) {
                    index++;
            }

これを行うことで私の問題を解決しました。forループを削除し、whileループに追加の要件を追加しただけです。

于 2013-02-18T22:58:00.570 に答える