Java 找不到错误

Java 找不到错误,java,methods,Java,Methods,任务是编写一个方法来返回数组的最小值。 有人能快点看一下我的代码吗 public static int findMinimum (int [] array) { for (int kohlrabi = 0; kohlrabi < array.length; kohlrabi++) { for (int zwiebel= 0; zwiebel < array.length; zwiebel ++) {

任务是编写一个方法来返回数组的最小值。 有人能快点看一下我的代码吗

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;  
                }
         }  
    }

}
公共静态int findminium(int[]数组){
对于(int-kohlrabi=0;kohlrabi
线程“main”java.lang中出现异常。错误:未解析编译 问题:此方法必须返回int类型的结果 在Abgabe7.ArrayExercises.findminium(ArrayExercises.java:38)

这是我学校的家庭作业,我完全理解其中的逻辑,但找不到我的错。
谢谢Max,我想你不需要有两个循环。一个循环就行了


只需在数组中循环一个变量,该变量是您找到的最低值

您应该在循环之前声明一个全局变量,然后在代码中只使用一个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];
    }
}
int-zwiebel=0;
对于(int-kohlrabi=0;kohlrabi

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

中。真正的错误是没有考虑空数组的可能性。在编程中要学习的一件事是考虑所有的可能性(也许你已经发现了这一点)。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;
}

如果您对这段代码有一点不理解,请不要担心。这主要是为了更有经验的程序员,他们可能会碰巧读到这个答案。

代码应该可以正常工作,-meens我不明白它为什么不工作。错误是因为编译器不知道(zwiebel==array.length-1)
是否会为真。如果它的计算结果从未为true,则不会有返回语句。和其他语句可能重复。第一个提示:当你不理解一条错误信息时,把它粘贴到你的搜索引擎中。我真的很困惑你是如何想出这个算法的。。为什么不干脆
int min=Integer.MAX\u值;如果(num?用于占用时间的Thx!我在方法的底部放了一个返回值,现在它工作了。谢谢。我只是不明白为什么这个代码应该过于复杂。我看不出有别的办法。我犯了一个合乎逻辑的错误。这就是为什么它如此复杂的原因。谢谢你花时间。我知道你在做什么。代码是我的逻辑错误。
    IntStream.of(myIntArray)
            .min()
            .ifPresentOrElse(min -> {
                // do something with min
            }, () -> {
                // do whatever you want to do when the array is empty
            });