我有一个公共方法和一个私有方法。他们都应该返回int值。私有方法是完成所有工作的方法,公共方法是从主程序调用的方法。如何通过公共方法返回私有方法返回的结果?
就像这样
public int longer()
{
longer(a.length);
}
private int longer(int n)
{
int index
//find largest index recursively
//make recursive call longer(n-1)
return index;
}
我想将它传递给public方法,然后从那里返回它。我是否可以通过返回long.index从公共方法返回它;或类似的东西?
我想我应该澄清一下。不是指数。 idnex是根据传递给方法的内容计算的。公共和私人是因为它将成为一种递归方法。我将编辑我上面发布的内容,以使其准确地说明我想要做的事情。传入数组并以递归方式处理它。
答案 0 :(得分:4)
public int longer()
{
return longerInternal(a.length);
}
private int longerInternal(int n)
{
int index
//find largest index recursively
//make recursive call longer(n-1)
return index;
}
通过public
方法,您可以调用private
方法。我重命名了private
方法,以便您的方法没有命名冲突。一个简单的实现应该是这样的:
public class MyClass {
private int[] a;
public MyClass(int[] _a) {
a = _a;
}
public int longer()
{
return longerInternal(a.length);
}
private int longerInternal(int n)
{
int index;
//do recursive call
return index;
}
}
它可以像这样调用:
MyClass myClass = new MyClass(new int[]{1,2,3,4,5,10});
int result = myClass.longer();
答案 1 :(得分:0)
首先,您可能需要更好的功能名称。
您将调用public
函数getLonger(int n)
,然后将其传递给您的私人longer(int n)
函数。完成此功能后,它将返回getLonger(int n)
,然后返回给调用者。
答案 2 :(得分:0)
您在评论的回答中提到“调用者不需要访问类的所有内部工作。”
对我来说,这表明您想要使用界面。
创建一个描述将包含该秘密算法的类的接口:
package com.stevej;
public interface Longer {
public int longer();
}
使用您的秘密算法实现该界面:
package com.stevej;
public class LongerImpl implements Longer {
private int longer(int n){
return 0; // whatever
}
@Override
public int longer() {
return longer(5); // whatever
}
}
现在调用者只使用接口定义创建对象,保证没有他可以偶然访问的公开方法。该实现与该接口定义的对象挂钩:
package com.stevej;
public class LongerProcessor {
Longer longerImpl = new LongerImpl();
public LongerProcessor() {
super();
}
public int longer() {
return longerImpl.longer();
}
}
现在您可以根据需要随时重写Longer的实现。只要接口定义永远不会改变,调用者(LongerProcessor)就不会有问题。哎呀,你可以有两个或更多不同的实现(LongerImplRecursive,LongerImplBruteForce等等),每个实现Longer,并且在同一个程序中的不同位置都使用:
package com.stevej;
public class LongerProcessor {
Longer longerImpl;
public LongerProcessor(boolean useRecursive) {
super();
if (useRecursive){
longerImpl = new LongerImplRecursive();
}else{
longerImpl = new LongerImplBruteForce();
}
}
public int longer() {
return longerImpl.longer();
}
}
那有多酷?既然你把这个问题标记为“家庭作业”,我想知道问题是否应该让你考虑将合同(接口)与实现(实现类)分开。