インポートされたMavenのプロジェクトからのIntelliJからのデータ入力ファイルを読み込む問題(実行構成として、またはターミナルから)

PacificNW_Lover:

連合を検討しながら、博士ロバート・セッジウィック博士ケビン・ウェインは彼らの本やウェブサイトを経由して指示というアルゴリズムを探します:

https://algs4.cs.princeton.edu/10fundamentals/

私は、次ののpom.xmlで(私はのIntelliJ IDEAにインポート)Mavenプロジェクトを作成しました:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>edu.princeton.cs.algs4</groupId>
    <artifactId>algs4</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>2.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.2.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>10</source>
                    <target>10</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <show>private</show>  <!--javadoc shows all classes and members-->
                </configuration>
            </plugin>
        </plugins>

    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <stylesheetfile>${basedir}/src/main/javadoc/stylesheet.css</stylesheetfile>
                    <show>public</show>
                </configuration>
            </plugin>
        </plugins>
    </reporting>
</project>

プロジェクトファイルの構造:

algs4
|
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── edu
    │   │       └── princeton
    │   │           └── cs
    │   │               └── algs4
    │   │                   ├── QuickFindUF.java
    │   │                   ├── QuickUnionUF.java
    │   │                   ├── StdIn.java
    │   │                   ├── StdOut.java
    │   │                   └── WeightedQuickUnionUF.java
    │   └── resources
    │       ├── largeUF.txt
    │       ├── mediumUF.txt
    │       └── tinyUF.txt
    └── test
        └── java

QuickFindUF.java:

public class QuickFindUF {
    private int[] id;    // id[i] = component identifier of i
    private int count;   // number of components

    public QuickFindUF(int n) {
        count = n;
        id = new int[n];
        for (int i = 0; i < n; i++)
            id[i] = i;
    }

    public int count() {
        return count;
    }

    public int find(int p) {
        validate(p);
        return id[p];
    }

    // validate that p is a valid index
    private void validate(int p) {
        int n = id.length;
        if (p < 0 || p >= n) {
            throw new IllegalArgumentException("index " + p + " is not between 0 and " + (n-1));
        }
    }

    public void union(int p, int q) {
        validate(p);
        validate(q);
        int pID = id[p];   // needed for correctness
        int qID = id[q];   // to reduce the number of array accesses

        // p and q are already in the same component
        if (pID == qID) return;

        for (int i = 0; i < id.length; i++)
            if (id[i] == pID) id[i] = qID;
        count--;
    }

    public static void main(String[] args) {
        int n = StdIn.readInt();
        QuickFindUF uf = new QuickFindUF(n);
        while (!StdIn.isEmpty()) {
            int p = StdIn.readInt();
            int q = StdIn.readInt();
            if (uf.find(p) == uf.find(q)) continue;
            uf.union(p, q);
            StdOut.println(p + " " + q);
        }
        StdOut.println(uf.count() + " components");
    }

}

QuickUnionUF.java:

public class QuickUnionUF {
    private int[] parent;  // parent[i] = parent of i
    private int count;     // number of components

    public QuickUnionUF(int n) {
        parent = new int[n];
        count = n;
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
    }

    public int count() {
        return count;
    }

    public int find(int p) {
        validate(p);
        while (p != parent[p])
            p = parent[p];
        return p;
    }

    // validate that p is a valid index
    private void validate(int p) {
        int n = parent.length;
        if (p < 0 || p >= n) {
            throw new IllegalArgumentException("index " + p + " is not between 0 and " + (n-1));
        }
    }

    public void union(int p, int q) {
        int rootP = find(p);
        int rootQ = find(q);
        if (rootP == rootQ) return;
        parent[rootP] = rootQ; 
        count--;
    }

    public static void main(String[] args) {
        int n = StdIn.readInt();
        QuickUnionUF uf = new QuickUnionUF(n);
        while (!StdIn.isEmpty()) {
            int p = StdIn.readInt();
            int q = StdIn.readInt();
            if (uf.find(p) == uf.find(q)) continue;
            uf.union(p, q);
            StdOut.println(p + " " + q);
        }
        StdOut.println(uf.count() + " components");
    }

}

WeightedQuickUnionUF.java:

public class WeightedQuickUnionUF {
    private int[] parent;   // parent[i] = parent of i
    private int[] size;     // size[i] = number of elements in subtree rooted at i
    private int count;      // number of components

    public WeightedQuickUnionUF(int n) {
        count = n;
        parent = new int[n];
        size = new int[n];
        for (int i = 0; i < n; i++) {
            parent[i] = i;
            size[i] = 1;
        }
    }

    public int count() {
        return count;
    }

    public int find(int p) {
        validate(p);
        while (p != parent[p])
            p = parent[p];
        return p;
    }

    // validate that p is a valid index
    private void validate(int p) {
        int n = parent.length;
        if (p < 0 || p >= n) {
            throw new IllegalArgumentException("index " + p + " is not between 0 and " + (n-1));  
        }
    }

    public void union(int p, int q) {
        int rootP = find(p);
        int rootQ = find(q);
        if (rootP == rootQ) return;

        // make smaller root point to larger one
        if (size[rootP] < size[rootQ]) {
            parent[rootP] = rootQ;
            size[rootQ] += size[rootP];
        }
        else {
            parent[rootQ] = rootP;
            size[rootP] += size[rootQ];
        }
        count--;
    }

    public static void main(String[] args) {
        int n = StdIn.readInt();
        WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n);
        while (!StdIn.isEmpty()) {
            int p = StdIn.readInt();
            int q = StdIn.readInt();
            if (uf.find(p) == uf.find(q)) continue;
            uf.union(p, q);
            StdOut.println(p + " " + q);
        }
        StdOut.println(uf.count() + " components");
    }

}

STDINの実装で発見することができます:

https://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/StdIn.java.html


STDOUTの実装で発見することができます:

https://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/StdOut.java.html


データファイルはで見つけることができます:


私が行ったときmvn clean installか、mvn test

これは次のように、適切なターゲットディレクトリを作成しました:

target
    ├── classes
       ├── edu
       │   └── princeton
       │       └── cs
       │           └── algs4
       │               ├── QuickFindUF.class
       │               ├── QuickUnionUF.class
       │               ├── StdIn.class
       │               ├── StdOut.class
       │               └── WeightedQuickUnionUF.class
       ├── largeUF.txt
       ├── mediumUF.txt
       └── tinyUF.txt


私が作成したとMavenプロジェクトとしてのIntelliJにこれをインポートし、以来、私はmain()メソッドに引数としてTXTファイルをどのようにセットアップする(「スタンドアロンのJavaアプリケーションとして実行」を見つけ出すことができませんでした。

だから、私がやったことは、「MVNテスト」を発行しました

何も起こらなかった...ターミナルかのIntelliJ IDEAを経由して、これを行う方法はありますか?

CrazyCoder:

ターミナルの使用で実行されているためjava edu.princeton.cs.algs4.QuickFindUF < tinyUF.txtcat tinyUF.txt | java edu.princeton.cs.algs4.QuickFindUF

IntelliJ IDEAに実行するために使用からのリダイレクト入力をオプション。パスは作業ディレクトリからの相対であることに注意してください。

私はクレイジーコーダが呼ばれ、アプリケーションの構成を見ることができません

あなたはでのIntelliJ IDEAの新しいアプリケーションやジャーアプリケーションの構成を作成することができます+]ボタンをクリックします詳細については、ヘルプを参照してください

私はそれを試したときには、ターゲットディレクトリ内にあるjarファイルを見つけることができませんでした。

あなたが実行した後にJARファイルがターゲットディレクトリに利用できるようになりますmvn packageゴールを決めました。あなたは、コマンドラインのMavenからか、それを行うことができIDEからそれはすることも可能ですトリガ設定実行/デバッグする前にjarファイルを構築するのか、このMavenのゴールを追加し、実行/デバッグ構成の前に起動手順

また、同様の質問に対する私の他の回答を参照してくださいこれは、ラッパークラスを使用して、リダイレクトオプションを使用せずにそれを行うための別の方法を提案しています。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=394661&siteId=1