为什么我的方法不返回任何东西?

时间:2020-09-12 15:10:59

标签: java arrays methods

我已经编写了这段代码,以便对字符,整数和双精度数组进行一些计算。

static char minimum(char array[])
{   
    char min = 'z';
    int n = array.length;
    
  
    for (int i = 0; i < n-1; i++)
    {
        if (array[i] < min)
        {
            min = array[i];
        }
    }
   
    
    return min;
}

static int minimum(int array[])
{
    Arrays.sort(array);  
    return array[0];
}

static double minimum(double array[])
{
    int n = array.length;
    Arrays.sort(array);  
    return array[0
                 ];
}

static char maximum(char array[])
{
    
    char max = 'z';
    int n = array.length;
    
    
    for (int i = 0; i < n-1; i++)
        if (array[i] > max)
        {
            max = array[i];
        }
   
    
    return max;
}

static int maximum(int array[])
{
    int n = array.length;
    Arrays.sort(array);  
    return array[n - 1];
}

static double maximum(double array[])
{
    int n = array.length;
    Arrays.sort(array);  
    return array[n - 1];
}

static int minimumat(char array[])
{
    
    char min = 'z';
    int n = array.length;
    int minat = 0;
    

    for (int i = 0; i < n-1; i++)
    {
        if (array[i] < min)
        {
            min = array[i];
        }
    }
    
    
    for (int i = 0; i < n; i++)
    {
        if (array[i] == min)
        {
            i = minat;
        }
    }
   
    
    return minat;
}

static int minimumat(int array[])
{
    int n = array.length;
    int newarray[] = array;
    Arrays.sort(newarray);  
    int min = newarray[0];
    int minat = 0;
    for(int i = 0; i <= n; i++)
    {
        if(array[i] == min)
        {
            minat = i;
        }
    }
    return minat;
}

static int minimumat(double array[])
{
    int n = array.length;
    double newarray[] = array;
    Arrays.sort(newarray);  
    double min = newarray[0];
    int minat = 0;
    for(int i = 0; i <= n; i++)
    {
        if(array[i] == min)
        {
            minat = i;
        }
    }
    return minat;
}

static int maximumat(char array[])
{
    
    char max = 'A';
    int n = array.length;
    int maxat = 0;
    
    
    for (int i = 0; i < n; i++)
    {
        if (array[i] > max)
        {
            max = array[i];
        }
    }
    
    
    for (int i = 0; i < n; i++)
    {
        if (array[i] == max)
        {
            i = maxat;
        }
    }
   
    
    return maxat;
}

static int maximumat(int array[])
{
    int n = array.length;
    int newarray[] = array;
    Arrays.sort(newarray);  
    int max = newarray[0];
    int maxat = 0;
    for(int i = 0; i <= n; i++)
    {
        if(array[i] == max)
        {
            maxat = i;
        }
    }
    return maxat;
}

static int maximumat(double array[])
{
    int n = array.length;
    double newarray[] = array;
    Arrays.sort(newarray);  
    double max = newarray[n - 1];
    int maxat = 0;
    for(int i = 0; i <= n; i++)
    {
        if(array[i] == max)
        {
            maxat = i;
        }
    }
    return maxat;
}

static double average(int array[])
{
    
    int sum = 0;
    int n = array.length;
   
    
    for (int i = 0; i < array.length; i++)
    {
       sum +=  array[i];
    }
    
    double avg = sum / n;
    
    return avg;
}

static double average(double array[])
{
    
    double sum = 0;
    int n = array.length;
   
    
    for (int i = 0; i < array.length; i++)
    {
       sum += array[i];
    }
    
    double avg = sum / n;
    
    return avg;
}

我还编写了一些简单的代码来在另一个类中测试这些方法。

public static void main(String[] args)
    {
    char[] charArray = {'k', 'p', 'f', 'r', 'D', 'm'};
    double doubleArray[] = {5.43, 9.81, 5.37, 7.19, 2.86, 6.55, 2.37, 7.28};
    int intArray[] = {40, 7, 53, 34, 61, 70, 29, 49};

    ArrayTools ArrayTools = new ArrayTools();
    System.out.println(ArrayTools.minimum(charArray));
    
    
    System.out.println(ArrayTools.minimum(doubleArray));
    
    
    System.out.println(ArrayTools.minimum(intArray));
    
    
    System.out.println(ArrayTools.maximum(charArray));
    
    
    System.out.println(ArrayTools.maximum(doubleArray));
    
    
    System.out.println(ArrayTools.maximum(intArray));
    
    
    System.out.println(ArrayTools.minimumat(charArray));
    
    
    System.out.println(ArrayTools.minimumat(doubleArray));
    
    
    System.out.println(ArrayTools.minimumat(intArray));
    
    
    System.out.println(ArrayTools.maximumat(charArray));
    
    
    System.out.println(ArrayTools.maximumat(doubleArray));
    
    
    System.out.println(ArrayTools.maximumat(intArray));
    
    
    System.out.println(ArrayTools.average(intArray));
    
    
    System.out.println(ArrayTools.average(doubleArray));
}

}

该代码已针对“最小”和“最大”方法正常工作(不要与“最小”和“最大”方法混淆)。但是其余的都没有打印任何东西。

以下是输出:

D 

2.37 

7 

z 

9.81 

70

2 个答案:

答案 0 :(得分:1)

我在您的代码中看到的2个问题是-

1-在static int minimumat(char array[])方法中,您要重置i的值。应该是

minat = i;

和其他方法中的maxat相似-maximumat()

2-您正在从0到长度(n)循环,因此您可能会在最后一个索引上得到ArrayIndexOutOfBound,因此请排除最后一个。应该是

for(int i = 0; i < n; i++) {

答案 1 :(得分:0)

静态方法以classname.StaticMethodName的形式调用。

不需要创建ArrayTools类的对象。

删除行ArrayTools ArrayTools = new ArrayTools();,此程序将正常运行。

minimumat(char array[])maximumat(char array[])方法中存在逻辑错误。

您需要分别为minat=i;maxat=i;设置i=minat;i=maxat;