-5

只是一个声明:我是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。但我的第一个条件是 if 并且我返回它。所以在那之后我在第一次返回后放置 else 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;
}
4

9 回答 9

2

return 语句应放在大括号内。

于 2013-04-18T12:40:17.650 回答
2

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

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

正如您所建议的,我没有为您提供完整的代码,而是让您了解“return”语句的用法。

在您的代码中,您在一个块中编写了两个“返回”语句。

于 2013-04-18T12:59:13.317 回答
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 then else

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

伪代码 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 块)

于 2013-04-18T12:40:51.707 回答
1

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

于 2013-04-18T12:41:26.167 回答
0

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

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

所以如果你写

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

这是错误的,因为如果 flag 为 false 方法将不会返回任何内容。所以你必须在区块结束时else或之后提供回报if

于 2013-04-18T12:41:41.357 回答
0

使用 s 只存储一次值的事实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();
}
于 2013-04-18T12:42:04.597 回答
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。
  • ……

您需要涵盖所有情况。

于 2013-04-18T12:44:40.263 回答
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 个唯一值怎么样?您应该检查更多情况(所有不同、所有相同或只有一种不同)。

于 2013-04-18T13:17:39.570 回答
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 语句。

于 2013-04-18T12:51:35.690 回答