过载错误?

Overload error?

下面是我当前的代码。我必须创建一个数组系统,通过为我的 Java class 使用重载,returns 一些随机数的平均值。然而,当我编译时,BlueJ 告诉我有一个 "method myAverage(int []) is already defined in class overload" 错误,我不知道如何修复它。

谢谢!

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

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

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

private static int myAverage (int [ ] arrayone)

只需删除任何一个。并将 return 类型更改为 double 因为您要返回类型 double.

average
private static double myAverage (int [ ] arrayone)

I do not understand what you are saying

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

1.Methods return类型必须不同。

例如:

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

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

2.Number 个参数必须不同。

例如:

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

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

3.Type 个参数必须不同。

例如:

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

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

其中任何一个必须为真。

重载java

中的方法有两种方法
  1. 通过改变参数数量
  2. 通过改变数据类型

Method Overloading in Java

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

@Satya 是对的。

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

Overloaded methods are differentiated by the number and the type of the arguments passed into the method. In the code sample, draw(String s) and draw(int i) are distinct and unique methods because they require different argument types.

You cannot declare more than one method with the same name and the same number and type of arguments, because the compiler cannot tell them apart.

The compiler does not consider return type when differentiating methods, so you cannot declare two methods with the same signature even if they have a different return type.

@arsb48 你的两个方法在同一个签名中。参数名称不计为重载

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

这样你只需要保留一种方法就可以完成工作

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

第 2 点@Satya 建议将 return 类型更改为 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);

} }

想想,

你创建了一个重载的对象

喜欢新的重载(); // 在 java 中对 Class 个名称使用驼峰式大小写。 然后在你拨打

之后

new overload().myAverage([1,2,3]);// 编译器如何知道你调用的是哪个方法,

另一个概念是在 java 中寻找向后兼容性的可变参数。