2015-03-19 218 views
2

编辑:CE的IntelliJ如何正确导入stddraw?

我想要什么:能写

setCanvas(500,500); 

而不是

StdDraw.setcanvas(500,500); 

问题:我无法弄清楚如何正确导入Stddraw库。 如果我只是做

import StdDraw; 

的IntelliJ告诉我:“StdDraw”符号不能得到解决。 如果我注释掉,我可以调用StdDraw的方法,但我必须写 StdDraw.setcanvas(500,500);

StdDraw.java与Solver.java位于同一目录中。

代码:

import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.util.ArrayList; 
    import java.util.Scanner; 
// import StdDraw;//StdDraw is in the same directory as Solver 

public class Solver { 

    public static void main(String[] args) { 
     System.out.println("Solver main is running."); 

     StdDraw.setCanvasSize(500, 500); 
     StdDraw.setPenColor(StdDraw.RED); 
     StdDraw.filledRectangle(0,0,10,10); 
    } 
} 

我已经尝试过: - 确保Stddraw.java是在同一目录下的文件,我编译和运行 - 看http://introcs.cs.princeton.edu/java/stdlib/javadoc/StdDraw.html - 搜索COMPLETE代码示例,即。显示如何导入库的代码 - 搜索YouTube教程 - 读https://www.jetbrains.com/idea/help/library.html - 在StdDraw前添加东西,例如: stblib.StdDraw

+0

您将需要执行静态导入,请参阅此[问题](http://stackoverflow.com/q/162187/269300)和http://docs.oracle.com/javase/1.5.0 /docs/guide/language/static-import.html。 – 2015-03-19 03:30:27

+0

当我做“导入静态StdDraw;” IntelliJ告诉我:“java:'。'预计“的行,我导入StdDraw – Morgantuan 2015-03-19 05:13:03

+0

移动StdDraw到不同的包,你不能从默认包静态导入,看到这个[bug报告](http://bugs.java.com/bugdatabase/view_bug 。做?bug_id = 4989710)。 – 2015-03-19 05:15:36

回答

-1

我用StdDraw所有的时间

在你的包声明,类型:

import stddraw.StdDraw; 

那么所有你需要做的东西应该工作,并且确保其实际的类里面您的档案正确

-1

将此导入到您的班级。

import static StdDraw.*; 

它的意思是,StdDraw类的所有静态方法可以在不与StdDraw.前缀来使用,这也假定StdDraw类是默认的包,这是一般不赞成,但似乎什么图书馆已经完成。

+0

这是没有足够的信息来完全回答这个问题。 OP需要知道:什么是''? – Barett 2015-12-02 18:28:46

0

你说:


What I want: Be able to write 

    setCanvas(500,500); 

Instead of 

    StdDraw.setcanvas(500,500); 

是不是那违背了Java的基本规则?

你不能写

setCanvas(500,500); 

,除非你是“StdDraw”类里的“StdDraw”类的其他方法叫“setCanvas”方法中。

否则,要么你必须首先创建了“StdDraw”类的一个实例:

e.g. StdDraw stdDraw = new StdDraw(); 

,然后使用该实例调用方法:

e.g. stdDraw.setCanvas(500,500); 

或调用方法这样:

StdDraw.setcanvas(500,500); 

这是Java的基础知识吧?顺便说一句,如果“StdDraw”类与“Solver”类在同一个目录下,则不必导入它就可以使用它。

我使用eclipse。我将类“StdDraw”与其他类放在同一个包中。这样,我不必使用“导入”关键词来导入“StdDraw”。我只是用静态的方式使用“StdDraw”的方法。只有当它不在同一个包中时才导入它。

FYI:我在读罗伯特·塞奇威克的“算法”中,我从来没有见过像的方式方法,任何你想要的直拨电话:

uniform(N-i); or 
printf("%.2f\n", x); or 
point(x0, y0); or 
line(x0, y0, x1, y1); or 
circle(x, y, r); or 
square(x, y, r); or 
polygon(x, y); etc. etc.... 

相反,它总是:

StdRandom.uniform(N-i); or 
StdOut.printf("%.2f\n", x); or 
StdDraw.point(x0, y0); or 
StdDraw.line(x0, y0, x1, y1); or 
StdDraw.circle(x, y, r); or 
StdDraw.square(x, y, r); or 
StdDraw.polygon(x, y); etc. etc.... 

我希望这有助于。