我想使用相同的循环运行多个方法,但我遇到了一个问题。
假设我有以下方法:
void xy1() {
int y1 = 0;
for (int x = 0; x < 10; x++){
y1 += x;
}
}
工作正常,我所要做的就是在构造函数中调用它。
现在,假设我也想使用另一种方法,但y的初始值不同:
void xy2() {
int y2 = 1;
for (int x = 0; x < 10; x++){
y2 += x;
}
}
也工作正常。
然而,我想要的是让两个方法在同一个循环中同时运行。一个明显的解决方案是将它们合并为一个方法:
void xy (){
int y1 = 0;
int y2 = 1;
for (int x = 0; x < 10; x++){
y1 += x;
y2 += x;
}
}
当引入越来越多的变量时,这会很快变得混乱。所以我尝试做的是将循环放在构造函数中,让它在每个循环中调用方法:
Constructor (){
int y1 = 0;
int y2 = 1;
for (int x = 0; x < 10; x++){
xy1(y1, x);
xy2(y2, x);
}
}
方法如下:
void xy1(int y1, int x) {
y1 += x;
}
void xy2(int y2, int x) {
y2 += x;
}
这个问题当然是每次构造函数调用方法时,它只是传递y1和y2的初始值,而不是它们当前应该具有的值。定义方法内部的初始值只会导致它们在每个循环中以相同的方式重置。
所以我需要的是,方法以某种方式记住新计算的y的最后一个值。我觉得有一个明显的解决方案我不知道...... 我尝试过使用谷歌,但我真的不知道要使用哪些搜索字词。
虽然我们在这里,但由于方法执行的计算是相同的,如果我可以简单地定义单个方法xy,并让构造函数使用不同的初始y值(在同样的循环)。这个问题就是必须有y的单独实例,所以要防止一个y被方法的两个实例操纵(这有什么意义吗?这是一个我希望遇到的问题,所以我'我不完全确定它会采取什么样的形状。我总是可以创建一个新问题。)
感谢您的帮助!
答案 0 :(得分:1)
您需要更改方法的签名以返回其计算值,如下所示。
int Calc(int InitialValue, int Increment){
int Result = InitialValue + Increment;
return Result;
}
执行此操作后,必须更改构造函数以将计算值分配给其局部变量,如下所示。
Constructor(){
int y1 = 0;
int y2 = 1;
for (int x = 0; x < 10; x++){
y1 = Calc(y1, x);
y2 = Calc(y2, x);
}
}
答案 1 :(得分:0)
首先,将一个+=
委托给另一个方法是至少可以说的,但我只是采取行动,这意味着在该方法中完成了更多的操作。< / p>
代码:
Constructor (){
int y1 = 0;
int y2 = 1;
for (int x = 0; x < 10; x++){
y1 = xy(y1, x);
y2 = xy(y2, x);
}
}
int xy(int y, int x) {
return y + x;
}
传递xy(y1,x)
之类的值会为xy
方法创建两者的副本,因此在第二种方法中,您将对本地副本执行+=
操作,而不是实际你想要增加的价值。
答案 2 :(得分:0)
在进入for循环之前,在方法的开头声明并实例化y1和y2变量。因此,当您输入for循环时,y1和y2的值将为0,但之后它将采用更新的y1和y2值,因为您没有再次声明它。
如果在for循环中调用方法xy1和xy2,因为你在方法xy1和xy2中声明变量,y1和y2的值将是初始值,因为变量是一遍又一遍地声明的每次循环执行。
可能的解决方案是:
public void calculate() {
int y1 = 0;
int y2 = 1;
for(int i = 0; i < 10; i++) {
y1 += i;
y2 += i;
System.out.printf("y1: %d, y2: %d \n", y1, y2);
}
}
答案 3 :(得分:0)
我是编程的新手,但我觉得使用对象并描述对象的每个事件会更好,通过这样做,您的代码变得更短更清晰。