布尔赋值不抓,需要多了解
Boolean assignment not catching, need to understand more
public class MyClass {
public static void main(String args[]) {
int[] nums = {1, 2, 9, 3, 4};
boolean results = false;
int end = nums.length;
if (end>4)end=4;
for (int x=0;x<end;x++)
{
System.out.println(nums[x]);
results = (nums[x] == 9);
}
System.out.println(results);
}
}
以下代码检查数组的前 4 个元素中是否存在 9,但如果第一个元素中不超过 1 个“9”,以这种方式使用布尔运算符似乎总是失败数组的 4 个元素。
这是为什么?从逻辑上讲,这似乎应该可行,当我理解为什么有些东西不起作用时,它确实帮助我更好地理解。
原因是你迭代了所有元素,结果将是最后一个元素的结果,
所以当你找到匹配结果时你需要停止for
for (int x=0;x<end;x++)
{
System.out.println(nums[x]);
if(nums[x] == 9){
result = true;
break;
}
}
你每次都覆盖results
。如所写,这将告诉您数组中的 last 项是否等于 9(实际上不是),而不是 any 项是否在数组中数组等于 9.
如果 num[x] == 9
,您应该将 true
分配给 result
;否则,不要分配任何东西。
@lucumt 的回答展示了一个如何做到这一点的例子。另一个例子,只需替换
results = (nums[x] == 9);
和
results |= (nums[x] == 9);
其中 |=
赋值等同于 results = results || (num[x] == 9);
- 换句话说,如果 any 值为真,则整个表达式将为真。 (请注意,@lucumt 的答案稍微更有效,因为它是 O(n) 而这是 Theta(n) - 即这将始终 运行 exactly n
次,其中 n
是列表的长度,但@lucumt 可以在找到任何 9 时提前结束循环)。
在你的 for 循环中,你每次都在写值。这意味着您正在测试 4th 值是否等于 9。
你可以这样解决你的问题:
boolean results = false;
for (int x = 0; x < end; x++) {
System.out.println(nums[x]);
if(nums[x] == 9) {
results = true;
break;
}
}
试试这个:
boolean isPresent(int[] nums, int val)
{
for (int x : nums )
{
if (nums[x] == val)
return true;
}
return false;
}
否则你每次检查都要重写一个值
我给你写了一封class。方法 nignPresentInFirst4Elements(int[] arr) returns 如果给定数组的前 4 个元素中的一个或多个包含 9,则为真:
public class Test {
private static boolean nignPresentInFirst4Elements(int[] arr) {
if(arr == null)
return false;
for(int i = 0; i < Math.min(arr.length, 4); i++) {
if(arr[i] == 9)
return true;
}
return false;
}
public static void main(String[] args) {
int[][] arrs = new int[][] {
{5, 8, 9, 3},
{5, 8, 9, 3, 8, 26},
{5, 8, 9, 9},
{5, 8, 23, 0}
};
for(int i = 0; i < arrs.length; i++) {
System.out.println(toString(arrs[i]) + " | " + nignPresentInFirst4Elements(arrs[i]));
}
}
private static String toString(int[] arr) {
if(arr == null)
return "null";
String s = "[";
if(arr.length > 0)
s += arr[0];
for(int i = 1; i < arr.length; i++) {
s += ", " + arr[i];
}
s += "]";
return s;
}
}
public class MyClass {
public static void main(String args[]) {
int[] nums = {1, 2, 9, 3, 4};
boolean results = false;
int end = nums.length;
if (end>4)end=4;
for (int x=0;x<end;x++)
{
System.out.println(nums[x]);
results = (nums[x] == 9);
}
System.out.println(results);
}
}
以下代码检查数组的前 4 个元素中是否存在 9,但如果第一个元素中不超过 1 个“9”,以这种方式使用布尔运算符似乎总是失败数组的 4 个元素。
这是为什么?从逻辑上讲,这似乎应该可行,当我理解为什么有些东西不起作用时,它确实帮助我更好地理解。
原因是你迭代了所有元素,结果将是最后一个元素的结果,
所以当你找到匹配结果时你需要停止for
for (int x=0;x<end;x++)
{
System.out.println(nums[x]);
if(nums[x] == 9){
result = true;
break;
}
}
你每次都覆盖results
。如所写,这将告诉您数组中的 last 项是否等于 9(实际上不是),而不是 any 项是否在数组中数组等于 9.
如果 num[x] == 9
,您应该将 true
分配给 result
;否则,不要分配任何东西。
@lucumt 的回答展示了一个如何做到这一点的例子。另一个例子,只需替换
results = (nums[x] == 9);
和
results |= (nums[x] == 9);
其中 |=
赋值等同于 results = results || (num[x] == 9);
- 换句话说,如果 any 值为真,则整个表达式将为真。 (请注意,@lucumt 的答案稍微更有效,因为它是 O(n) 而这是 Theta(n) - 即这将始终 运行 exactly n
次,其中 n
是列表的长度,但@lucumt 可以在找到任何 9 时提前结束循环)。
在你的 for 循环中,你每次都在写值。这意味着您正在测试 4th 值是否等于 9。
你可以这样解决你的问题:
boolean results = false;
for (int x = 0; x < end; x++) {
System.out.println(nums[x]);
if(nums[x] == 9) {
results = true;
break;
}
}
试试这个:
boolean isPresent(int[] nums, int val)
{
for (int x : nums )
{
if (nums[x] == val)
return true;
}
return false;
}
否则你每次检查都要重写一个值
我给你写了一封class。方法 nignPresentInFirst4Elements(int[] arr) returns 如果给定数组的前 4 个元素中的一个或多个包含 9,则为真:
public class Test {
private static boolean nignPresentInFirst4Elements(int[] arr) {
if(arr == null)
return false;
for(int i = 0; i < Math.min(arr.length, 4); i++) {
if(arr[i] == 9)
return true;
}
return false;
}
public static void main(String[] args) {
int[][] arrs = new int[][] {
{5, 8, 9, 3},
{5, 8, 9, 3, 8, 26},
{5, 8, 9, 9},
{5, 8, 23, 0}
};
for(int i = 0; i < arrs.length; i++) {
System.out.println(toString(arrs[i]) + " | " + nignPresentInFirst4Elements(arrs[i]));
}
}
private static String toString(int[] arr) {
if(arr == null)
return "null";
String s = "[";
if(arr.length > 0)
s += arr[0];
for(int i = 1; i < arr.length; i++) {
s += ", " + arr[i];
}
s += "]";
return s;
}
}