Java,更改变量值 公共级加油站{ int start=0; 公共int公共方法(int[]气体,int[]成本){ int len=气体长度; while(this.start

Java,更改变量值 公共级加油站{ int start=0; 公共int公共方法(int[]气体,int[]成本){ int len=气体长度; while(this.start,java,Java,如您所见,在canComplete函数中,我对类成员start进行了更改,在commonMethod函数中,我将其用作循环变量,我的问题是,是否有一种方法可以更改canComplete函数并影响调用方函数中的变量(这里是commonMethod函数),而不是创建变量(start)一个类成员,我知道C++中,我可以传递一个函数的指针,但是我应该用java做什么呢?谢谢 一个典型的java模式是让一个类搜索或计算某些内容,并保持类似于start字段的状态。在布尔成功的情况下,可以提供类似于getSt

如您所见,在canComplete函数中,我对类成员start进行了更改,在commonMethod函数中,我将其用作循环变量,我的问题是,是否有一种方法可以更改canComplete函数并影响调用方函数中的变量(这里是commonMethod函数),而不是创建变量(start)一个类成员,我知道C++中,我可以传递一个函数的指针,但是我应该用java做什么呢?谢谢

一个典型的java模式是让一个类搜索或计算某些内容,并保持类似于
start
字段的状态。在布尔成功的情况下,可以提供类似于
getStart()
的内容

不让变量通过引用传递给方法的原因是为了提高代码质量的设计决策。无论您在哪里看到
f(x)
您都知道
x
没有被分配到。编译器可以利用垃圾收集器

JavaSE示例:Matcher、PreparedStatement、ResultSet

public class gas_station {
    int start = 0;

    public int commonMethod (int[] gas, int[] cost) {
        int len = gas.length;

        while (this.start < len) {
            if (canComplete(this.start, gas, cost)) {
                return this.start;
            }
        }

        return -1;
    }

    public boolean canComplete (int index, int[] gas, int[] cost) {
        int len = gas.length, sum = 0;
        for (int i = index; i < len + index; i++) {
            sum += gas[i % len] - cost[i % len];
            if (sum < 0) {
                this.start = i + 1;
                return false;
            }
        }

        return true;
    }
}

有没有一种方法可以改变CANTALNT函数并影响调用函数中的变量(这里是普通方法函数),而不是生成变量(start)类成员,我知道C++中,我可以传递一个指针到函数

在Java中不能传递指针或引用。所有参数都按值传递。但是,如果希望在方法中更改
int
变量。有几种变通解决方案:

  • 返回要更改的值:

    Pattern pat = Pattern.compile("(\\w+)\\s*=\\s*[1-9X]+;");
    Matcher m = pat.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1) + "=" + m.group(2));
    }
    
  • 将基元变量包装到类中:

    public int myMethod(){
        //your code
        return val;
    }
    int val = myMethod();
    
  • 创建大小为1的阵列:

    class MyClass{
        private int val;
    }
    
    public void myMethod(MyClass val){
        //changing val here change its origin as well
    }
    

  • 需要注意的要点:Java有这样的设计是有原因的。我所提供的只是向你们展示一些可能性。就我个人而言,我不推荐使用上述方法,而是在实现中尝试不同的设计来实现所需的功能。

    不,Java纯粹是一种。您可以修改成员变量,可以返回值,也可以传入可修改的对象,但不能在调用代码中修改变量。好的,我知道如果我传递8个基本类型以外的参数,如数组,更改将反映在调用函数中,因此无法处理int等基本类型,如果我传递的是整数类型的参数而不是int类型的参数,该怎么办?
    Integer
    只是一个包装器,是不可变的,但您可以传递数组或感谢!我只是想确定一下。明白了。@Haobo_X您可以通过单击我答案旁边的空心勾号来接受我的解决方案。我接受了,但不知道为什么不能显示。@Haobo_X现在呢?
    int[] val = new int[1];
    public void myMethod(int[] val){
        //changing val here change its origin as well
    }