【问题标题】:Eclipse doesnt want to compile code in javaEclipse 不想在 java 中编译代码
【发布时间】:2014-10-24 21:31:45
【问题描述】:

这是我的代码的一部分: 我的日食是说我需要写一个退货声明。为什么?我已经有了,这个循环总是会找到至少一个活着的线程并返回 i,所以它应该结束函数并返回整数。非常感谢您的帮助。

public int SB(int dealer,int PL){   //
    boolean NotFound = true;
    int i;

    if(dealer != PL-1)
        i=dealer+1;
    else
        i=0;

    while(NotFound){
        if(TH[i].isAlive())
            return i;
        else{
            if(i < PL-1)
                i++;
            else
                i=0;}
    }
}

【问题讨论】:

    标签: java loops return


    【解决方案1】:

    您的方法被声明为返回一个int 值。这意味着您有有义务始终返回一个int 值,而不仅仅是在您的

    if(TH[i].isAlive())
            return i;
    

    声明。

    在您的情况下,如果 TH 数组中的线程处于活动状态,则返回一个值。 你可以做的是在你的方法结束时返回一个错误值,只有在TH 中没有线程处于活动状态时才会发生这种情况。

    例如,您可以在方法的末尾添加以下语句:

    return -1;
    

    只有在您的循环运行完整迭代时才会到达这部分代码。即使您知道总会有一个活动线程并且这部分代码实际上永远不会到达,您也需要将其放在那里以使编译器感到满意。

    此外,您的循环条件NotFound 永远不会在您的循环内更新。这意味着您有一个无限循环,以防TH 内没有线程处于活动状态。你根本不需要那个变量。您可以做的是将循环条件更改为:

    while(i < TH.length)
    

    或者,看起来变量PLTH 的长度,你可以输入:

    while(i < PL) 
    

    如果i 超出TH 的长度,这也可以保护您免受ArrayIndexOutOfBoundsException 的影响

    【讨论】:

    • 是的,尽管它们可能很聪明,但编译器有时(通常是故意)愚蠢:)
    【解决方案2】:

    您的回报隐藏在 if 语句中。如果如果永远不会成为真的怎么办?你必须在某个地方有一个默认的 return 语句,可能是在你的方法的底部或在 else 块中。

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多