如何在另一种方法中调用变量?

时间:2017-05-20 18:13:47

标签: java variables methods scope

我知道变量maxreps不在我的main方法的范围内,所以我希望它通过创建一个对象来调用它,但它仍然无法获得maxreps。 我怎么能解决这个问题?

public class LUIS{
    public void james(){
        int current=1;
        int maxreps=1;

        String adriana = "aabbddddnsspkrrgg";
        for(int a=0; a<adriana.length(); a++){
            if(adriana.charAt(a) == adriana.charAt(a+1)){
                current++;
                if(maxreps>=current){
                    maxreps=current;
                }
            }
        }
    }
        public static void main(String[] args){
        LUIS fritz = new LUIS();
        final int drei = fritz.james;

        System.out.println(maxreps);
    }
}

2 个答案:

答案 0 :(得分:2)

如您所述,作用域阻止了查看在不同作用域中定义的变量。您可以通过返回值

来解决您的特定问题
public int james(){  // <-- change from void to an int return
    int current=1;
    int maxreps=1;

    String adriana = "aabbddddnsspkrrgg";
    for(int a=0; a<adriana.length(); a++){
        if(adriana.charAt(a) == adriana.charAt(a+1)){
            current++;
            if(maxreps>=current){
                maxreps=current;
            }
        }
    }

    return maxreps;  // <-- return the value
}

然后在main方法中将变量设置为返回值。

或者,您可以将其定义为类变量,但有理由避免这样做 - 全局变量通常很糟糕。

答案 1 :(得分:2)

1)final int drei = fritz.james;无法编译。您不能以这种方式调用方法(没有())。

2)此外,james()方法应该有更有意义的名称 此方法计算同一字符的最大系列。所以,你可以称之为computeMaxSeries()

3)而是作为一种空方法,你可以返回最大系列号。

4)除此之外:

    for (int a = 0; a < adriana.length(); a++) {
        if (adriana.charAt(a) == adriana.charAt(a + 1)) {

将抛出StringIndexOutOfBoundsException,因为adriana.charAt(a + 1)指的是超出字符串长度有效限制的索引。
您应该迭代直到最后一个索引-1:

for (int a = 0; a < adriana.length()-1; a++) {

5)最后这不一致,因为您依靠maxreps代替maxreps来更新current

if(maxreps>=current){
   maxreps=current;
}

你应该写:

if (current >= maxreps) {
    maxreps = current;
}

所以,最后方法是:

public int computeMaxSeries(){
    int current=1;
    int maxreps=1;

    String adriana = "aabbddddnsspkrrgg";
    for(int a=0; a<adriana.length()-1; a++){
        if(adriana.charAt(a) == adriana.charAt(a+1)){
            current++;
            if (current >= maxreps) {
               maxreps = current;
            }   
        }
    }
   return maxreps;
}

现在你可以做到:

    final int maxreps = fritz.computeMaxSeries();
    System.out.println(maxreps);