2015-03-19 1 views
2

Редактора: IntelliJ CEКак правильно импортировать 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 - Поиск ПОЛНОЕ примеры кода, т.е. код, который показывает, как импортировать библиотеку - Поиск учебников 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. –

+0

Когда я делаю «импорт статического StdDraw»; IntelliJ говорит мне: «java:». ожидаемый "на строке, которую я импортирую StdDraw – Morgantuan

+0

Переместите StdDraw в другой пакет, вы не можете сделать статический импорт из пакета по умолчанию, см. этот [отчет об ошибке] (http://bugs.java.com/bugdatabase/view_bug .do? bug_id = 4989710). –

ответ

-1

Я использую StdDraw все время

Под вашим пакет декларации, типа:

import stddraw.StdDraw; 

тогда все вещи вам нужно сделать, должен работать, а также убедитесь, что фактический класс находится внутри вашего файла

-1

Добавьте этот импорт в свой класс.

import static StdDraw.*; 

Что это означает, что все статические методы StdDraw класса могут быть использованы без префиксов их StdDraw. Он также предполагает, что StdDraw класс находится в пакете по умолчанию, который, как правило, с неодобрением, но, кажется, что это библиотека сделала.

+0

Это недостаточно информации, чтобы полностью ответить на вопрос. OP должен знать: что такое ''? – Barett

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», вам не нужно импортировать его для его использования.

Я использую затмение. Я поместил класс «StdDraw» в один и тот же пакет с другими классами. Таким образом, мне не нужно использовать ключевое слово «import» для импорта «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.... 

Надеюсь, это поможет.