Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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/4/matlab/13.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 我的if条件返回为true,尽管仔细检查了我的逻辑_Java_Arrays_If Statement_Boolean - Fatal编程技术网

Java 我的if条件返回为true,尽管仔细检查了我的逻辑

Java 我的if条件返回为true,尽管仔细检查了我的逻辑,java,arrays,if-statement,boolean,Java,Arrays,If Statement,Boolean,我的任务是为家庭作业创建一个二进制搜索程序(与问题无关)。有人建议我自己设置整数数组的值,但我决定在我自己的开发中再进一步。然而,似乎存在一个逻辑错误,因为条件在看似不应该传递的情况下传递为真。我试图检查一个值是否不存在于整数数组中且不是0,如果是这样,请将其添加到数组中 我检查了语法,更改了逻辑,并尝试使用不同的循环。其他避免0和重复的方法似乎要复杂得多,除非我的理解中存在根本性错误 以下是我得到的: int numbers[] = new int[50]; for(int

我的任务是为家庭作业创建一个二进制搜索程序(与问题无关)。有人建议我自己设置整数数组的值,但我决定在我自己的开发中再进一步。然而,似乎存在一个逻辑错误,因为条件在看似不应该传递的情况下传递为真。我试图检查一个值是否不存在于整数数组中且不是0,如果是这样,请将其添加到数组中

我检查了语法,更改了逻辑,并尝试使用不同的循环。其他避免0和重复的方法似乎要复杂得多,除非我的理解中存在根本性错误

以下是我得到的:

int numbers[] = new int[50]; 

        for(int i = 0; i < numbers.length; i++) {
            int addVal = (int)(Math.random()*400+1); //assign addVal to a random int
            boolean duplicate = IntStream.of(numbers).anyMatch(x -> x == addVal); //check if array contains the random value generated and assigned to addVal
            if(addVal != 0 && duplicate == false) { //when the number is not 0 and is not in the list
                numbers[i] = addVal; //add it to the list
            }
        }
Arrays.sort(numbers); //sort the numbers
我希望它的工作方式如下:我创建一个数组来存储50个值。对于每个索引,为addVal分配一个介于0-400之间的随机整数(添加1以查看它是否会降低0出现的频率,似乎有,变大没有帮助)。然后,检查my numbers数组是否包含随机分配给addVal的值。如果没有,且值也不是0,则将其添加到数组中。添加完所有值后,我对数组进行排序(用于二进制搜索)

如果能帮我找出错误,我将不胜感激

另外,还有两个附带问题:我如何修改它以使用单个增强的for循环,以及为什么在for循环中对数组进行排序会导致更多的0?

问题在于:

for(int i = 0; i < numbers.length; i++) {
     int addVal = (int)(Math.random()*400+1); 
     boolean duplicate = IntStream.of(numbers).anyMatch(x -> x == addVal); 
     if(addVal != 0 && duplicate == false) { 
         numbers[i] = addVal; //add it to the list
     }
}

这也是一种风格,但通常更倾向于编写
!重复
而不是重复==false

为什么在for循环中对数组进行排序会导致0显著增加

因为当您在循环中排序时,
数组中的值的索引会改变。因此,我们可以这样说:

[2, 0, 0, 0, 0]
然后对其进行排序,它会变成:

[0, 0, 0, 0, 2]
第一个值现在将始终为零,因为您已经填充了
arr[0]
。这种情况一直在发生,因为每次在
数组中填充一个点时,它都会移动到末尾,而开始点将保持为零

我如何修改它以使用单个增强的for循环


简单地说

哦,天哪。。非常感谢你!不知怎的,我甚至没有考虑过。
[2, 0, 0, 0, 0]
[0, 0, 0, 0, 2]