1

次のコードをコンパイルしようとしています。

package week1;

public class ThreeSum {
    public static int count(int[] a) {
        // count triples that sum to 0
        int count = 0;
        for (int i = 0; i<a.length; i++) {
            for (int j = i+1; j < a.length; j++) {
                for (int k = j+1; k < a.length; k++) {
                    if (a[i] + a[j] + a[k] == 0) {
                        count++;
                    }
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] a = In.readInts(args[0]);
        StdOut.println(count(a));
    }
}

このコードは、week1 フォルダーの ThreeSum.java ファイルにあります。「In」と「StdOut」の両方のクラスは、./libフォルダーにあるパッケージ stdlib.jar にあります。私は常に IDE を使用してきましたが、コマンド ラインを使用することにしました。だから私の

javac -cp .:lib/stdlib.jar week1/ThreeSum.java

およびクラスパスパラメータの他のバリアントでは、エラーが返されます:

week1\ThreeSum.java:20: error: cannot find symbol
        int[] a = In.readInts(args[0]);
                  ^
  symbol:   variable In
  location: class ThreeSum

week1\ThreeSum.java:21: error: cannot find symbol
        StdOut.println(count(a));
        ^
  symbol:   variable StdOut
  location: class ThreeSum

私の場合、適切な -cp オプションはどのように見えるべきですか?

4

5 に答える 5

0

以下に示すようなディレクトリ構造があると思います

/src
    -- week1
          -- ThreeSum.java
/lib
    -- stdlib.jar

srcクラスファイルが含まれている場所。

$cd /src 
$javac -cp ".:../lib/stdlib.jar" week1.ThreeSum.java

私はこれがあなたを助けると思います!

PS: src の代わりにある種のルート ディレクトリがある場合、そのような場合は src をルート ディレクトリの名前に置き換えます。

于 2012-08-14T11:08:59.837 に答える
0

InおよびStdOut変数を定義またはインポートしません。コンパイラはそれらがどこにあり、何が何であるかを知らないため、これを行う必要があります。

于 2012-08-14T10:17:44.053 に答える
0

これを javac -cp .:lib/stdlib.jar:week1 week1/ThreeSum.java でコンパイルしました

したがって、week1 フォルダーを -cp オプションに追加する必要があります。

于 2012-08-14T11:37:13.457 に答える
0

実際、私は以前に同じ問題に直面していましたが、これを見つけました:stdlib.jarの問題

その一節の著者が言ったように、問題は stdlib.jar ファイル内のクラスがパッケージ構造になっていないためです。そのため、コードでそれらを使用しようとする場合、パッケージ構造でコードを編成しないでください。

私はEclipse IDEを使用しており、コードをパッケージの外に移動します(コードは「デフォルトパッケージ」に配置されます)。その後、動作します。もちろん、stdlib.jarを.classpathファイルに追加する必要があります。

于 2012-08-15T13:00:27.780 に答える
0

Inととは何StdOutですか? JDK にはそのようなクラスはありません。System.in と System.out があります。Java ドキュメントを参照してください。

readInts()にはメソッドがありませんSystem.in。おそらく、独自のカスタム クラスを意味しているのでしょう。

次のように記述し、その JAR 依存関係は忘れてください。

package week1;

/**
 * ThreeSum
 * @author mduffy
 * @since 8/14/12 1:53 PM
 * @link http://stackoverflow.com/questions/11950145/cant-correctly-setup-classpath#comment15924351_11950145
 */
public class ThreeSum {
    public static int count(int[] a) {
        // count triples that sum to 0
        int count = 0;
        for (int i = 0; i<a.length; i++) {
            for (int j = i+1; j < a.length; j++) {
                for (int k = j+1; k < a.length; k++) {
                    if (a[i] + a[j] + a[k] == 0) {
                        count++;
                    }
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] values = new int[args.length];
        int valuesCount = 0;
        for (String arg : args) {
            int value = Integer.valueOf(arg);
            values[valuesCount++] = value;
        }
        System.out.println(String.format("count: %d", count(values)));
    }
}
于 2012-08-14T10:17:05.843 に答える