我一直在关注Pluralsight上的一些基本的Java教程,我已经达到了一个我不太明白导师试图解释什么的点,他似乎很快就会快速地进行一些练习这有点难以理解。
我有2个课程,一个是“主要”和一个“数学执行”。我完全理解MathExecution中发生了什么,但是我不太了解Main的某些方面,我将会介绍。我将在下面粘贴这两个类:
Main.java:
public class Main {
public static void main(String[] args) {
// double[] value1 = {100.0d, 18.0d, 30.0d, 27.0d};
// double[] value2 = {50.0d, 2.0d, 15.0d, 99.0d};
// char[] opCodes = {'d', 'm', 's', 'a'};
// double[] result = new double [opCodes.length];
MathEquation[] equations = new MathEquation[4];
equations[0] = create(100.00d, 50.0d, 'd');
equations[1] = create(25.0d, 92.0d, 'a');
equations[2] = create(225.0d, 17.0d, 's');
equations[3] = create(11.0d, 3.0d, 'm');
for (MathEquation equation: equations){
equation.execute();
System.out.print("Result: ");
System.out.println(equation.getResult());
}
}
public static MathEquation create(double value1, double value2, char opCode){
MathEquation equation = new MathEquation();
equation.setValue1(value1);
equation.setValue2(value2);
equation.setOpCode(opCode);
return equation;
}
}
MathExecution.java:
public class MathEquation {
private double value2;
private double value1;
private char opCode;
private double result;
public double getValue1() {return value1;}
public double getValue2() {return value2;}
public double getOpCode() {return opCode;}
public double getResult() {return result;}
public void setValue1(double value1) {this.value1=value1;}
public void setValue2(double value2) {this.value2=value2;}
public void setOpCode(char opCode) {this.opCode=opCode;}
public void execute(){
switch (opCode){
case 'd':
result = value2 != 0.0d ? value1 / value2: 0.0;
break;
case 'm':
result = value1 * value2;
break;
case 's':
result = value1 - value2;
break;
case 'a':
result = value1 + value2;
break;
default:
System.out.println("Something Broke!");
result = 0.00d;
break;
}
}
}
我不太明白(我认为我不这么做)这里到底发生了什么:
MathEquation[] equations = new MathEquation[4];
在查看它时,我假设我们正在创建一个新的MathEquation实例,调用是“方程式”并指定我们将传递4个数组(我们稍后会这样做)。
我要稍稍跳过......
我不太明白这里发生了什么:
public static MathEquation create
我理解我正在声明一个方法(?),它是公开的,这意味着它可以从任何地方访问(?),我不知道静态意味着什么。它被称为“创造”,但我不知道MathEquation在此声明中扮演的角色。
我想我明白这个方法的主体是怎么回事,
MathEquation equation = new MathEquation();
equation.setValue1(value1);
equation.setValue2(value2);
equation.setOpCode(opCode);
return equation;
我们正在创建另一个MathEquation实例并将其称为等式。然后传递声明“create”时指定的参数。
我不认为我理解return语句是如何完全运作的,为什么它返回整个类(方程式)?
查看“for”循环。我看到它使用之前返回的“等式”,但我不明白这里的语法:
MathEquation equation: equations
我想我理解最后一行......
System.out.println(equation.getResult());
我们只是打印getResult,它只是MathExecution类中的一个公共方法,它返回私有变量的值。
如果有人能够提供一些有关正在发生的事情的信息,我将非常感激。我已经重新播放了视频并尝试使用代码,但我似乎无法理解它是如何连接在一起的。
或者,如果你能指出我可以在回到这个例子之前获得更好理解的任何资源,那也是完美的。
非常感谢您阅读。
答案 0 :(得分:2)
以下是我的答案:
我不太明白(我认为我不这么做)这里到底发生了什么:
MathEquation[] equations = new MathEquation[4];
在查看它时,我假设我们正在创建一个新的MathEquation实例,
不,代码会创建一个包含四个引用的数组,并调用该数组equations
。创建了一个对象,数组及其索引都设置为null
。
我不太明白这里发生了什么:
public static MathEquation create
我知道我正在声明一个方法(?),它是公开的,这意味着它可以从任何地方访问(?),我不知道静态意味着什么。
这是超级基础,你应该再次阅读教程。 static
表示方法(或字段)未附加到类的任何实例。相反,它对系统中的所有对象都是通用的(全局的)。 MathEquation
是方法的返回类型:它返回一个MathEquation
对象。
这里的东西也是超级基础的,它只是调用方法。
MathEquation equation = new MathEquation();
equation.setValue1(value1);
equation.setValue2(value2);
equation.setOpCode(opCode);
return equation;
我们正在创建另一个MathEquation实例并将其称为等式。然后传递声明“创建”时指定的参数。我不认为我理解return语句是如何完全工作的,为什么它返回整个类(方程式)?
创建MathEquation
的另一个实例是正确的。传递参数......好吧,但是更简单的是它只是在刚刚创建的对象上调用方法。它使用的是在调用create
时给出的参数,当然。 return语句只能选择返回“整个类”或原语(如int
或char
),这是您唯一的选择。实际上,只需将引用返回给整个对象,它就会返回“整个对象”。
查看“for”循环。我看到它使用之前返回的“等式”,但我不明白这里的语法:
MathEquation equation : equations
这只是一个for-each
循环,请阅读文档:https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
我想我理解最后一行......
System.out.println(equation.getResult());
我们只是打印getResult,它只是MathExecution类中的一个公共方法,它返回私有变量的值。
正确。
答案 1 :(得分:0)
我会用简单的语言解释它。如果您找到了一个您不了解或不理解的单词,请在Java Tutorials中查找。
作为基础,我们将首先查看create
方法。第一行(签名)说的是,你有一个可以从任何地方调用的方法(public
),不需要实例来调用它(static
,我认为你应该jsut查看the definition,我现在无法提出简单的解释),返回MathEquation
,称为create
,需要三个parameters
作为输入才能创建返回值。
public static MathEquation create(double value1, double value2, char opCode)
然后该方法继续:
// take the MathEquation class and create an instance by using the constructor
MathEquation equation = new MathEquation();
// give the equation the necessary values it needs to be executed later
equation.setValue1(value1);
equation.setValue2(value2);
equation.setOpCode(opCode);
// return that equation to the caller of the method for them to use
return equation;
}
好的,主要方法是怎么回事?
首先,我们创建一个数组(它是一种列表),它有4个MathEquation
的空间,称为equations
。现在空了!
MathEquation[] equations = new MathEquation[4];
这就是为什么我们必须在这里填写它。我们使用上面的create
方法获取MathEquation
的4个实例,并将它们放入数组的空插槽(0-3)中。
equations[0] = create(100.00d, 50.0d, 'd');
equations[1] = create(25.0d, 92.0d, 'a');
equations[2] = create(225.0d, 17.0d, 's');
equations[3] = create(11.0d, 3.0d, 'm');
然后我们接受我们的数组,使用for
循环来查看其中的每个方程,并做一些事情。 for
循环如下所示:"对于等式中的每个等式"
for (MathEquation equation: equations) {
对于等式,我们要求它自己解决。这将把结果存储在方程式对象中。然后,我们将该结果的等式打印出来并将其打印到控制台。
equation.execute();
System.out.print("Result: ");
System.out.println(equation.getResult());
答案 2 :(得分:0)
在查看它时,我假设我们正在创建一个新的MathEquation实例,调用的是#34;方程式"并指定我们将传递4个数组(我们稍后会这样做)。
不,你实际上是在创建一个包含4个项目的单个数组。它不会创建MathEquation
(或数组中的任何项目)的任何实例 - 您只需创建数组。
以这种方式思考:假设我在酒店预订团体。我打电话给酒店告诉他们将有4个家庭进来。经理"搁置" 4个房间彼此相邻。显然,经理"搁置" 4个房间实际上并没有创造房间或家庭,也没有让家庭神奇地出现在房间里。它只是说,一旦家庭到来,经理打算把它们放在那里。
一个有趣的特征是这些家庭彼此相邻:如果您知道第一个家庭所在的房间,您可以立即计算其他家庭所在的房间。例如,如果家庭1在房间100,那么显然家庭2必须在101房间,家庭3必须在房间102,家庭4必须在房间103.
现在,这里是static
的类比 - 假设酒店连锁店有一个网站,可以让您进行预订。该网站与整个酒店链相关联,不只是该酒店。这就是static
所做的事情 - 它与班级(通过类比,整个连锁酒店)相关联,而不仅仅是那个特定的对象(或酒店)。