【问题标题】:boolean method with array argument带有数组参数的布尔方法
【发布时间】:2014-06-18 14:45:41
【问题描述】:

我试图弄清楚这个练习太久了,但我被困在这里。我需要编写一个布尔方法,它将数组作为参数,如果数组中的数字按降序排列,则应返回 true。 Bu 任何时候我尝试我都有相同的价值或错误。这是我的代码:

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

【问题讨论】:

  • 你得到了什么错误?

标签: java arrays methods boolean


【解决方案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;
}

}

【讨论】:

    【解决方案2】:

    您首先使用numbers[0] 进行初始化,这会导致几个问题:

    • 空数组抛出IndexOutOfBoundsException
    • 第一次检查自动通过 (numbers[0] &lt;= numbers[0])

    您最好检查 numbers 的长度是否为 0,并使用“正常”的 for 循环(使用索引)。

    你的返回值也是对它应该是什么的否定。

    【讨论】:

      【解决方案3】:

      不确定我是否理解,但这不能解决您的问题吗?

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

      您实际上只是为了检查数组中的前一项是否大于或等于数组中的当前项,不是吗?

      【讨论】:

        【解决方案4】:

        您的代码中的问题是,在您遍历整个数组之前,您无法返回 true。但是,您可以在检测到“反转”后立即返回 false - 即您之前看到的数字之后的数字大于之前的数字。

        您已经相当接近一个可行的解决方案 - 您需要删除 return true,取消注释 else,并将最终的 return false 更改为 return true

        为了使您的代码更具可读性,请将 first 重命名为 prior。还可以考虑将for 循环的“foreach”版本更改为跳过数组初始元素的常规for 循环。这将使您能够检测到降序,而不是您当前检测到的非递增。

        【讨论】:

          猜你喜欢
          • 2015-01-18
          • 2014-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-10
          • 2013-01-07
          • 1970-01-01
          • 2020-03-16
          相关资源
          最近更新 更多