以下是我目前的代码。我必须创建一个数组系统,通过使用我的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);
}
}
答案 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
中重载该方法 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中的变量争论,它寻找向后兼容性。