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中做什么?谢谢!
答案 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
变量。有一些解决方案:
返回要更改的值:
public int myMethod(){
//your code
return val;
}
int val = myMethod();
将原始变量包装到类中:
class MyClass{
private int val;
}
public void myMethod(MyClass val){
//changing val here change its origin as well
}
创建一个1号数组:
int[] val = new int[1];
public void myMethod(int[] val){
//changing val here change its origin as well
}
需要注意的重点:Java有这个设计是有原因的。我提供的只是向您展示一些可能性。就个人而言,我不建议采用上述方法,而是在实现中尝试不同的设计以实现您的需求。