理解Java方法

理解Java方法,java,methods,Java,Methods,所以,我对Java非常陌生,我有一个暑期大学课程,我们学习函数或方法,我在理解它们时有点困难 我在实验室遇到了一个小问题: 编写一个名为maxOftree的方法,该方法接受三个整数 参数,并返回三个参数中最大的。” 这就是我目前所知道的,但我不确定出了什么问题。我在最后添加了print语句,因为我运行它时没有得到返回值,但现在我得到了错误,它没有编译。如果你能帮我多了解一些方法,我将不胜感激。例如,参数如何工作和调用,函数调用中包含的内容是否正确以及如何工作。当我通读这些材料时,我感到很困惑,希

所以,我对Java非常陌生,我有一个暑期大学课程,我们学习函数或方法,我在理解它们时有点困难

我在实验室遇到了一个小问题:

编写一个名为maxOftree的方法,该方法接受三个整数 参数,并返回三个参数中最大的。”

这就是我目前所知道的,但我不确定出了什么问题。我在最后添加了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)之后的语句imediatelly永远不能执行,因此是一个错误

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
行,因此拒绝编译。行
返回最大值有效地结束了该方法,因此在此之后将不再运行任何操作


您应该移动
返回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()
将永远不会发生,因为该方法将结束。这就是为什么会出现错误。将
系统.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;
}

您提供的代码的问题是,在使用return语句之后,您试图打印到控制台。这会导致程序永远无法到达该行:
System.out.println(max)

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

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

现在,这3个值被赋予了一个方法,这个方法现在可以用它们做点什么了。完成计算后,该方法返回一个值,例如,现在可以将该值打印到控制台

我建议您将那些
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;
    }
}
调用
setValue(5)
后,
someField
对象的值将为
5
。但是,您必须记住类型兼容性,因此在这种情况下,
someField
不能是例如
String
type

上面提到的第二种方法类型,即返回方法非常有用,当您希望该方法为您提供输出时,例如在对您提供给您的方法的数据进行某些操作的结果中。但是当然没有必要为返回方法提供输入。无论如何,返回方法的使用可以如下所示:

/* method declaration */
void setValue(int value) {
    someField = value;
}

/* method invocation */
setValue(5);
/* 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方法可以处理给定的对象,例如,可以设置值和执行其他操作,但它们不会返回任何可以处理的直接结果返回方法,从另一方面来说,提供物理结果,您可以在进一步的操作中使用,甚至在其他方法中使用,例如:

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

哦,我忘了,这是我收到的错误,以防万一。。。Test.java:16:错误:无法访问语句System.out.println(max);^Test.java:17:error:missing return语句}^2 errors一旦到达
return
语句,该方法将退出。因此,
println
将不会执行。就风格而言,我认为最好将println放在main方法中,而不是放在max3方法中。同意。获得返回到
maxValue
的值后,在后面添加println()语句。您还需要更改变量名
System.out.println(maxValue)那么,除了print语句之外,我是否正确创建了该方法?鉴于我在这方面有点幸运,你能准确地解释一下函数是如何工作的吗?另外,我认为return max在运行它时并没有实际显示三个int中的max int?为此我需要打印报表?这不是一个好的表达方式。如果返回是有条件的,那么返回后可能会有语句。哇,你们太快了!感谢所有的帮助,我将通读所有的评论,看看是否还有问题。@user3862586,没问题。我有点不清楚的是调用函数时为什么需要maxValue?我只是补充了一下,因为我见过其他的方法。为什么不(像python)我只是调用方法li