【问题标题】:Method for returning even numbers [duplicate]返回偶数的方法[重复]
【发布时间】:2017-07-25 06:04:28
【问题描述】:

这个方法不会编译,不知道为什么。错误是:

找不到符号变量 i

int i 在 for 循环中定义。该方法应返回int aint b 之间的偶数。

代码:

public int partall(int a, int b){
    int partall;
    int største; 
    int minste;
    if(a == b){
        partall = 0;
    }else{
        if(a>b) {
        største = a;
        minste = b; 
        }else if(a<b){
            minste = a;
            største = b;

            for(int i = minste;  i<= største; i++){
                if(i % 2 == 0) {
                     partall = i;
                }
            }

        }

    }
    return i;
}

【问题讨论】:

  • i 仅在循环范围内可见,因为这是声明它的地方。在方法内部声明i,它将在return 语句中可见。
  • 我们尝试在 int minste 下写入 int i ,但仍然出现错误。
  • 同样的错误还是不同的错误?
  • 在下面阅读我的解决方案。添加 i 后出现的新错误是因为您需要对其进行初始化。

标签: java if-statement for-loop int


【解决方案1】:

您应该初始化“partall”并返回该变量:

public int partall(int a, int b){
    int partall = 0;
    int største; 
    int minste;
    if(a == b){
        partall = 0;
    }else {
        if(a>b) {
        største = a;
        minste = b; 
    } else if(a<b) {
        minste = a;
        største = b;

    for(int i = minste;  i<= største; i++){
        if(i % 2 == 0) {
            partall = i;
        }
    }

   }

}
return partall;

}

【讨论】:

    【解决方案2】:

    i 仅在for 循环范围内可见,而在外部不可见。当您执行return i; 时,它超出了范围。所以你需要将声明放在for 块之外。

    解决方案:

    public int partall(int a, int b){
        int partall;
        int største; 
        int minste;
        int i = 0; 
        if(a == b){
            partall = 0;
        }else{
            if(a>b) {
                største = a;
                minste = b; 
            }else if(a<b){
                minste = a;
                største = b;
    
                for(i = minste;  i<= største; i++){
                    if(i % 2 == 0) {
                        partall = i;
                    }
                }
    
            }
    
        }
        return i;
    }
    

    【讨论】:

    • 不幸的是,我们仍然遇到同样的错误,说 int i 没有定义
    • @Akarlsen 您需要在进行更改后重新编译您的代码。它可能会选择旧的 .class 文件
    • 不,这确实会产生编译错误,因为 i 可能没有被初始化。它需要初始化为一个值。
    • @MaxWeinzierl 现在我更新了答案,所以它总是被初始化。
    【解决方案3】:

    变量ireturn 语句的范围内不可见。您需要在for 循环之外和if-else 之外声明i,以便它在return 范围内可见。尝试在声明其余变量的函数顶部声明 int i = 0;(甚至 int i = minste; 并删除下面的赋值)。

    【讨论】:

      【解决方案4】:

      您返回的i 仅在for loop 中具有作用域,不在此之外。

      从实现来看,我认为您可能希望返回 partall 而不是 i

      用一些东西初始化partall,即

      int partall = 0;

      在最后一行

      return partall;

      应该可以的

      【讨论】:

      • 谢谢你,这项工作就像一个魅力
      猜你喜欢
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      相关资源
      最近更新 更多