所以,我对Java非常陌生,我有一个夏季大学课程,而且我们学习的是功能或方法,我在理解它们时遇到了一些麻烦。
在实验室中有一个问题我遇到了一些问题:
"编写一个名为MaxOfThree的方法,它接受三个整数 参数并返回三者中最大的一个。"
这是我到目前为止所做的,但我不确定是什么问题。我在最后添加了print语句,因为我在运行它时没有获得返回值,但现在我收到错误并且它没有编译。如果你能帮我理解方法,我会非常感激。例如,参数如何工作和调用它以及函数调用中包含的内容是否正确以及如何工作。当我阅读材料并希望以更多外行人的方式解释时,我感到很困惑。感谢您的帮助,这是我到目前为止所做的。
public class Test {
public static void main(String[] args) {
int a = 2, b = 3, c = 4;
int maxValue = max3(a, b, c);
}
public static int max3(int a, int b, int c) {
int max = a;
if (b > max) max = b;
if (c > max) max = c;
return max;
System.out.println(max);
}
}
以下是我收到的错误以防万一...
Test.java:16: error: unreachable statement
System.out.println(max);
^
Test.java:17: error: missing return statement
}
^
2 errors
答案 0 :(得分:3)
你不能在return语句之后有一个语句,或者更确切地说 - 在一个return语句(例如你的println)之后的一个语句永远不会被执行,因此是一个错误。
println应该在return语句之前。
public static int max3(int a, int b, int c) {
int max = a;
if (b > max) max = b;
if (c > max) max = c;
System.out.println(max);
return max;
}
答案 1 :(得分:1)
你需要把
System.out.println(max);
之前:
return max;
原因是你的return
无条件地结束了这个函数,因此编译器无法到达导致编译错误的println
。
答案 2 :(得分:1)
问题是编译器检测到执行永远不会到达System.out.println
行,所以它拒绝编译。行return max;
有效地结束了该方法,因此在此之后不会再运行该方法。
您应该将return max;
移到System.out.println
行以下。
答案 3 :(得分:1)
交换最后两行(return
和System
)。
答案 4 :(得分:1)
应该是这样的,return max
语句应该是你方法中的最后一行,如果你想要打印一些东西,因为return
语句会返回或调用调用他的行,所以你的打印声明无法到达。
public static int max3(int a, int b, int c) {
int max = a;
if (b > max) max = b;
if (c > max) max = c;
System.out.println(max);
return max;
}
答案 5 :(得分:1)
System.out.println()
后面有return
个语句。 return
结束方法,因此System.out.println()
永远不会发生,因为该方法已经结束。这就是你得到错误的原因。将System.out.println()
放在return
:
public static int max3(int a, int b, int c) {
int max = a;
if (b > max) max = b;
if (c > max) max = c;
System.out.println(max);
return max;
}
答案 6 :(得分:1)
我建议您将这些if
语句更改为一个带有简单for
向量的简单int[]
循环。这种解决方案更加优雅和灵活。此外,您已在代码中的任何位置int maxValue = max3(a, b, c);
初始化并且未使用。
public class Demo {
public static void main(String args[]) {
int[] numbers = new int[] {2, 3, 4};
System.out.println(maxValue(numbers));
}
public static int maxValue(int[] n) {
int max = n[0];
for (int i = 1; i < n.length; i++) {
if (n[i] > max) {
max = n[i];
}
}
return max;
}
}
但是,让我们对Java中的方法实现问题鞠躬。
在您通过Java领域的广阔之旅开始之前您应该熟悉两种方法:1) void方法,以及2)返回方法 。第一个负责做某事而不返回任何价值。例如,我们可以使用它们来设置应用程序字段的值,初始化GUI或其他操作。 void方法的使用可能如下所示:
/* method declaration */
void setValue(int value) {
someField = value;
}
/* method invocation */
setValue(5);
调用setValue(5)
后,someField
对象的值将为5
。但是,您必须记住类型兼容性,因此在这种情况下someField
不能是String
类型。
上面提到的第二种方法类型,即返回方法非常有用,当您希望该方法为您提供输出时,例如,对您已经给出的数据执行某些操作的结果你的方法。但当然没有必要为返回方法提供输入。无论如何,返回方法的使用可能如下所示:
/* method returns text You've given to it */
String getText(String text) {
return text;
}
/* method returns result of addition of three given int's */
int calculate(int a, int b, int c) {
return a + b + c;
}
/* method return a random number */
int createRandomNumber() {
Random random = new Random();
return random.nextInt();
}
你可以很容易地看到,有足够的空间进行即兴创作。基本和总结, void方法可以使用给定的对象,例如可以设置值并执行其他操作,但是不能返回任何STRAIGHT结果您可以使用。另一方面,返回方法为您提供物理结果,您可以在进一步的操作中使用,或者甚至在其他方法中使用,例如:
import java.util.Random;
public class Demo {
private static int someValue;
public static void main(String args[]) {
setValue(calculate(
createRandomNumber(),
createRandomNumber(),
createRandomNumber()));
System.out.println(someValue);
}
public static void setValue(int value) {
someValue = value;
}
public static int calculate(int a, int b, int c) {
return a + b + c;
}
public static int createRandomNumber() {
Random random = new Random();
return random.nextInt();
}
}
答案 7 :(得分:0)
您提供的代码的问题是您在使用return语句后尝试打印到控制台。这会导致您的程序永远不会到达该行:System.out.println(max);
答案 8 :(得分:0)
如前所述,在您返回某些内容后,该方法将结束。因此,不会执行方法最后一行的输出,因此请将其删除。 在方法之外编写以下内容时,可以打印方法的返回值:
System.out.println("highest value:" + max3(a,b,c));
所以现在,3个值被赋予了现在可以用它们做某事的方法。在完成计算之后,该方法返回一个值,现在可以将其打印到控制台。