3

编辑:IntelliJ CE

我想要的:会写

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 - 搜索完整的代码示例,即。显示如何导入库的代码 - 搜索 YouTube 教程 - 阅读https://www.jetbrains.com/idea/help/library.html - 摆弄在 StdDraw 前面添加东西,例如。stblib.StdDraw

4

5 回答 5

3

您需要将 Stdlib 添加到您的 java 项目的本地库中。StdDraw 是这个 Stdlib 库的一部分。

  1. 首先你需要下载stdlib.jar 文件
  2. 然后你在你的java项目中创建一个文件夹(命名为“lib”)
  3. 将 stdlib.jar 复制并粘贴到 lib 文件夹中
  4. 使用 IntelliJ 打开您的 java 项目。
  5. 单击文件 -> 项目结构 -> 模块 -> 依赖项
  6. 单击 + 号并选择 Library -> Java
  7. 然后你需要在你的 lib 文件夹中选择你的 stdlib.jar

现在您可以使用 StdDraw 类。您不需要在文件顶部导入类。

于 2019-11-19T10:17:37.537 回答
1

你说:


 What I want: Be able to write

     setCanvas(500,500);

 Instead of

     StdDraw.setcanvas(500,500);

这不违反Java的基本规则吗?

你不能写

    setCanvas(500,500);

除非您在“StdDraw”类的其他方法调用“setCanvas”方法的“StdDraw”类中。

否则,您必须先创建“StdDraw”类的实例:

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

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

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

或者您以这种方式调用该方法:

    StdDraw.setcanvas(500,500);

这是Java的基础知识吧?

顺便说一句,如果“StdDraw”类与“Solver”类位于同一目录中,则无需导入即可使用。

我使用日食。我将“StdDraw”类与其他类放在同一个包中。这样,我就不必使用“import”关键字来导入“StdDraw”了。我只是以静态方式使用“StdDraw”的方法。仅当它不在同一个包中时才导入它。

仅供参考:我正在阅读 Robert Sedgewick 的“算法”,其中我从未见过像您想要的那样直接调用方法:

 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....

我希望这有帮助。

于 2017-12-23T18:00:39.857 回答
1

我一直使用 StdDraw

在您的包声明下,键入:

import stddraw.StdDraw;

那么你需要做的所有事情都应该工作,还要确保实际的类正确地在你的文件中

于 2015-11-19T20:14:26.107 回答
1

将此导入添加到您的课程中。

import static StdDraw.*;

这意味着StdDraw该类的所有静态方法都可以在不使用前缀的情况下使用StdDraw.它还假定StdDraw该类位于默认包中,这通常是不受欢迎的,但似乎是该库所做的。

于 2015-12-02T17:26:16.767 回答
0

您可以在此处下载库 stdlib.jar:http: //introcs.cs.princeton.edu/java/stdlib/

然后按照本教程导入它:https ://stackoverflow.com/a/32853178/2048865

于 2016-04-22T01:23:51.667 回答