Search code examples
javaoverloadingbluej

Overload error?


The below is my current code. I have to create a system of arrays that returns the averages of some random numbers through the use of overloading for my Java class. However, when I compile, BlueJ tells me that there is a "method myAverage(int []) is already defined in class overload" error, and I do not know what to do in order to fix it.

Thanks!

/**
 * Write a description of class overload here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */

import java.util.Scanner;
import java.lang.Math;

public class overload
{
private static int myAverage (int [ ] arrayone)
{
     int sum = 0;

     for(int i=0; i < arrayone.length ; i++)
     {
         sum = sum + arrayone[i];
     }
     double average = sum / arrayone.length;

     return average;
}

private static int myAverage (int [ ] arraytwo)
{
     int sum = 0;

     for(int i=0; i < arraytwo.length ; i++)
     {
         sum = sum + arraytwo[i];
     }
     double average = sum / arraytwo.length;

     return average;
}

public static void main (String [ ] args)
{
    Scanner scan = new Scanner(System.in);

    System.out.println("Enter any number below.");
    System.out.print("Enter the integer here:  ");
    int x = scan.nextInt();

    int [] arrayone = new int [x];

    for (int i = 0; i < arrayone.length; i++)
   {
       arrayone[ i ] = (int)(Math.random( ) * 100) + 1;
    }


    myAverage(arrayone);

    System.out.println("\n\nThe average of the first array is :  " + average);

    System.out.println("\n\nEnter any number below.");
    System.out.print("Enter the integer here:  ");
    int y = scan.nextInt();

    int [] arraytwo = new int [y];

    for (int i = 0; i < arraytwo.length; i++)
   {
       arraytwo[ i ] = (double)(Math.random( ) * 100) + 1;
    }

    myAverage(arraytwo);
}
}

Solution

  • "method myAverage(int []) is already defined in class overload" error

    You have two methods with same signature

    private static int myAverage (int [ ] arrayone)
    

    Just remove any one. And change the return type to double since you are returning average of type double.

    private static double myAverage (int [ ] arrayone)
    

    I do not understand what you are saying

    In your case, this is not a method overloading. Method overloading means

    1.Methods return type must be different.

    ex:

    private static double myAverage (int [ ] arrayone){ 
                    ^
    }
    
    private static int myAverage (int [ ] arrayone){
                     ^   
    }
    

    2.Number of arguments must be different.

    ex:

    private static int myAverage (int [ ] arrayone){
                                            ^
    }
    
    private static int myAverage (int [ ] arrayone, int [ ] arraytwo){
                                            ^                  ^
    }
    

    3.Type of arguments must be different.

    ex:

    private static int myAverage (double [ ] arrayone){
                                     ^
    }
    
    private static int myAverage (int [ ] arrayone){
                                    ^
    }
    

    Either of these one must be true.