为啥在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误?

Posted

技术标签:

【中文标题】为啥在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误?【英文标题】:Why do I get an error with reason "Actual or formal argument lists differs in length" when I calculate the minimum of an integer array?为什么在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误? 【发布时间】:2020-10-20 04:05:29 【问题描述】:

我收到编译时错误

method min in class RandomArray cannot be applied to given types;
        System.out.println(table.min());
                                ^
  required: int[]
  found:    no arguments
  reason: actual and formal argument lists differ in length

但我不明白为什么会得到它?

这是我的代码

import java.util.Scanner;
import java.util.Random;

public class RandomArray 

    private int data[];
    private int value;

    public RandomArray(int x) 
        Random gen = new Random();
        data = new int[x];

        for (int index = 0; index < x; index++)
            data[index] = gen.nextInt(x);
    

    public String toString() 
        String output = "";
        for (int i = 0; i < data.length; i++) 
            output += data[i];
        
        return output;
    

    public static int min(int[] x) 
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < x.length; i++) 
            if (x[i] < min) 
                min = x[i];
            
        
        return min;
    
    
    public static void main(String[] args) 
        Scanner scan = new Scanner(System.in);
        int x;
        int data;
        System.out.println("please enter the number of integers you would like to create an array for");
        x = scan.nextInt();
        RandomArray table = new RandomArray(x);

        System.out.println(table.toString());
        System.out.println(table.min());
    

【问题讨论】:

min 方法需要一个参数,而您没有给出任何参数。但也许那个方法不应该有任何参数,不是静态的,并且计算数据的最小值? 可以放完整代码吗? 是的,它不应该是静态的。没有争论是什么意思?我的想法是我通过它传递数组'x',但它不接受数组'x'。 这就是所有的代码 不,您没有在table.min() 中传递数组x,否则它将是table.min(x)!但这可能不是你应该做的。 【参考方案1】:

正如 cmets 中的其他人指出的那样,您会收到此错误

Error:(49, 33) java: method min in class RandomArray cannot be applied to given types;
  required: int[]
  found:    no arguments
  reason: actual and formal argument lists differ in length

因为您在使用table.min() 调用时调用了声明的public static int min(int[] x) 方法而不传递参数!因此actual and formal argument lists differ in length

(其中actual 指调用table.min() 的方法参数,一个长度为0 的参数列表,formal 指声明的方法int min(int[] x) 具有长度为1 的参数列表)。

根据您的代码,您想要传递给min 方法的参数实际上是您的类RandomArray 的成员变量——数组int data[]。因此,您不应将任何参数传递给您的 min 方法,而是使其直接在您的 data [] 数组上操作,如

public int min() 
    int min = Integer.MAX_VALUE;
    for (int i = 0; i < data.length; i++) 
        if (data[i] < min) 
            min = data[i];
        
    
    return min;

请注意,当您希望类中的方法对 非静态成员变量(例如 private int data[]; 数组)进行操作时,您需要将该方法设为非static

(就风格而言,而不是 C 风格的数组声明 int data[] 更喜欢 Java 风格的声明 int[] data)。

把它们放在一起就得到了

import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;

public class RandomArray 

    private int[] data;

    public RandomArray(int x) 
        Random gen = new Random();
        data = new int[x];

        for (int index = 0; index < x; index++) 
            data[index] = gen.nextInt(x);
        
    

    public String toString() 
        return Arrays.toString(data);
    

    public int min() 
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < data.length; i++) 
            if (data[i] < min) 
                min = data[i];
            
        
        return min;
    

    public static void main(String[] args) 
        Scanner scan = new Scanner(System.in);
        System.out.println("please enter the number of integers you would like to create an array for");
        int x = scan.nextInt();
        RandomArray table = new RandomArray(x);

        System.out.println(table.toString());
        System.out.println(table.min());
    

给你输出

please enter the number of integers you would like to create an array for
10
[9, 3, 3, 9, 2, 9, 2, 9, 5, 4]
2

【讨论】:

以上是关于为啥在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 statsmodels 预测测试值时会收到此 numpy 错误?

为啥在多维数据集中分配值时会产生nan?

为啥 ofstream 在存储字符串的值时会避免前 4 个字符?

找到最小值时数组的最后一个元素发生变化

为啥 C# 'is' 运算符在比较两个布尔值时会给出正确的结果,我应该使用它吗?

为啥在 VC++ 调试器上计算表达式时会出现“成员函数不存在”错误?