如果语句返回循环

时间:2013-04-18 12:37:51

标签: java

只是一个声明:我是java的初学者。

编写一个名为numUnique的方法,该方法将三个整数作为参数,并返回三者中唯一整数的数量。例如,调用numUnique(18,3,4)应该返回3,因为参数有3个不同的值。相比之下,调用numUnique(6,7,6)将返回2,因为三个参数中只有2个唯一数字:6和7。

public int numUnique(int x,int y,int z){
    if(x==y||y==z){
    }
    return 1;

    else if(x!=y||y!=z){

    }
    return 2;
    
}

我对if和return之间的关系感到非常困惑。我总是把return放在if语句中。但是我不明白为什么它会生成一条错误信息。如果有什么东西满足,我会在循环中返回。为什么呢错误。但另一方面,println语句可以放在for循环中。

另一个问题,因为这个问题,我试图尝试使用if else.But我的第一个条件是if和我返回它。所以我放置了其他如果在第一次返回后,它再次给我错误。

我将感谢有人会向我解释,我将自行更改代码。请不要给我完整的代码。谢谢。

编辑* 顺便说一句,我阅读了所有的评论,我终于理解了。这是我自己编写的代码(:

public static int numUnique(int x, int y, int z) {
    if(x==y && y==z){
        return 1;
    }else if(x==y && y!=z || y==z && z!=x ||  x==z && y!=z ){
        return 2;
    }
    return 3;
}

9 个答案:

答案 0 :(得分:2)

return语句应放在大括号内。

答案 1 :(得分:2)

为了让您清楚地了解“返回”语句,我会说在一个代码块中只能有一个返回语句,即{...}。

“return”语句用于返回调用者,它必须是块的最后一个语句。

正如您所建议的那样,我没有向您提供完整的代码,而是让您了解“return”声明的用法。

在你的代码中,你在一个块中写了两个“return”语句。

答案 2 :(得分:1)

您想要的语法如下所示:

   public static  int numUnique(int x,int y,int z){
        if(x==y||y==z){
            return 1;
        }else if(x!=y||y!=z){
            return 2;
        }
        return 3;
    }

也许这段代码更容易理解:

public static int numUnique(int x, int y, int z) {
    if (x == y && x == z && y == z) {
        return 3;
    } else if (x != y && x != z && y != z) {
        return 1;
    }
    return 2;
}

伪代码

if( condition ){
 // do something if condition is true
}

伪代码如果那么

if( condition){
 // do something
}else{
 // do something if condition is false
}

Pseudocode elseif

if( condition ){
// do something
}else if(condition2){
// do something, only if condition2 is true, if condition 1 is true, you never will be here
}else{
// do something, your only here if the two conditions above were false
}

一个return语句,会不时地执行(有一些异常,例如:finally块)

答案 3 :(得分:1)

我认为您需要在if-else块中写入return语句,否则它将始终返回1

答案 4 :(得分:0)

因为如果是条件流,我可能会或可能不会运行(取决于条件),

但是如果你的方法有返回类型,它应该在每种情况下返回。但在后一种情况下,(如果条件是假的),它不会找到任何回报。

所以,如果你写

public int value(boolean flag){
if(flag){
return 0; //only reachable if flag is true, else value can not return from here
}
}

这是错误的,因为如果flag为false,则不会返回任何内容。因此,您必须在elseif阻止结束后提供退货

答案 5 :(得分:0)

使用Set只存储一次值的事实......

public int numUnique(int x,int y,int z){
    Set<Integer> number = new HashSet<Integer>();
    number.add(x);
    number.add(y);
    number.add(z);

    return numbers.size();
}

答案 6 :(得分:0)

首先,你的回复超出了if陈述,它们应该在里面。因为如果你写:

if(Something) {

}
return 1;

然后将始终返回1,因为if为空。如果您只想return 1 if(Something),请将其写在if正文中:

if(Something) {
    return 1;
}

其次,你的逻辑不好。你需要检查:

  • 如果x == y == z那么它们都是平等的。
  • 如果x == y且x!= z那么你应该返回2。
  • 如果x!= y!= z那么你应该返回0。
  • ....

您需要涵盖所有情况。

答案 7 :(得分:0)

您必须将return语句放在if和else中的块中

public int numUnique(int x,int y,int z){
  if(x==y||y==z){
    return 1;
  }
  else if(x!=y||y!=z){
    return 2;
  }
}

它失败了,因为编译器认为你在​​每个路径中都没有函数的return语句。

答案 8 :(得分:0)

您的代码格式不正确:

if-else语句如下:

if { code }
else { code }

因此,ifelse块成对。但你有:

if (condition) { code }
code
else { code }
code

因此,单词code上方的else会破坏此对,else仍然是孤立的,因此您的程序在语法上是不正确的。

你“想”做:

if (x==y || y == z) {
   return 1;
}
else if (x != y || y != z) {
   return 2;
}

此外,如果if(或else)块只有一行,则可以删除括号:

if (x==y || y == z)
   return 1;
else if (x != y || y != z)
   return 2;

更重要的是,你的算法不能解决你的问题,¿3个独特的价值怎么样?您应该检查更多情况(所有差异,所有等于或仅一个不同)。