Java,改变变量值

时间:2017-10-09 21:47:16

标签: java

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

正如你所看到的,在canComplete函数中,我对类成员start进行了更改,而在commonMethod函数中,我将它用作循环变量,我的问题是,有没有办法可以在canComplete中进行更改函数和影响调用函数中的变量(这里是commonMethod函数)而不是使变量(start)成为一个类成员,我知道在C ++中,我可以传递指向函数的指针,但是我应该在Java中做什么?谢谢!

2 个答案:

答案 0 :(得分:2)

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

没有通过引用方法传递变量的原因是使代码质量更好的设计决策。无论您在何处看到f(x),都知道x未分配给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)); } 。编译器可以利用垃圾收集器。

Java SE示例:Matcher,PreparedStatement,ResultSet

{
  "ticket": {
    "subject":"{{ticket.title}}",
    "description":"{{ticket.description}}",
    "type":"{{ticket.ticket_type}}",
    "priority": "{{ticket.priority}}",
    "tags":"{{ticket.tags}}",
    "status": "{{ticket.status}}",
    "comment":"{{ticket.comments_formatted}}",
    "requester": { "name": "{{ticket.requester.name}}", "email": "{{ticket.requester.email}}" },
    "collaborators": ["{% capture emails %}{% for cc in ticket.ccs %}{% unless forloop.last %}{{ cc.email | append: '\", \"' }}{% else %}{{ cc.email }}{% endunless %}{% endfor %}{% endcapture %}{{ emails | strip_newlines | replace: '\\', ''}}"]
}

答案 1 :(得分:1)

  

有没有办法可以在canComplete函数中进行更改并影响调用函数中的变量(此处为commonMethod函数),而不是使变量(start)成为类成员,我知道在C ++中,我可以传递一个指向函数的指针

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

  1. 返回要更改的值:

    public int myMethod(){
        //your code
        return val;
    }
    int val = myMethod();
    
  2. 将原始变量包装到类中:

    class MyClass{
        private int val;
    }
    
    public void myMethod(MyClass val){
        //changing val here change its origin as well
    }
    
  3. 创建一个1号数组:

    int[] val = new int[1];
    public void myMethod(int[] val){
        //changing val here change its origin as well
    }
    
  4. 需要注意的重点:Java有这个设计是有原因的。我提供的只是向您展示一些可能性。就个人而言,我不建议采用上述方法,而是在实现中尝试不同的设计以实现您的需求。