Java 当数组中两个整数之和不等于零时,如何退出循环并打印语句
我正在尝试存储和打印一个数组,该数组在给定数组中的两个整数之和等于零。但是当没有两个和等于零的整数时,我无法退出循环并打印出两个和等于零的整数。请让我知道如何解决这个问题Java 当数组中两个整数之和不等于零时,如何退出循环并打印语句,java,Java,我正在尝试存储和打印一个数组,该数组在给定数组中的两个整数之和等于零。但是当没有两个和等于零的整数时,我无法退出循环并打印出两个和等于零的整数。请让我知道如何解决这个问题 public static void main(String[] args) { int[] origArr = { 1, 2, 3, -6, 8, 4 }; for (int i = 0; i < origArr.length; i++) { int firstN
public static void main(String[] args) {
int[] origArr = { 1, 2, 3, -6, 8, 4 };
for (int i = 0; i < origArr.length; i++) {
int firstNumber = origArr[i];
for (int j = i + 1; j < origArr.length; j++) {
int secondNumber = origArr[j];
if (firstNumber + secondNumber == 0) {
int[] newArr = new int[2];
newArr[0] = firstNumber;
newArr[1] = secondNumber;
System.out.println(Arrays.toString(newArr));
}
else {
System.out.println("There are no two integers whose sum is zero ");
}
}
}
}
当不满足“If”条件时,只要循环在迭代,系统就会多次打印sopln。如果没有两个整数匹配您的条件,则表示您已经检查了数组中所有可能的组合 如果已检查所有组合,则表示两个循环都已终止 无溶液打印应在两个循环后进行。要知道是否需要打印,可以使用布尔值。找到任何匹配组合时将其设置为true:
public static void main(String[] args) {
int[] origArr = { 1, 2, 3, -6, 8, 4 };
boolean solutionFound = false;
for (int i = 0; i < origArr.length-1; i++) {
int firstNumber = origArr[i];
for (int j = i + 1; j < origArr.length; j++) {
int secondNumber = origArr[j];
if (firstNumber + secondNumber == 0) {
// set the flag to true
solutionFound = true;
System.out.println(firstNumber + ", " + secondNumber);
}
}
}
// check the flag to see if a solution was found
if (!solutionFound) {
System.out.println("There are no two integers whose sum is zero ");
}
}
下面是另一个,记录到和,并在数组中找到一个正值:
public static void main(String[] args) {
int[] origArr = { 1, 2, 3, -6, 8, 4 , -4 };
boolean foundit = false;
for (int i = 0; i < origArr.length; i++) {
int firstNumber = origArr[i];
for (int j = i + 1; j < origArr.length; j++) {
int secondNumber = origArr[j];
System.out.println(Integer.toString(firstNumber));
System.out.println(Integer.toString(secondNumber));
if (firstNumber + secondNumber == 0) {
int[] newArr = new int[2];
newArr[0] = firstNumber;
newArr[1] = secondNumber;
System.out.println(Arrays.toString(newArr));
System.out.println("Found !!!!!");
foundit = true;
}
}
}
if (foundit == false) {
System.out.println("There are no two integers whose sum is zero ");
}
}
}
以下流解决方案演示了:
寻找解决方案的不同方法。
以及在没有打印时正确打印。
它基本上使用一对Intstreams执行嵌套循环,并创建一个数组流,其中包含要测试的值。flatMap将流组合成一个,然后根据其元素的总和对数组进行过滤。然后将它们收集到一个列表中。然后打印所有解决方案。如果列表为空,则会打印相应的消息
int len = origArr.length;
List<int[]> list = IntStream.range(0, len - 1)
.mapToObj(i -> IntStream.range(i + 1, len)
.mapToObj(j -> new int[] { origArr[i], origArr[j] }))
.flatMap(Function.identity())
.filter(a -> a[0] + a[1] == 0)
.collect(Collectors.toList());
if (list.isEmpty()) {
System.out.println(
"There are no two integers whose sum is zero ");
} else {
list.forEach(arr -> System.out.println(Arrays.toString(arr)));
}
}
使用布尔标志。提示:如果没有,则表示每个元素都已检查,因此循环结束。如果没有两个和等于零的整数,则逻辑检查不正确。您应该将结果存储在其他地方,然后在遍历整个数组后再打印。@SimonPham如果OP只想打印所有匹配的组合,我看不出这有什么不对logic@jhamon错误的是他打印了System.out.println没有两个和为零的整数;每当它找到一对第一个数字+第二个数字!=0@SimonPham我相信这就是OP的问题所在。该语句显然位于错误的位置,只有在OP离开循环后,没有找到两个这样的数字时,才应打印该语句。否则,请打印已找到的内容。这就是布尔解。谢谢。这是正确的。不确定我的问题出了什么问题我知道我把打印的声明放错地方了,有人投了反对票。