一个循环Java中的多个方法

问题描述 投票:0回答:4

我想使用相同的循环运行多个方法,但我遇到了问题。

假设我有以下方法:

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被方法的两个实例操纵(这有什么意义吗?这是一个我希望遇到的问题,所以我'我不完全确定它会采取什么形状。我总是可以创建一个新问题。)

谢谢你的帮助!

java
4个回答
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);
    }
}

0
投票

首先,将一个+=委托给另一个方法是至少可以说的,但我只是表现得像在方法中更有意义的操作。

码:

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方法创建两者的副本,因此在第二种方法中,您将对本地副本执行+=操作,而不是您想要增加的实际值。


0
投票

我是编程的新手但我觉得最好使用一个对象并描述对象的每个事件,通过这样做,你的代码变得更短更清晰。


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);
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.