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