【问题标题】:Iterating over arrays Check if an array contains two numbers遍历数组检查数组是否包含两个数字
【发布时间】:2021-08-03 05:49:44
【问题描述】:

编写一个程序,读取一个未排序的整数数组和两个数字nm。程序必须检查 nm 在数组中是否彼此相邻(以任何顺序)。

输入数据格式

  • 第一行包含数组的大小
  • 第二行包含数组的元素
  • 第三行包含两个整数nm

同一行中的所有数字由空格字符分隔。

输出数据格式

只有一个值:truefalse

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int size = scanner.nextInt();
        int[] table = new int[size];
        for (int i = 0; i < table.length; i++) {
            table[i]=scanner.nextInt();
        }
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        for (int i = 0; i < table.length ; i++) {
            //stuck here 
        }
    }
}

【问题讨论】:

  • 你首先需要找到m或n。然后分别检查相邻元素是n还是m。
  • 你熟悉if语句吗?
  • 您可以编写伪代码为 cmets,而不是留下评论 // stuck here,或者尝试一些实现并说明为什么这不起作用,minimal reproducible example。我们可以帮助您将您的想法转化为正确的代码。

标签: java arrays integer pattern-matching


【解决方案1】:

我认为它可以帮助你:

        for (int i = 0; i < table.length-1 ; i++) {
            if (table[i] == m){
                if (table[i+1] == n) {
                    System.out.println("true");
                    return;
                }
            }
            if (table[i] == n){
                if (table[i+1] == m) {
                    System.out.println("true");
                    return;
                }
            }
        }
        System.out.println("false");

【讨论】:

  • 不要马上给他们答案。尤其是不解释。每次他们遇到困难时,你都会帮助他们吗?
  • 您可以通过解释您的测试算法来帮助 OP(ifs 测试是什么)。更改for循环(上限/退出条件为table.length-1)时,为什么这里需要?
【解决方案2】:

这将通过所有测试:

import java.util.Scanner;

class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int arraySize = scanner.nextInt();
        int[] array = new int[arraySize];

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

        int n = scanner.nextInt();
        int m = scanner.nextInt();
        boolean valuesAreNotOccurNearEachOther = true;

        for (int i = 0; i < array.length - 1; i++) {
            if (array[i] == n || array[i] == m) {
                if (array[i + 1] == m) {
                    valuesAreNotOccurNearEachOther = false;
                }
                if (array[i + 1] == n) {
                    valuesAreNotOccurNearEachOther = false;
                }
            }
        }

        System.out.println(valuesAreNotOccurNearEachOther);
    }
}

【讨论】:

  • 指定一些测试用例(OP 没有)是个好主意。你能列出测试(你的代码通过了)吗?如果n 在数组中重复两次(真或假)会发生什么?是什么让您的代码与 dev55555's one 不同?\
  • 9 3 4 5 6 3 4 6 4 4 4 4
猜你喜欢
  • 2021-01-03
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2013-06-25
  • 2012-09-14
  • 2022-06-30
  • 2019-07-14
相关资源
最近更新 更多