Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组-始终为true_Java - Fatal编程技术网

Java数组-始终为true

Java数组-始终为true,java,Java,我试图开发一种方法来检查给定数组的前4个元素(假设数组至少有4个元素)是否连续相等,我的第一种方法是创建一个布尔变量,并首先将其设置为false,如果a[I]==a[I+1]将其设置为true。但问题是,无论这4个元素是连续的还是不连续的,它总是将其打印为真 public static boolean isConsecutive(int[] a) { boolean isConsecutive = false; for (int i = 0; i < 4; i++) {

我试图开发一种方法来检查给定数组的前4个元素(假设数组至少有4个元素)是否连续相等,我的第一种方法是创建一个布尔变量,并首先将其设置为
false
,如果a[I]==a[I+1]将其设置为
true
。但问题是,无论这4个元素是连续的还是不连续的,它总是将其打印为真

public static boolean isConsecutive(int[] a) {
    boolean isConsecutive = false;
    for (int i = 0; i < 4; i++) {
        if (a[i] == a[i + 1]) {
            isConsecutive = true;
        }
    }
    return isConsecutive;
}
公共静态布尔值是连续的(int[]a){
布尔值isConsecutive=false;
对于(int i=0;i<4;i++){
如果(a[i]==a[i+1]){
isconsecuritive=true;
}
}
回报是持续的;
}

我的错在哪里?提前谢谢

如果不是连续的,则需要一个else分支将其再次设置为false,并循环到3。或者更可取的是,当某个事物不相等时立即返回语句

if (a[i] == a[i + 1]) {
    isConsecutive = true;
} else {
    return false;
}
您还可以忽略变量
isConsecutive
类似的内容

 public static boolean isConsecutive(int[] a) {
     for (int i = 0; i < 3; i++) {
         if (!(a[i] == a[i + 1])) {
             return false;
         }
     }
     return true;
 }
公共静态布尔值是连续的(int[]a){
对于(int i=0;i<3;i++){
如果(!(a[i]==a[i+1])){
返回false;
}
}
返回true;
}

请注意,对于索引未绑定异常,您的循环是不安全的,因为它的大小可能小于4

如果不是连续的,则需要一个else分支将其再次设置为false,并循环到3。或者更可取的是,当某个事物不相等时立即返回语句

if (a[i] == a[i + 1]) {
    isConsecutive = true;
} else {
    return false;
}
您还可以忽略变量
isConsecutive
类似的内容

 public static boolean isConsecutive(int[] a) {
     for (int i = 0; i < 3; i++) {
         if (!(a[i] == a[i + 1])) {
             return false;
         }
     }
     return true;
 }
公共静态布尔值是连续的(int[]a){
对于(int i=0;i<3;i++){
如果(!(a[i]==a[i+1])){
返回false;
}
}
返回true;
}

请注意,对于索引未绑定异常,您的循环是不安全的,因为它的大小可能小于4

使用您的方法我们的矿山方法,您可能会得到arrayOutOfBounds异常。 顺便说一下,我认为下面的方法更简单

public static boolean isConsecutive(int[] a) {

    return (a[0] == a[1] && 
            a[0] == a[2] &&
            a[0] == a[3])

}

使用您的方法,我们的方法,您可能会得到arrayOutOfBounds例外。 顺便说一下,我认为下面的方法更简单

public static boolean isConsecutive(int[] a) {

    return (a[0] == a[1] && 
            a[0] == a[2] &&
            a[0] == a[3])

}

在for循环外,isConsecutive变量设置为false

public static boolean isConsecutive(int[] a) {
        **boolean isConsecutive=false**;
        for(int i=0;i<4;i++) {
            if(a[i]==a[i+1]) {
                isConsecutive=true;
            }
        }


        return isConsecutive;
    }
公共静态布尔值是连续的(int[]a){
**布尔值isConsecutive=false**;

for(int i=0;i您的isconsecuritive变量在for循环外设置为false

public static boolean isConsecutive(int[] a) {
        **boolean isConsecutive=false**;
        for(int i=0;i<4;i++) {
            if(a[i]==a[i+1]) {
                isConsecutive=true;
            }
        }


        return isConsecutive;
    }
公共静态布尔值是连续的(int[]a){
**布尔值isConsecutive=false**;

对于(int i=0;i问题在于if条件。它不是检查4个连续的相似元素,而是检查两个连续的相似元素

if(a[i]==a[i+1]) {
            isConsecutive=true;
        }
如果您的数组为[1,2,2,3,4,5,6],则在该数组中,当您的函数将检查[1]==a[2]时,它将设置为isConsecutive为true,并且在数组的完整迭代中保持为true

正如您提到的,数组至少有4个元素,所以您可以像这样编写函数

 public static boolean isConsecutive(int[] a) {

         if(a[0]==a[1] && a[0]==a[2] && a[0]==a[3])
              return true;
         else
              return false;
}
如果要检查数组中任意位置的4个连续元素,请编写函数

public static boolean isConsecutive(int[] a) {
    boolean isConsecutive=false;
    for(int i=0;i<a.length-3;i++) {
        if(a[i]==a[i+1] && a[i]==a[i+2] && a[i]==a[i+3])) {
            isConsecutive=true;
        }
    }

    return isConsecutive;
}
公共静态布尔值是连续的(int[]a){
布尔值isConsecutive=false;

对于(int i=0;i问题在于if条件。它不是检查4个连续的相似元素,而是检查两个连续的相似元素

if(a[i]==a[i+1]) {
            isConsecutive=true;
        }
如果您的数组为[1,2,2,3,4,5,6],则在该数组中,当您的函数将检查[1]==a[2]时,它将设置为isConsecutive为true,并且在数组的完整迭代中保持为true

正如您提到的,数组至少有4个元素,所以您可以像这样编写函数

 public static boolean isConsecutive(int[] a) {

         if(a[0]==a[1] && a[0]==a[2] && a[0]==a[3])
              return true;
         else
              return false;
}
如果要检查数组中任意位置的4个连续元素,请编写函数

public static boolean isConsecutive(int[] a) {
    boolean isConsecutive=false;
    for(int i=0;i<a.length-3;i++) {
        if(a[i]==a[i+1] && a[i]==a[i+2] && a[i]==a[i+3])) {
            isConsecutive=true;
        }
    }

    return isConsecutive;
}
公共静态布尔值是连续的(int[]a){
布尔值isConsecutive=false;

对于(int i=0;i您的代码将
isConsecutive
设置为
false
,目的是在找到证据时将其设置为
true
。问题是
a[i]==a[i+1]
只是部分证据。因此,当
a[0]==a[1]
时,您将其设置为
true
,并且如果(比如)
a[1]!=a[2]
,则永远不要将其更改回来

在这种情况下,如果从
isconsecuritive=true
开始,并在循环中寻找确凿的证据证明它是错误的,效果会更好:

boolean firstFourEqual(int[] a) {
    boolean isConsecutive=true;
    for(int i=0;i<3;i++) {
        if(a[i]!=a[i+1]) {
            isConsecutive=false;
        }
    }
    return isConsecutive;
}
或:



所有这些都假设数组的大小至少为4。如果不能保证这一点,则需要更多的代码。

您的代码将
isConsecutive
设置为
false
,目的是在找到证据时将其设置为
true
。问题是
a[i]==a[i+1]
只是部分证据。因此,当
a[0]==a[1]
时,将其设置为
true
,如果(比如)a[1]!=a[2]
,则永远不要将其更改回原来的值

在这种情况下,如果从
isconsecuritive=true
开始,并在循环中寻找确凿的证据证明它是错误的,效果会更好:

boolean firstFourEqual(int[] a) {
    boolean isConsecutive=true;
    for(int i=0;i<3;i++) {
        if(a[i]!=a[i+1]) {
            isConsecutive=false;
        }
    }
    return isConsecutive;
}
或:



所有这些都假设数组的大小至少为4。如果不能保证这一点,则需要更多的代码。

一旦在某个
i
值(例如1)中将
isConsecutive
变量值设置为
true
,即使在下一次迭代中,该值也将始终为
true
(当
i==2
)时,下一个元素(
a[3]
)的值不同于当前元素(
a[2]

此外,由于for循环中的限制为4,因此它还执行第4个和第5个元素的检查。当数组中只有4个元素时,它还将抛出
ArrayIndexOutOfBoundsException

您需要执行以下操作:

  • 一旦出现错误,将
    isConsecutive
    值更改回
    false
    当前元素和下一个元素之间的差异
  • 将限制设置为3,以便最后一次迭代不会检查第5次迭代 元素
  • 添加布尔标志ch