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离开循环后,没有找到两个这样的数字时,才应打印该语句。否则,请打印已找到的内容。这就是布尔解。谢谢。这是正确的。不确定我的问题出了什么问题我知道我把打印的声明放错地方了,有人投了反对票。