【问题标题】:Consecutive numbers in array list using boolean expressions使用布尔表达式的数组列表中的连续数字
【发布时间】:2017-01-21 20:39:38
【问题描述】:

我在执行此函数时遇到问题,如果数组中有 2 个连续数字,它将打印出“true”,如果没有,则打印出“false”。我得到的错误是布尔值无法转换为 int 并且在最后一行代码中我必须在 System.out.println() 的括号内放置什么?

public class A1Q2 {
    private static int hasTwoLengthRun(int[] array) { 
        for(int i=0; i < array.length; i++){
            if(array[i+1] == array[i]){
                return true;
            }
            else{
                return false;
            }
        }
    }

    public static void main(String[] args) { 
        int[] array = new int[]{5, 16, 7, 35, -2, -9, 75};
        System.out.println();
    }
}

【问题讨论】:

  • 你声明你的函数返回int,但你return true不是一个int。

标签: java arrays


【解决方案1】:

1)hasTwoLengthRun() 应该返回 boolean 而不是 int,因为您返回 boolean 值。

2) 只要​​数组的两个元素不相等,它就会返回false,因此它的逻辑不正确。
仅当您遍历所有元素时才应返回 false

3) 对于编译器,该方法不返回值,因为您仅在 for 中返回值。如果您有一个没有元素的数组,则不要输入 for 并且什么也不返回。这是不合法的。

4) 您将得到一个带有for 条件的ArrayIndexOutOfBoundsException,因为最后一次迭代使用数组外的索引。

这是一个应该可以工作的代码:

private static boolean hasTwoLengthRun(int[] array) {
    for (int i = 0; i < array.length - 1; i++) {
        if (array[i + 1] == array[i]) {
            return true;
        }
    }
    return false;
}

【讨论】:

    【解决方案2】:

    我在这里看到至少 3 个问题:

    1. hasTwoLengthRun 函数的返回类型应为boolean
    2. 您错误地安排了return false 语句 - 它应该在方法的末尾调用
    3. 您错误地使用了数组边界 - 尝试到达数组外的元素时会出现异常。

    以下是更正后的代码:

    public class Test {
        private static boolean hasTwoLengthRun(int[] array) {
    
            for(int i=0; i < array.length - 1; i++){
                if(array[i+1] == array[i]){
                    return true;
                }
    
            }
            return false;
        }
    
        public static void main(String[] args) {
            int[] array = new int[]{5, 16, 7, 35, -2, -9, 75};
            System.out.println(hasTwoLengthRun(array));
    
        }
    }
    

    【讨论】:

      【解决方案3】:

      你得到一个错误,因为你写了你的hasTwoLengthRun函数返回int,而在你的return语句中你返回truefalse——一个boolean类型的值。

      【讨论】:

      • 非常感谢!
      【解决方案4】:

      这里:

      private static int hasTwoLengthRun(...
      

      表示该方法应返回一个 int。一个数字。

      然后你返回真/假。在 java 中,这两种类型不能互换。

      所以,改成:

      private static boolean hasTwoLengthRun(...
      

      此外;你的逻辑是错误的:

      for(int i=0; i < array.length-1; i++){
        if(array[i+1] == array[i]) {
          return true;
        }
      }
      return false;
      

      是你需要的; A)避免运行超过数组的长度和B)当前两个元素不符合您的条件时不返回false!

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 2015-01-21
        • 2022-09-26
        • 2014-05-20
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        相关资源
        最近更新 更多