如何使用main和test类创建包?

时间:2018-02-24 11:33:09

标签: java

我正在创建一个PageRank类,它依赖于我自己编写的一些线性代数运算。由于我无法学习JUnit测试,我决定为我的PageRank类编写自己的测试类。不幸的是,它并不像我预期的那么容易。这是我的基本想法:

的PageRank / PageRankTest.java:

package pagerank;

public class PageRankTester{

    public static PageRank pagerank = new PageRank();

    public static void main(String[] args){
        testNorm();
        testSubtract();
        testDot();
        testMatrixMul();
    }

    private static void testNorm(){
        // Tests pagerank.norm()
    }

    private static void testSubtract(){
        // Tests pagerank.subtract()
    }    

    public static void testDot(){
        // Tests pagerank.dot()
    }
    public static void testMatrixMul(){
        // Tests pagerank.matrixMul()
    }
}

的PageRank / PageRank.java:

package pagerank;

import java.util.*;
import java.io.*;

public class PageRank {

    public PageRank( String filename ) {
    }
    /* --------------------------------------------- */

    private double[] dot(double[] x, double[][] P){
        //returns dot product between vector and matrix
        return res;
    }

    private double[][] matrixMul(double x, double[][] J){
        //returns x*J
        return J;
    }

    private double[] subtract(double[] x, double[] y){
        //returns elementwise x-y
        return v;
    }

    private double norm(double[] x){
        // returns euclidean norm of x
        return norm;
    }

    public static void main( String[] args ) {
        if ( args.length != 1 ) {
            System.err.println( "Please give the name of the link file" );
        }
        else {
            new PageRank( args[0] );
        }
    }
}

这会导致许多问题。

1:使用javac PageRankTester.java编译测试类时出现以下错误:

$ javac PageRankTester.java
PageRankTester.java:4: error: cannot find symbol
    public static PageRank pagerank = new PageRank();
                  ^
  symbol:   class PageRank
  location: class PageRankTester
PageRankTester.java:4: error: cannot find symbol
    public static PageRank pagerank = new PageRank();
                                          ^
  symbol:   class PageRank
  location: class PageRankTester
2 errors

我想当你把所有东西都放在一个你不需要导入的包中时?我唯一的结论是我正在编写错误的方法,因为我已经在包中工作,我不需要从另一个包中导入任何东西。

2:编译PageRank.java工作正常,但在尝试使用java PageRank运行PageRank时,我得到:

$ java PageRank
Error: Could not find or load main class PageRank
Caused by: java.lang.NoClassDefFoundError: pagerank/PageRank (wrong name: PageRank)

我已尝试java -cp . PageRank,以防止此错误,但没有成功。

在这里实现我想要的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您在编译时遇到问题,请开始使用ide eclipseintelij Idea

PageRank类无法编译

另一个问题出在您的包裹名称中,请尝试:

java pagerank.PageRank

因此,如果你要创建一个像这样的文件夹结构:

src/
  pagerank/
    PageRank.java
    PageRankTester.java

<强> PageRank.java

package pagerank;

public class PageRank {
  public PageRank(String filename) {}


  public static void main(String[] args) {
    if (args.length != 1) {
      System.err.println("Please give the name of the link file");
    } else {
      new PageRank(args[0]);
    }
  }
}

<强> PageRankTester.java

package pagerank;

public class PageRankTester{

    public static PageRank pagerank = new PageRank("filename");

    public static void main(String[] args){
        testNorm();
        testSubtract();
        testDot();
        testMatrixMul();
    }

    private static void testNorm(){
        // Tests pagerank.norm()
    }

    private static void testSubtract(){
        // Tests pagerank.subtract()
    }    

    public static void testDot(){
        // Tests pagerank.dot()
    }
    public static void testMatrixMul(){
        // Tests pagerank.matrixMul()
    }
}

在cmd cd中进入src文件夹并执行:

 javac pagerank/*.java

 java pagerank.PageRank
 java pagerank.PageRankTester