Java 缺少带有for循环的return语句
我有一个二维布尔数组“poorSignal”,需要编写一个返回网格的方法,如果数组上的一个点为真,则显示X,如果为假,则显示O。这是我的密码: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)
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语句。我已相应地编辑了答案。在看到您的答案之前,我成功地编辑了答案,但谢谢,这非常有效!