Java 缺少带有for循环的return语句

Java 缺少带有for循环的return语句,java,arrays,Java,Arrays,我有一个二维布尔数组“poorSignal”,需要编写一个返回网格的方法,如果数组上的一个点为真,则显示X,如果为假,则显示O。这是我的密码: public String display() { for(int i = 0; i < mapSize; i++) { for(int j = 0; j < mapSize; j++) { if(poorSignal[i][j] = true)

我有一个二维布尔数组“poorSignal”,需要编写一个返回网格的方法,如果数组上的一个点为真,则显示X,如果为假,则显示O。这是我的密码:

    public String display()
{
    for(int i = 0; i < mapSize; i++)
    {
        for(int j = 0; j < mapSize; j++)
        {
            if(poorSignal[i][j] = true)
            {
                return "O ";
            }
            else
            {
                return "X ";
            }
        }
        return "\n";
    }
}
公共字符串显示()
{
对于(int i=0;i
当我编译时,它在方法的最后一行给出“缺少返回语句”。我也不确定“return”\n在打印阵列时是否可以添加新行


这是一个赋值问题,所以我不能直接打印它,也不能只打印布尔值-它必须是一个生成网格的方法。

编译器无法知道循环是否实际运行,因此必须在外部循环之外有一个return语句

但是,如果我看一下你的代码,我不确定返回是否是你真正想要的。如果要打印整个矩阵,可能需要使用StringBuilder,然后在循环中使用append方法。在外部循环之后,使用toString方法返回生成器的字符串表示形式,如下所示:

StringBuilder sb = new StringBuilder();
// loop
sb.append(someValue); 
sb.append('\n');
// after loop
return sb.toString();

在我看来,您不想为每个调用返回值。最好是创建一个StringBuilder并在StringBuilder内部构造一个网格(在每次外部迭代后使用换行符),然后在循环外部返回构造的StringBuilder的字符串

无论如何,如果您的mapSize为0,您将永远不会得到任何返回语句(并且由于它是运行时数据,编译器无法知道参数大小)

public String display(){
  StringBuilder sb = new StringBuilder();
  for(int i = 0; i < mapSize; i++){
    for(int j = 0; j < mapSize; j++){
        if(poorSignal[i][j]){ //don't use comparing to true if you have stored boolean values
            sb.append("O ");
        }else{
            sb.append("X ");
        }
    }
    sb.append("\n");
  }
  return sb.toString;
}
公共字符串显示(){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
当函数到达第一个返回值时,它将返回该值并退出。您应该执行以下操作:

public String display(int i, int j) {
    if(poorSignal[i][j]) {
        return "O \n";
    }
    return "X \n";
}
这样称呼它:

for(int i = 0; i < mapSize; i++) {
    for(int j = 0; j < mapSize; j++) {
        someStringVariable[i][j] = display(i, j);
    }
}
for(int i=0;i

这样,当poorSignal[i][j]为true时,它将返回“O\n”并停止执行其余的函数。如果为false,它将执行另一个返回。还要注意“poorSignal[i][j]”而不是“poorSignal[i][j]=true”,这实际上会将true分配给poorSignal[i][j]如果成功,则返回true,这可能总是会的。您可以编写“poorSignal[i][j]==true”,但poorSignal已经是一个布尔值,因此“==true”部分没有添加任何有趣的内容。

您需要在外部循环之外返回一个
值。这里还有
if(poorSignal[i][j]=true)
您正在分配而不是比较。使用
==
或简单地编写
if(poorSignal[i][j])
但是它应该返回什么?p.s.-谢谢你发现了这一点!正如你所知道的,当方法到达第一个
return
语句时,它就完成了,所以你的循环永远不会通过第一次迭代。如果
mapSize
是我不知道的,那么该方法会返回什么呢,谢谢。我在t的外部添加了“return null”循环允许它编译,但正如您所说,它只是打印第一件事。我不确定StringBuilder如何工作,但我会尝试使用它。当然,只在方法体的末尾返回(在第二个循环之后)并删除其他retur语句。我已相应地编辑了答案。在看到您的答案之前,我成功地编辑了答案,但谢谢,这非常有效!