【问题标题】:Why are my methods not returning anything?为什么我的方法没有返回任何东西?
【发布时间】:2020-09-12 15:10:59
【问题描述】:

我编写这段代码是为了对字符、整数和双精度数组进行多次计算。

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

【问题讨论】:

  • 我们一般使用type[] var-name而不是type var-name[]
  • 为什么你不只包括不起作用的部分?阅读数千行并找出问题所在的 10 行是很困难的。
  • 请不要在您的问题标题或问题文本中加上“已解决”。如果答案解决了主要问题,则接受该答案。有关更多信息,请从帮助站点阅读此部分:someone answers
  • @Aniox 我们是我们?我不确定在变量名而不是类型上声明数组标识符有什么问题。
  • @rjames 你能把你的问题缩小到特别不工作的部分吗?让我们代替您调试代码,看看哪些方法没有按预期工作,真的很不方便。尝试提供更清晰的上下文。

标签: java arrays methods


【解决方案1】:

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

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

minat = i;

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多