找不到错误

时间:2018-12-08 01:26:13

标签: java methods

任务是编写一个方法以返回数组的最小值。 有人会迅速查看我的代码吗?

public static int findMinimum (int [] array) {  
    for (int kohlrabi = 0; kohlrabi < array.length; kohlrabi++) {                           
         for (int zwiebel= 0; zwiebel < array.length; zwiebel ++) {                                         
                if (array [zwiebel] < array [kohlrabi]) {                                   
                    kohlrabi = zwiebel -1;
                    break;  
                }                                                                                       
                int spinat = array [kohlrabi];                      
                if (zwiebel == array.length-1) {
                    return spinat;  
                }
         }  
    }

}
  

线程“主”中的异常java.lang.Error:未解决的编译   问题:此方法必须返回int类型的结果       在Abgabe7.ArrayExercises.findMinimum(ArrayExercises.java:38)

这是我学校的一项家庭作业,我当然理解其背后的逻辑,但找不到我的错。 谢谢马克斯

3 个答案:

答案 0 :(得分:0)

我认为您不需要有两个循环。一个循环会起作用。

简单地遍历数组,并保留一个变量,该变量是找到的最低变量。

答案 1 :(得分:0)

您应该在循环之前声明一个全局变量,然后在代码中仅使用一个for循环,如下所示:

int zwiebel= 0;
for (int kohlrabi = 0; kohlrabi < array.length; kohlrabi++) { 
    if (kohlrabi == 0){
        zwiebel = array[kohlrabi];
    }
    if (array[kohlrabi] < zwiebel) { 
        zwiebel = array[kohlrabi];
    }
}

数组中的最小值现在存储在变量zwiebel中。

答案 2 :(得分:0)

真正的错误是您没有考虑到空数组的可能性。在编程中要学习的一件事是考虑所有可能性(也许您已经发现了)。 Java(和大多数其他语言)的数组的长度可以为0,即其中没有元素。当array.length为0时,您的外部for循环将不会执行,因此我们将在不返回任何内容且没有任何返回内容的情况下进入方法的底部。

Java是愚蠢的,但是足够聪明,可以为您发现此问题。当声明您的方法返回int时,它坚持认为它也可以看到在所有情况下都将返回int。在您的方法中,它不能,以下消息试图告诉您:

  

此方法必须返回int类型的结果

一种可能的解决方法-我可能正在向您展示一些您在学校还没有学到的东西-是在方法末尾插入以下语句:

    throw new IllegalArgumentException("Cannot find the minimum of an empty array");

引发异常是返回值的替代方法,因此此语句可使Java满意。如果您实际上尝试查找空数组的最小值,则程序将崩溃,并提示您“找不到空数组的最小值”。但是找到包含数字的数组的最小值现在应该可以工作。

这表示其他说法是正确的:您找到最小值的方法过于复杂。我一直在盯着您的代码,但仍然不了解它是如何工作的。这样的代码不好。在现实生活中,您将编写其他人之后需要阅读和更改的代码,而且没有人可以更改他们不理解的代码,因此您的代码将无用。比编写可正常工作的代码更重要的是编写可读代码。

编辑:有关如何通过简单的方式执行此操作的方法有所不同。对于使用for循环的学校练习,我会写:

public static int findMinimum (int [] array) {
    if (array.length == 0) {
        return 42; // or whichever value is desired in this case
    }
    int niedrichsteSoWeit = array[0];
    for (int index = 1; index < array.length; index++) {                           
        if (array[index] < niedrichsteSoWeit) {
            niedrichsteSoWeit = array[index];
        }
    }
    return niedrichsteSoWeit;
}

对于生产代码,我可能不会编写方法,而是使用内置功能,例如:

    IntStream.of(myIntArray)
            .min()
            .ifPresentOrElse(min -> {
                // do something with min
            }, () -> {
                // do whatever you want to do when the array is empty
            });

如果您不太了解此摘要,请不要担心。这主要是针对经验丰富的程序员,他们可能恰巧阅读了此答案。