重载错误?

时间:2016-02-20 04:04:41

标签: java overloading bluej

以下是我目前的代码。我必须创建一个数组系统,通过使用我的Java类的重载来返回一些随机数的平均值。但是,当我编译时,BlueJ告诉我有一个“方法myAverage(int [])已经在类重载中定义”错误,我不知道该怎么做才能修复它。

谢谢!

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

4 个答案:

答案 0 :(得分:1)

  

&#34;方法myAverage(int [])已在类重载中定义&#34;错误

您有两种方法具有相同的签名

private static int myAverage (int [ ] arrayone)

删除任何一个。并将return类型更改为double,因为您要返回average类型的double

private static double myAverage (int [ ] arrayone)
  

我不明白你在说什么

在您的情况下,这不是方法重载。方法重载意味着

1.方法return类型必须不同。

前:

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

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

2.参数数量必须不同。

前:

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

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

3.参数类型必须不同。

前:

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

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

这两者中的任何一个都必须是真的。

答案 1 :(得分:0)

有两种方法可以在java

中重载该方法
  1. 通过更改参数数量
  2. 通过更改数据类型
  3. Method Overloading in Java

    private static int myAverage (int [ ] arrayone)private static int myAverage (int [ ] arraytwo)都具有相同的数据类型int和相同数量的参数,您必须更改一个方法的数据类型。

答案 2 :(得分:0)

@Satya是对的。

我将尝试更详细地解释。 https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

  

重载方法由数字和类型区分   传递给方法的参数。在代码示例中,绘制(String   s)和draw(int i)是不同且独特的方法,因为它们   需要不同的参数类型。

     

您不能声明多个具有相同名称和方法的方法   相同数字和类型的参数,因为编译器无法分辨   他们分开了。

     

编译器在区分时不考虑返回类型   方法,因此您不能声明具有相同签名的两个方法   即使他们有不同的回报类型。

@ arsb48你在同一签名中使用两种方法。参数名称不计入重载

private static int **myAverage** (**int [ ]** arrayone)
private static int **myAverage** (**int [ ]** arraytwo)

这样你只需要保留一种方法来完成这项工作

private static int **myAverage** (**int [ ]** array)

第2点@Satya建议将返回类型更改为double是为了提高结果的质量

int[] array = [1,2];
myAverage(array); //This will return 1 instead of 1.5 because convert double/float to in will lost precision.

以下是样本:

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

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

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

     return average;
}

public static void main (String [ ] args)
{
double average;
    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;
    }


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

average = myAverage(arraytwo);
    System.out.println("\n\nThe average of the second array is :  " + average);

} }

答案 3 :(得分:0)

想一想,

您创建了一个重载对象

像new overload(); //在Java中使用Camel Case作为类名。 然后在你打电话

之后

new overload()。myAverage([1,2,3]); //编译器如何知道您调用的方法,

另一个概念是java中的变量争论,它寻找向后兼容性。