让我们暂时不要担心静态/非静态,那是另一种蠕虫。让我们想想到目前为止您主要构建了哪些类型的程序;也许你设计了一个程序,比如计算两个 (x,y) 坐标之间的距离。
public static void main(String[] args) {
double x1 = 4.0;
double y1 = 3.0;
double x2 = 4.0;
double y2 = 4.0;
double x = Math.pow(x2 - x1, 2);
double y = Math.pow(y2 - y1, 2);
double distance = Math.sqrt(x+y);
System.out.println("The distance is" + distance);
}
现在,如果您想在更复杂的程序(例如视频游戏)中使用该代码来确定您的角色是否撞到墙上,会发生什么?现在您有 3 个坐标(A 和 B 是墙,C 是角色),您需要找出所有三个坐标(AB、AC 和 BC)之间的距离。为什么?因为如果 AB == AC + BC,那么我们的角色就撞墙了!这是一个视频,解释了为什么这对您真正有效:Collision Detection of 2D Points
我想重复输入相同的公式吗?还是浪费时间复制和粘贴?不,我很懒。这就是为什么我要让计算机为我做事。
然而,我可以做的是设计可以在我的大型主程序中运行的小型程序。这些被称为方法。
public static double distance(double x1, double y1, double x2, double y2) {
double x = Math.pow(x2 - x1, 2);
double y = Math.pow(y2 - y1, 2);
double dist = Math.sqrt(x+y);
return dist;
}
现在,请注意我做了两件事不同。
第一,我将变量命名为 dist 而不是 distance;最好不要将变量命名为与方法相同的名称。
二,我投了一个return statement。现在,想想我展示的第一个程序,它完成后在做什么?没有。它打印到屏幕上,就是这样。它关闭并清除内存。但是如果我以后需要距离怎么办?嗯,这就是 return 的用武之地。它确保在完成计算之后,在清除内存之前,它想把它还给你。
如果您了解了Math.random(),请注意您需要存储或使用它,否则它就一去不复返了。那是因为Math.random() 有一个返回类型 double。 System.out.println() 之类的返回类型为 void,因为它不“返回”任何内容,只是在我们的屏幕上显示文本。
方法背后的基本前提是:
<access modifier> <return type> <name> (<parameters>) { }
目前,访问修饰符应该保持public static。稍后您将了解课程。 return type 很重要,因为这就像您创建变量时一样;您必须告诉 Java 它是什么数据类型——对于方法也是如此。你必须告诉 Java 这个很小很小的程序会产生什么数据类型。 name 与您命名 variables 时没有什么不同,但现在,您必须添加 parameters,它们只是方法中的占位符,因为我们不知道会产生什么值/变量以后会用到!
现在我有了distance 作为方法,我可以在任何我想要的地方使用它三遍:
double distAB = distance(4, 0, 4, 4);
double distAC = distance(4, 0, 4, 2);
double distBC = distance(4, 4, 4, 2);
if (distAB == distAC + distCB)
System.out.println("Collision Detected");