【问题标题】:Return statement cannot find the local variable inside the methodreturn 语句在方法内部找不到局部变量
【发布时间】:2016-10-14 16:29:46
【问题描述】:

我是一名二年级的 CS 学生,正在尝试解决一个简单的方法。逻辑相当简单,但不知何故我仍然得到一个错误,虽然我不知道这里有什么问题。

问题:

课程开始:

private Integer dt[];
private int size;
IntManager(int k){
    dt = new Integer[k]; 
    size = 0;
}

类内部的方法:

public Integer max(){
  //return largest value in dt; null if size == 0
    if (size == 0) return null;
    else{
        Integer biggest = dt[0];//trouble here; changing to int won't help & var name also  
        for (int j = 0; j < size ; j++) {
            if (dt[j] < biggest) biggest = dt[j];
        }
    }
    return biggest;
}

主类:

IntManager num = new IntManager(100);
    for (int j = 0; j < 20 ; j++) {
        int x = (int)(Math.random()*10);
        num.add(x);
    }
    num.add(57);
    System.out.println(num);

    System.out.println(num.found(5));//Ignore this


    System.out.println(num.max());

【问题讨论】:

  • return biggest; 移动到else 分支内。
  • @Turamarth 谢谢你成功了。虽然很奇怪
  • @GheorgheDonciu:你会用相同的文本替换你的错误图像吗?人们使用文本更容易(它可以复制+粘贴,它可以与屏幕阅读器一起使用,搜索引擎会选择它)。谢谢。

标签: java class oop


【解决方案1】:

您的 biggest 变量在 ifelse 范围内定义,因此在该段之外不可见 将 Integer 声明为孔方法变量...

示例:

public Integer max(){
      Integer biggest=null;
        if (size != 0) {
            Integer biggest = dt[0]; 

            for (int j = 0; j < size ; j++) {
                if (dt[j] < biggest) biggest = dt[j];
            }
        }
        return biggest;
    }

【讨论】:

  • 我试过了,但该方法没有执行它应该做的事情。它只是返回 0 而不是 57。这里有些东西不能正常工作。还有其他建议吗?
【解决方案2】:

问题出在你的积木上

public Integer max(){
 //return largest value in dt; null if size == 0
    if (size == 0) return null;
    else{
        Integer biggest = dt[0];//trouble here; changing to int won't help     & var name also  
        for (int j = 0; j < size ; j++) {
            if (dt[j] < biggest) biggest = dt[j];
        }
    }
    return biggest;
}

你在 else 块的范围内声明了最大的,所以当你到达你的 return 语句时它是不可见的。要纠正它,你应该有类似的东西:

public Integer max(){
 //return largest value in dt; null if size == 0
    Integer biggest = dt[0]
    if (size == 0) return null;
    else{
        ;//trouble here; changing to int won't help     & var name also  
        for (int j = 0; j < size ; j++) {
            if (dt[j] < biggest) biggest = dt[j];
        }
    }
    return biggest;
}

【讨论】:

  • 我知道这一点,我尝试过,但没有帮助。还有其他建议吗?
  • 你有if (dt[j] &lt; biggest) biggest = dt[j];,它正在检查dt[j]是否小于小于biggest。应该是相反的if (dt[j] &gt; biggest) biggest = dt[j];@GheorgheDonciu
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多