0

ソートされてから別のファイルに出力される整数のファイルを読み込もうとしています。ターミナルで入力ファイルを取得する以外はすべて実行できます。理由はわかりませんが、コード全体を含めましたが、コメント部分は機能していないように見える部分です (配列をコードにハードコーディングすると正常に機能するため)。前もって感謝します。

class Quicksort {
    public void qSort(int[] a, int p, int r) {
        if (p < r) {
            int q = Partition(a, p, r);
            qSort(a, p, q - 1);
            qSort(a, q + 1, r);
        }
    }

    private static int Partition(int[] A, int p, int r) {
        int x = A[p];
        System.out.println(x + " ");
        int i = p;
        int j = r;
        int temp = 0;

        while (true) {
            while (A[j] > x) {
                j--;
            }

            while (A[i] < x) {
                i++;
            }

            if (i < j) {
                temp = A[j];
                A[j] = A[i];
                A[i] = temp;
            } else {
                return j;
            }
        }

    }
}

public class QuickSortTest {
    public static void main(String[] args) throws IOException {
        long time1 = System.nanoTime();
        Quicksort qsort = new Quicksort();

        //          ArrayList<Integer> dataReadIn = new ArrayList();
        //          FileReader fileToBeRead = new FileReader("test.txt");
        //          Scanner src = new Scanner(fileToBeRead);
        //          src.useDelimiter("[,\\s*]");
        //          int p = 0;
        //               while (src.hasNext()) 
        //               {
        //                   if (src.hasNext()) 
        //                   {
        //                       dataReadIn.add(src.nextInt());
        //                       System.out.println(p);
        //                       p++;
        //                     } 
        //                     else {
        //                         break;
        //                     }
        //                 }
        //           
        //      int[] array = new int[dataReadIn.size()];
        //     for(int a = 0; a < array.length; a++)
        //     {
        //     array[a] = dataReadIn.get(a);
        //     }

        int[] array = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
                79, 80, 81, 82, 83, 26, 28 };
        int length = array.length;
        System.out.println(length);
        System.out.println("Pivot Element: ");
        qsort.qSort(array, 0, length - 1);

        PrintWriter out = new PrintWriter(new FileWriter("OutputArray"));
        for (int i = 0; i < array.length; i++) {
            out.println(array[i] + " ");
        }

        out.close();
        long time2 = System.nanoTime();
        long time = (time2 - time1) / 1000;
        System.out.println("Total time: " + time + "ms");
    }
}
4

2 に答える 2

0

根本的な原因は、コードによってファイルが見つからないことです。

あなたの問題には2つの解決策があります:

  1. FileReader のインスタンス化時にファイルへの絶対パスを渡す
  2. ファイルがクラスパスにあることを確認し、getClass().getResourceAsStream を使用してそれを渡し、スキャナーをインスタンス化します (FileReader クラスは必要ありません)。
于 2013-02-28T21:01:43.337 に答える
0

*正規表現の内部では機能しない[]と確信しています(「機能しない」とは、1つ以上ではなく、実際の文字として扱われることを意味します)(1つ以上の空白文字を意味すると仮定します) )。外に置くことができます*: (1 つ以上の空白文字またはコンマに一致)

src.useDelimiter("[,\\s]+");

または、次のようにします: (コンマまたは 1 つ以上の空白文字に一致)

src.useDelimiter("(,|\\s+)");

上記のいずれかが実際に機能するかどうかは完全にはわかりません。使用する方が簡単かもしれません:(1つ以上の数字以外の文字)

src.useDelimiter("[^0-9]+");

を に変更したことに注意*してください+。そうしないと、スキャナは長さ 0 の文字列に一致し、整数ではなく数字ごとに返される可能性があります。

また、while ループはやや複雑すぎます。これはもっと簡単です:

int p = 0;
while (src.hasNext()) 
{
  dataReadIn.add(src.nextInt());
  System.out.println(p++);
}
于 2013-02-28T21:03:50.370 に答える