检查数组是否包含两个数字

Checking if an array contains two numbers

我刚开始使用 Java,现在遇到一个问题,我在检查代码 2 小时后无法解决。 当我输入: 7(作为长度) 6 3 4 8 3 2 6(作为数组) 8 3(作为要检查的数字)

它写错了,但很明显它们的顺序是正确的。 请帮助我了解问题所在

代码如下:


import java.util.Scanner;

public class checker {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int length = scanner.nextInt();
        int[] numbers = new int[length];

        boolean broken = false;
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        for (int j = 1; j < length; j++) {

            if (numbers[j] == n && numbers[j-1] == m || numbers[j] == m && numbers[j+1] == n || numbers[j] == m && numbers[j-1] == n || numbers[j] == n && numbers[j+1] == m) {
                broken = false;
            } else {
                broken = true;
            }

        }
        if (broken) {
            System.out.println("false");
        } else {
            System.out.println("true");
        }
    }
}

正如你在评论中提到的,你想检查 {n,m} 和 {m,n} 那么你为什么有更多的条件? 以下就够了:

for (int j = 0; j < length-1; j++) {
    if (numbers[j] == n && numbers[j+1] == m || numbers[j] == m && numbers[j+1] == n) {
        broken = false;
        break;
    } else {
        broken = true;
    }
}

循环从 0(=第一个数组元素)到最后一个 -1,因为 if 与 j+1 进行比较。找到匹配项后,您必须跳出循环,否则您可能会再次将 broken 设置为 false。

您也可以在不使用布尔值的情况下实现这一点,请检查下面的调整代码。

import java.util.Scanner;

public class checker {

public static void main(String[] args) {

    int howManyValuesPresent = 0;

    Scanner scanner = new Scanner(System.in);
    System.out.println("Length of array");
    int length = scanner.nextInt();
    int[] numbers = new int[length];

    for (int i = 0; i < numbers.length; i++) {
        numbers[i] = scanner.nextInt();
    }


    int n = scanner.nextInt();

    int m = scanner.nextInt();


    for(int number: numbers){
        if(number == n || number == m){
            howManyValuesPresent++;
        }
    }

    if (howManyValuesPresent>0) {
        System.out.println("true, Your selected numbers appear: " + howManyValuesPresent + " times in array");
    } else {
        System.out.println("false, Your selected numbers appear: " + howManyValuesPresent + " times in array");
    }
}
}