Java 为什么赢了';这个定义不正确吗?
我试图编译这个定义,但我一直得到一个错误。错误显示: 发现1个错误: 文件:C:\Users\GreatOne\Desktop\Master Folder\04(j)\04-Copy\ObjectDemo2\CreateObjectDemo.java[行:32] 错误:无法将原点解析为变量Java 为什么赢了';这个定义不正确吗?,java,Java,我试图编译这个定义,但我一直得到一个错误。错误显示: 发现1个错误: 文件:C:\Users\GreatOne\Desktop\Master Folder\04(j)\04-Copy\ObjectDemo2\CreateObjectDemo.java[行:32] 错误:无法将原点解析为变量 /** * This class offers a main method to create and use sample Point and Rectangle objects. */ public
/**
* 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;
}
}
/*
在
move
方法或CreateObjectDemo
类中,没有任何称为origin
的局部变量或属性
如果您需要在类的开头声明一个名为origin
的属性:
private Point origin;
标准Java
Rectangle
类无法使用以下简单赋值设置原点:
origin = newOrigin;
除此之外,自Java1.1以来,move
方法一直被弃用
相反,您将需要以下内容:
rect_two.setLocation (origin_one);
有关更多详细信息,请参阅。在您的类中,没有任何名为
origin
的变量或参数。编译器会发出这些称为错误消息的重要信息。是的,它们有时很难阅读,但你应该培养阅读它们的技巧
[edwbuck@localhost ~]$ 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
。换句话说,您缺少特定点的import语句,或者没有在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
同样,您正在使用这个点
东西。使用导入让编译器知道在哪里可以找到它
错误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
与点
的问题相同,但现在您正在使用一个名为矩形
的未定义类或接口。使用import语句明确编译器应该在何处查找此矩形
错误8:
CreateObjectDemo.java:29: error: cannot find symbol
origin = newOrigin;
^
symbol: variable origin
location: class CreateObjectDemo
现在您正在使用一个名为origin
的变量,但您从未告诉编译器您将使用origin
(或它的类型)。添加点原点在使用变量origin
OK之前的某个地方进行code>声明,因此这里的问题是origin
在main
中声明为局部变量,而它需要成为CreateObjectDemo
类中的字段
但真正的问题是你把代码的缩进搞砸了。这使得发现origin
声明在错误的范围内变得更加困难
第1课:花时间正确缩进代码是值得的。从长远来看,您可以节省时间,并且在代码评审中也可以减少擦伤
第二课:阅读编译器消息的实际内容是值得的。。。试着理解它在说什么。在这种情况下,信息会非常清楚地告诉您问题所在。不幸的是,它不能确切地告诉你你做错了什么。(编译器不擅长计算出您要编写的内容。他们只是遵循规则,说明什么是有效的…并告诉您程序是否无效。)um,因为范围中没有称为origin的变量?这是我使用Java的第一天。有人能解释一下我是如何做到这一点的吗。origin
你从来没有定义过这一点,在课堂范围内,你认为从move
方法看,origin
是在哪里定义的?@user2510694如果这是你的第一天,我推荐一本好的入门教程或一本书。。。。。在这种情况下,半吊子和摇摆更可能伤害你……我以为这是一个放错位置的支架,但我不确定在哪里。看起来不像。虽然}
方法上方的移动
应该在左侧,但这只是一个小的缩进问题。+1。考虑到这个问题的“先问,永久停止思考”的性质,我不确定我是否会深入到这样的细节(即使是付费服务的一部分)。@TheBlastOne好吧,我倾向于同意不要过度填鸭式的观点,但很难真正知道互联网的另一端发生了什么。有时确实需要向人们展示如何读取编译器输出,因为并不清楚这些神秘的消息对每个人意味着什么(并且不是每个人都有学习如何编程的良好早期指南)。也许这是试图“教他们如何捕鱼”,而不是“今天喂他们一条鱼”;但是,如果没有鱼的剩余,就很难“教钓鱼”。我是一个人学的,所以除了这里我没有其他的帮助。所以我花了一点时间才明白你们想解释什么。请注意,你有一个非常强大的朋友:谷歌。以及存在的问题。到处都是教程。大量的文档。不客气,但是写一个有用的答案比自己先在网上做一些研究要花更多的时间。只是mho。问题是,我承认这一点。像你这样的新用户应该得到代表性的提升,而不是动力的下降,所以…@user2510694好吧,那么欢迎使用一种优秀的语言。您可能想阅读Oracle提供的非常好的教程。从“入门”开始,然后快速转到“学习java语言”,它将为您提供一个非常好的语言介绍,特别是如果您没有从其他地方获得什么帮助的话。您是否碰巧看到我在哪里弄乱了缩进?是的。move
方法缩进太深一级。