NoobCoderChick
NoobCoderChick

Reputation: 627

Understanding Java methods

So, I'm very new to Java, I have a summer college course and we're on functions or methods and I'm having a bit of trouble understanding them.

There is a question on a lab I'm having a little trouble with:

"Write a method called MaxOfThree that accepts three integer parameters and returns the largest of the three."

This is what I have so far but I'm not sure whats wrong. I added the print statement at the end because I wasn't getting a return value when I ran it but now I'm getting errors and it's not compiling. If you could help me understand methods a bit more I'd greatly appreciate it. For instance how the parameters work and calling it and if what's included in the function call is correct and how that works. I just get so confused when I read through the material and was hoping for an explanation in more layman's terms. Thanks for any help, here is what I have so far.

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

Here are the errors I'm receiving just in case...

Test.java:16: error: unreachable statement
           System.out.println(max);
           ^
Test.java:17: error: missing return statement
        }
        ^
2 errors

Upvotes: 3

Views: 2476

Answers (9)

iProgramIt
iProgramIt

Reputation: 54

The issue with the code you provided is that you're trying to print to the console, after you use your return statement. This causes your program to never reach that line: System.out.println(max);

Upvotes: 1

bluevoxel
bluevoxel

Reputation: 5378

I suggest You to change those if statements into one simple for loop with simple int[] vector. This solution is much more elegant and flexible. Additionally, You initialized and not used anywhere int maxValue = max3(a, b, c); in Your code.

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

But let's bow for a moment on the problem of methods implementation in Java.

At the begining of Your journey through the vastness of the Java realm You should get familiar with two types of methods: 1) void methods, and 2) return methods. The first ones are responsible for doing something without returning any value. We can for example use them for setting values of the fields of our application, initializing GUI, or other operations. The use of the void method can look like this:

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

/* method invocation */
setValue(5);

After invocation of setValue(5) the value of the someField object will be 5. However, you have to remember about type compatibility, so in this case someField can not be e.g of String type.

Second method type mentioned above, i.e return method is very useful, when you expect the method to give You an output, e.g in result of some operations conducted on the data You've given to Your method. But of course it's not necessary, to provide for the return method an input. Anyway, the use of return method can look like this:

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

You can easily see, that there is plenty of space for improvisation. Basicaly and in summary, void methods can work with given objects, for example can set values and conduct other operations, but thay don't return any STRAIGHT results You can work with. Return methods, from the other hand, provide You physical results, which You can use in further operations, or even in other methods, for example:

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

Upvotes: 2

Eran
Eran

Reputation: 394146

You can't have a statement after the return statement, or to be more exact - a statement imediatelly after a return statement (such as your println) can never be executed, and is therefore an error.

The println should be before the return statement.

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

Upvotes: 4

Zach
Zach

Reputation: 4792

You have a System.out.println() statement after the return. return ends the method and so the System.out.println() will never happen because the method will have ended. That's why you are getting errors. Put the System.out.println() before the 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;
}

Upvotes: 2

schnaidar
schnaidar

Reputation: 299

As already been said, after you return something, the method will end. So your output in the last line of the method will not be executed, so remove it. You can print the returned value of the method when you write the following outside of the method:

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

So now, the 3 values are given to the method which can do something with them now. After it did the calculations, the method returns a value, which can now be printed to the console for example.

Upvotes: 1

David Xu
David Xu

Reputation: 5607

You need to put

System.out.println(max);

before:

return max;

the reason is your return unconditionally ends the function and therefore the compiler won't reach the println causing a compile error.

Upvotes: 2

bumbumpaw
bumbumpaw

Reputation: 2528

It should be like this, return max statement should be the last line in your method if you want to print something, because return statement goes back or invoke the line that called him,so your print statement is not reach.

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

Upvotes: 2

Alex
Alex

Reputation: 11579

Swap your last 2 lines (return and System).

Upvotes: 2

Dawood ibn Kareem
Dawood ibn Kareem

Reputation: 79875

The problem is that the compiler detects that execution will never reach the System.out.println line, so it refuses to compile. The line return max; effectively ends the method, so nothing more will run after that.

You should move return max; to below the System.out.println line.

Upvotes: 2

Related Questions