[英]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.