首页 / JAVA / 返回语句不适用于Java
返回语句不适用于Java
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了返回语句不适用于Java,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1955字,纯文字阅读大概需要3分钟。
内容图文
![返回语句不适用于Java](/upload/InfoBanner/zyjiaocheng/805/ae27b43d7b8f40ab981fe2f0d0192356.jpg)
我一直在尝试一个小代码来学习java中的递归.写下面的方法使用递归实现线性搜索.但是当我使用数组调用此方法并将变量作为输入进行搜索时,当方法到达return语句时,它不会退出该方法.相反,在if循环中执行语句之后,它再次进入else循环.
我有两个问题.
1)为什么没有退出达到’返回’的方法?
2)为什么在执行if循环后进入else循环?
我在这做错了什么?有人可以看看并帮助我.
linearRecursiveSearch(Constants.INPUT_INT_ARRAY, Constants.INPUT_INT_ARRAY[0], Constants.NUMBER_TO_SEARCH);
int count = 0;
public <T> void linearRecursiveSearch(T[] array,T tmp, T value) {
count++;
if (tmp == value) {
System.out.println("The value has been found");
return;
} else {
for (int i = count; i < array.length; i++) {
T tmp1 = array[i];
linearRecursiveSearch(array,tmp1, value);
}
}
}
解决方法:
1) Why is it not exiting the method on reaching ‘return’ ?
它退出调用return的方法.
2) Why is it entering the else loop after executing the if loop ?
调用return的方法不是调用else循环.但是,该方法还有其他调用,并且在调用返回的方法完成后,它们排队等待恢复.
令人困惑的是,该方法有多个调用,并且它们并非都调用return.
也许这将有助于回忆当方法调用发生时会发生什么,即将当前方法的状态推送到堆栈上.然后在堆栈上为新调用保留空间,然后调用该方法.该方法完成后,其状态将从堆栈中弹出.它的返回值可用,并且恢复现在位于堆栈顶部的先前方法.
在递归期间,可以将相同的方法推送到堆栈数百次.这意味着该方法可以被调用数百次,然后当堆栈展开时,每个方法将被恢复数百次.因此,仅仅因为当前被调用的方法调用return(和退出),这并不意味着所有其他排队的实例也将如此.实际上,它实际上意味着先前的方法(调用此方法的方法)将恢复.
请考虑以下版本,请注意它不包含for循环或任何全局状态:
public <T> int linearRecursiveSearch(T[] array, T targetValue) {
return linearRecursiveSearch( array, targetValue, 0 );
}
private <T> int linearRecursiveSearch(T[] array, T targetValue, int i) {
if ( i >= array.length ) {
return -1;
} else if (array[i] == targetValue) {
// == or .equals, or Comparator? task for the reader
return i;
} else {
return linearRecursiveSearch(array, targetValue,i+1);
}
}
内容总结
以上是互联网集市为您收集整理的返回语句不适用于Java全部内容,希望文章能够帮你解决返回语句不适用于Java所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。