[英]Understanding Java methods
所以,我是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
你不能在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;
}
你需要把
System.out.println(max);
之前:
return max;
原因是你的return
无条件地结束了函数,因此编译器不会到达println
导致编译错误。
问题是编译器检测到执行永远不会到达System.out.println
行,所以它拒绝编译。 线路return max;
有效地结束了这个方法,所以在那之后再也没有了。
你应该移动return max;
到System.out.println
行下面。
交换最后两行( return
和System
)。
它应该是这样的,如果你想打印一些东西, return max
语句应该是你方法的最后一行,因为return
语句会返回或调用调用它的行,所以你的print语句不能到达。
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;
}
return
后有一个System.out.println()
语句。 return
结束方法,因此System.out.println()
永远不会发生,因为该方法将结束。 这就是你得到错误的原因。 在return
之前放入System.out.println()
:
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;
}
我建议你用简单的int[]
向量将那些if
语句改成一个简单的for
循环。 这种解决方案更加优雅和灵活。 另外,你初始化并且没有使用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();
}
你可以很容易地看到,有足够的空间进行即兴创作。 Basicaly和总结, 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();
}
}
您提供的代码的问题是您在使用return语句后尝试打印到控制台。 这会导致程序永远不会到达该行: System.out.println(max);
如前所述,在您返回某些内容后,该方法将结束。 因此,不会执行方法最后一行的输出,因此请将其删除。 在方法外部编写以下内容时,可以打印方法的返回值:
System.out.println("highest value:" + max3(a,b,c));
所以现在,3个值被赋予了现在可以用它们做某事的方法。 在完成计算之后,该方法返回一个值,现在可以将其打印到控制台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.