我想要解决这个问题已经太久了,但我被困在这里。我需要编写一个布尔方法,将数组作为参数,如果数组中的数字按降序排列,则应返回true。我在尝试任何时候我都有相同的价值或错误。这是我的代码:
public class Question1c{
public static void main (String[] args){
int[] arr = {1, 9, 3, 4, 5, 6};
boolean product = isDecreasing(arr);
System.out.println(product);
}
public static boolean isDecreasing (int[] numbers){
int first = numbers[0];
for (int i : numbers){
if(first <= i){
first = i;
return true;
}
//else{
// return false;
//}
}return false;
}
}
答案 0 :(得分:3)
您的代码中的问题是,在您完成整个阵列之前,您无法返回true
。但是,您可以在检测到&#34;倒置&#34;后立即返回false
。 - 即您之前看到的数字大于之前的数字比前一个数字的情况。
您非常接近工作解决方案 - 您需要移除return true
,取消注释else
,并将最终return false
更改为return true
。
要使代码更具可读性,请将first
重命名为prior
。还要考虑改变&#34; foreach&#34;版本for
循环到常规for
循环,跳过数组的初始元素。这可以让您检测递减顺序,而不是当前检测到的非递增顺序。
答案 1 :(得分:1)
不确定我理解,但这不会解决您的问题吗?
public class Question1c{
public static void main (String[] args){
int[] arr = {1, 9, 3, 4, 5, 6};
boolean product = isDecreasing(arr);
System.out.println(product);
}
public static boolean isDecreasing (int[] numbers){
for (int i = 0; i < numbers.Length; i++){
if (i == 0)
continue;
if (numbers[i - 1] >= numbers[i])
return false;
}
return true;
}
}
你基本上只是想检查数组中的前一项是否不大于或等于数组中的当前项,不是吗?
答案 2 :(得分:1)
首先使用numbers[0]
进行初始化,这会导致一些问题:
IndexOutOfBoundsException
numbers[0] <= numbers[0]
)你最好检查numbers
的长度为0并使用&#34;正常&#34; for循环(使用索引)。
你的回报价值也是它应该是什么的否定。
答案 3 :(得分:1)
这可能会解决您的问题。
public class Question{
public static void main (String[] args){
int[] arr = {1, 9, 3, 4, 5, 6};
boolean product = isDecreasing(arr);
System.out.println(product);
}
public static boolean isDecreasing (int[] numbers){
int first = numbers[0];
for (int i = 1; i < numbers.length ; i++) {
if (first <= numbers[i]) {
return false;
}
first = numbers[i];
}
return true;
}
}