2013-07-03 3 views
-4

Я пытаюсь скомпилировать это определение, но я все время получаю сообщение об ошибке. Ошибка: 1 найденная ошибка: Файл: C: \ Users \ GreatOne \ Desktop \ Master Folder \ 04 (j) \ 04 - Копировать \ ObjectDemo2 \ CreateObjectDemo.java [строка: 32] Ошибка: происхождение не может быть разрешено к переменномуПочему это определение не компилируется?

/** 
* This class offers a main method to create and use sample Point and Rectangle objects. 
*/ 
public class CreateObjectDemo { 
    public static void main(String[] args) { 

     // Create a point object and two rectangle objects: 
     Point origin_one = new Point(23, 94); 
     Rectangle rect_one = new Rectangle(origin_one, 100, 200); 
     Rectangle rect_two = new Rectangle(50, 100); 

     // Display rect_one's width, height, and area: 
     System.out.printf("Width of rect_one: " , rect_one.width); 
     System.out.printf("Height of rect_one: " , rect_one.height); 
     System.out.printf("Area of rect_one: " , rect_one.area()); 

     // Set rect_two's position: 
     rect_two.origin = origin_one; 

     // Display rect_two's position: 
     System.out.printf("X Position of rect_two: " , rect_two.origin.x); 
     System.out.printf("Y Position of rect_two: " , rect_two.origin.y); 

     // Move rect_two and display its new position: 
     rect_two.move(40, 72); 
     System.out.printf("X Position of rect_two: " , rect_two.origin.x); 
     System.out.printf("Y Position of rect_two: " , rect_two.origin.y); 
     } 

     // A method for moving the rectangle: 
     public void move(Point newOrigin) { 
      origin = newOrigin; 
     } 
} 

/* 
+4

Ummm, потому что нет переменной называемое происхождение в сфере охвата? Довольно понятно. – OldProgrammer

+0

Это мой первый день работы с Java, может кто-то объяснить, как я это делаю. – user2510694

+0

'origin', вы никогда не определяете это, в классе – nachokk

ответ

1

Вы не имеете локальный переменные или атрибут, называемый origin в (соответственно) метод move или CreateObjectDemo класса.

Если вот что вам нужно объявить атрибут origin в начале внутри вашего класса:

private Point origin; 
+0

Я думал, что это неуместная скобка , но я не уверен где. – user2510694

+0

Не похоже. Хотя '' 'над методом' move' должен быть слева, но это лишь небольшая проблема с отступом. –

0

Стандарт Java Rectangle класс не имеет способ установить происхождение с помощью простого присваивания, как:

origin = newOrigin; 

И, сверх того, метод move является устаревшим с Java 1.1.

Вместо этого, вам нужно что-то вдоль линий:

rect_two.setLocation (origin_one); 

ВИДЕТЬ Rectangle online Java documentation более подробно.

1

В вашем классе у вас нет переменной или параметра с именем origin.

3

Компиляторы выдают эти замечательные вещи, называемые сообщениями об ошибках. Да, их иногда трудно читать, но вы должны научиться их читать.

[[email protected] ~]$ javac CreateObjectDemo.java 
CreateObjectDemo.java:28: error: cannot find symbol 
     public void move(Point newOrigin) { 
         ^
    symbol: class Point 
    location: class CreateObjectDemo 
CreateObjectDemo.java:5: error: cannot find symbol 
     Point origin_one = new Point(23, 94); 
     ^
    symbol: class Point 
    location: class CreateObjectDemo 
CreateObjectDemo.java:5: error: cannot find symbol 
     Point origin_one = new Point(23, 94); 
          ^
    symbol: class Point 
    location: class CreateObjectDemo 
CreateObjectDemo.java:6: error: cannot find symbol 
     Rectangle rect_one = new Rectangle(origin_one, 100, 200); 
     ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:6: error: cannot find symbol 
     Rectangle rect_one = new Rectangle(origin_one, 100, 200); 
           ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:7: error: cannot find symbol 
     Rectangle rect_two = new Rectangle(50, 100); 
     ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:7: error: cannot find symbol 
     Rectangle rect_two = new Rectangle(50, 100); 
           ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:29: error: cannot find symbol 
      origin = newOrigin; 
     ^
    symbol: variable origin 
    location: class CreateObjectDemo 
8 errors 

У вас есть 8 ошибок в вышеуказанном классе. Вот почему он не будет компилироваться.

Номер ошибки 1:

CreateObjectDemo.java:28: error: cannot find symbol 
     public void move(Point newOrigin) { 
         ^
    symbol: class Point 
    location: class CreateObjectDemo 

В строке 28, вы использовали класс, интерфейс или перечисление с именем Point, не говоря компилятору, что Point вы используете. Другими словами, вам не хватает оператора импорта для конкретного Point, или иначе он не определил его в файле CreateObjectDemo.java.

Ошибки 2 и 3:

symbol: class Point 
    location: class CreateObjectDemo 
CreateObjectDemo.java:5: error: cannot find symbol 
     Point origin_one = new Point(23, 94); 
     ^
    symbol: class Point 
    location: class CreateObjectDemo 
CreateObjectDemo.java:5: error: cannot find symbol 
     Point origin_one = new Point(23, 94); 
          ^
    symbol: class Point 
    location: class CreateObjectDemo 

Опять же, вы используете эту Point вещь. Используйте импорт, чтобы компилятор знал, где его найти.

Ошибки 4, 5, 6 и 7

symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:6: error: cannot find symbol 
     Rectangle rect_one = new Rectangle(origin_one, 100, 200); 
           ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:7: error: cannot find symbol 
     Rectangle rect_two = new Rectangle(50, 100); 
     ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:7: error: cannot find symbol 
     Rectangle rect_two = new Rectangle(50, 100); 
           ^
    symbol: class Rectangle 
    location: class CreateObjectDemo 
CreateObjectDemo.java:29: error: cannot find symbol 

Такая же проблема, как Point, но теперь вы используете неопределенный класс или интерфейс, называемый Rectangle. Используйте оператор import, чтобы он дал понять, где компилятор должен искать это Rectangle.

Ошибка 8:

CreateObjectDemo.java:29: error: cannot find symbol 
      origin = newOrigin; 
     ^
    symbol: variable origin 
    location: class CreateObjectDemo 

Теперь вы используете переменную называется origin, но вы никогда не сказали компилятору, что вы будете использовать origin (или то, что он типа есть). Добавьте объявление Point origin; где-нибудь перед использованием переменной origin.

+1

+1. Я не уверен, что я буду вдаваться в такие подробности (даже в рамках платной услуги), учитывая «сначала спросить, отключить мышление навсегда». – TheBlastOne

+0

@ TheBlastOne Ну, я склонен согласиться с чувством не слишком ложечного кормления, но трудно понять, что происходит на другой стороне Интернета. Иногда действительно нужно показать, как читать выход компилятора, так как неясно, что означают эти загадочные сообщения для всех (и не у всех есть хорошие ранние руководства по обучению программированию). Возможно, это попытка «научить их, как ловить рыбу», а не «кормить их рыбой сегодня»; но, это трудно "научить рыбалку", не сводя с избытка рыбы. –

+0

Я изучаю все это самостоятельно, поэтому у меня нет никакой помощи, кроме как здесь. Поэтому мне нужно немного понять, что вы, ребята, пытаетесь мне объяснить. – user2510694

0

ОК, поэтому проблема заключается в том, что origin объявлен как локальная переменная в main, когда это должно быть поле в классе CreateObjectDemo.

Но настоящая проблема заключается в том, что вы испортили отпечаток своего кода. И это сделало гораздо труднее обнаружить, что origin объявлен в неправильном объеме.

Занятие № 1: у вас есть время, чтобы правильно отложить ваш код. Вы экономите время в долгосрочной перспективе, и вы получите меньше синяков в своих обзорах кода.

Занятие № 2: это платит, чтобы прочитать, что на самом деле говорит компилятор ... и попытайтесь понять, что он говорит. В этом случае сообщение сообщает вам довольно четко, в чем проблема. К сожалению, он не может точно сказать, что вы сделали неправильно. (Составители не умеют разрабатывать то, что вам означают. Они просто следуют правилам, которые говорят, что действительно ... и говорят вам, нет ли программы.)

+0

Вам довелось увидеть, где я испортил мой отступ? – user2510694

+0

Yup. Метод 'move' имеет отступы на одном уровне слишком глубоко. –

Смежные вопросы