java从私有方法返回到公共方法

java从私有方法返回到公共方法,java,methods,return,Java,Methods,Return,我有一个公共方法和一个私有方法。它们都应该返回int值。私有方法是完成所有工作的方法,公共方法是从主程序调用的方法。如何通过public方法返回私有方法返回的结果 是这样的 public int longer() { longer(a.length); } private int longer(int n) { int index //find largest index recursively //make recursive call longer(n-1) ret

我有一个公共方法和一个私有方法。它们都应该返回int值。私有方法是完成所有工作的方法,公共方法是从主程序调用的方法。如何通过public方法返回私有方法返回的结果

是这样的

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方法,然后从那里返回它。我会通过说return longer.index从public方法返回它吗;还是类似的

我想我应该澄清一下。n不是索引。idnex是根据传入方法的内容计算的。公共和私有是因为它将是一个递归方法。我将编辑我在上面发布的内容,使其更准确地反映我想做的事情。传入数组并递归地处理它

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();
可以这样称呼:

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();

首先,您可能需要更好的函数名


你可以调用你的
public
函数
getLonger(intn)
,然后把它传递给你的private
longer(intn)
函数。完成此函数后,它将返回到
getLonger(int n)
,然后返回调用方。

您在对注释的回答中提到“调用方不需要访问类的所有内部工作。”

对我来说,这表明你想要使用一个接口

创建描述将包含该秘密算法的类的接口:

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

}
现在,您可以根据需要随时重写的实现。只要接口定义不变,调用方(LongerProcessor)就不会有问题。见鬼,您可以有两个或多个不同的实现(LongerImplRecursive、LongerImplBruteForce等),每个实现的时间更长,并且都在同一程序的不同位置使用:

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

}

那有多酷?既然您将这个问题标记为“家庭作业”,我想知道这个问题是否应该让您考虑将契约(接口)与实现(实现类)分开。

如果签名相同,为什么要使用私有方法?@AndyPryor:Black box。调用方不需要访问类的所有内部工作。
get
prefix适用于访问方。这里它正在做一些计算,我绝对不会给它命名
getLonger
你怎么知道它不是一个访问器?这就是评论所建议的“递归地查找最大索引/使递归调用变长(n-1)”哦,好的。我把它拿回去。希望你觉得我的语气粗鲁,如果你这样做了,我向你道歉。@HemalPandya:一开始我有点粗鲁,但我脸皮厚:)谢谢你的回答。当我有时间的时候,我会补充更多。祝你有美好的一天。