理解Java方法

3

所以,我对Java非常陌生,我上了一门暑期大学课程,我们正在学习函数或方法,但我有些难以理解。

有一个实验问题让我有点困惑:

"编写一个名为MaxOfThree的方法,接受三个整数参数并返回其中最大的一个。"

这是我目前的代码,但我不确定哪里出了问题。我在结尾处添加了打印语句,因为当我运行它时没有得到返回值,但现在我遇到了错误,无法编译。如果您可以帮助我更好地理解方法,我将不胜感激。例如,参数如何工作,调用方式是否正确以及包含在函数调用中的内容是否正确以及其工作原理。当我阅读材料时,我总是感到困惑,希望能以更通俗易懂的方式解释。谢谢任何帮助,以下是我目前的代码。

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

哦,我忘了,这是我收到的错误信息,以防万一... Test.java:16: 错误:无法访问语句 System.out.println(max); ^ Test.java:17: 错误:缺少返回语句 } ^ 2个错误 - NoobCoderChick
一旦方法到达return语句,它将退出。因此,println不会被执行。 - Christian Tapia
1
作为一种风格,我认为将println放在main方法中而不是max3方法中会更好。 - emory
同意。一旦您获得了返回到maxValue的值,请在其后添加您的println()语句。您还需要更改变量名称,如下所示:System.out.println(maxValue); - takendarkk
除了打印语句,我创建的方法是正确的吗?因为我有点幸运。你能解释一下这个函数是如何工作的吗?此外,我认为返回max并不会在运行时显示三个整数中的最大值?我需要打印语句才行? - NoobCoderChick
我知道你是新手,但是你有没有尝试搜索“error: unreachable statement”?在StackOverflow上已经有多个关于这个错误的问题了。你真的没有在任何一个问题中找到任何可以让你走上正确轨道的东西吗? - Bruno
9个回答

4
你不能在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;
    }

3
说话方式不太好。如果返回语句有条件限制的话,你可以在返回语句后面加陈述语句。 - Dawood ibn Kareem

2
您需要放置 < /p >。
System.out.println(max);

之前:

return max;

原因是您的return无条件地结束了函数,因此编译器不会到达println,导致编译错误。

2

应该这样做,如果您想要打印一些内容,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;
        }

哇,你们真快!感谢所有的帮助,我会仔细阅读所有的评论,看看我是否还有问题。 - NoobCoderChick
@user3862586,没问题。 - bumbumpaw
我有点不清楚的是,当调用函数时,为什么需要maxValue?我只是因为看到其他方法才添加了它。为什么不像Python一样,我只是这样调用方法...max3(a, b, c);?为什么我需要一个新的(变量)呢? - NoobCoderChick
实际上,您可以使用 System.out.println(max3(a, b, c)),而 maxValue 更有用,当您想将其用于代码的其他行时。 - bumbumpaw
这是什么意思呢?maxValue的作用是创建一个新变量,供max3函数使用,并在程序的其他区域中作为具有max3函数值的变量使用吗?我是否可以在程序的其他区域中调用max3函数而不使用maxValue? - NoobCoderChick
1
是的,你可以调用函数,但更易于维护。想象一下,在任何你想要的地方输入max3(a, b, c)而不是maxValue,并且如果你想在你的maxValue上做一些事情,比如maxValue * 3,如果你不使用一个新变量,你必须去处理所有这个max3(a, b, c) * 3的代码行,这很混乱,难以维护。 - bumbumpaw

2
您在return之后放置了一个System.out.println()语句。由于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;
}

2

我建议您将这些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)无返回值方法,和2)有返回值方法。第一种方法负责执行某些操作而不返回任何值。例如,我们可以使用它们来设置应用程序字段的值、初始化GUI或其他操作。使用无返回值方法的示例如下:

/* 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();
}

您可以很容易地看到,有很多空间可以进行改进。基本上和总结一下,无返回值方法可以使用给定的对象,例如可以设置值和执行其他操作,但它们不会返回任何您可以使用的直接结果。另一方面,返回值方法提供给您实际结果,您可以在进一步操作中或甚至在其他方法中使用,例如:

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();
    }
}

bluevoxel -- 那不就是在调用方法的地方吗(int maxValue = max3(a, b, c);)? - NoobCoderChick
是的。您初始化了 maxValue 对象,但没有使用它。 - bluevoxel
接受的答案得分为负数?+1 - rpax

2
问题在于编译器检测到程序永远不会执行System.out.println语句,因此拒绝编译。 return max;语句实际上结束了该方法,因此此后不会再执行任何内容。
您应该将return max;语句移至System.out.println语句下方。

2

交换您最后两行的代码(returnSystem)。


1
你提供的代码问题在于,在使用返回语句之后,你尝试向控制台打印内容。这导致程序无法到达以下代码行:System.out.println(max);

我有点不清楚的是,当调用函数时,为什么需要maxValue?我只是因为看到其他方法才添加了它。为什么不像Python一样直接调用方法,像这样...max3(a, b, c);?为什么我需要一个新的(变量)呢? - NoobCoderChick
有没有人能够更清楚地为我解释一下这个方法和参数是如何工作的?我对文档有点困惑。 - NoobCoderChick

1

如前所述,当你返回某个值后,方法将结束。因此,方法中最后一行的输出语句将不会被执行,因此请将其删除。 当你在方法外编写以下内容时,可以打印出该方法的返回值:

System.out.println("highest value:" + max3(a,b,c));

现在,这个方法已经获取到了三个值,可以对它们进行操作。计算完毕后,方法会返回一个值,例如可以将其打印到控制台上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接