VaiShankar Ответов: 1

Is_sub-array - не возвращает false


Привет. Я пытаюсь запустить программу под названием IsSubArray. Есть 2 входных текстовых поля. Один из них называется большим массивом, а другой-суб-массивом. Задача состоит в том, чтобы проверить, соответствуют ли значения в суб-массиве последовательно числам в большом массиве. Например:
Массив 1: 1,3,6,5,4
Массив 2: 1,3,6 - верно, потому что 1,3 совпадает с массивом 1.

Массив 2: 1,6 - ложь, потому что после 1 в массиве 1 нет 6. Он должен совпадать последовательно.

Массив 2: 6,5,4 - верно.

Массив 2: 5,4,7 - ложь, потому что в массиве 1 нет числа 7 после 4.
Но я становлюсь правдивым для этого последнего утверждения. Я не могу понять почему.

Заранее спасибо :)


function IsSubArray() {
    inputArray1 = document.getElementById("inputText1").value.split(",");
    inputArray2 = document.getElementById("inputText2").value.split(",");

    var msg = false;
    for (j = 0; j < inputArray2.length - 1; j++) {
        if (j > 0 && msg == false)
            break;
        for (i = 0; i < inputArray1.length - 1; i++) {
            if (inputArray2[j] == inputArray1[i] && inputArray2[j + 1] != inputArray1[i + 1]) {
                msg = false;
                break;
            }
            else if (inputArray2[j] == inputArray1[i] && inputArray2[j + 1] == inputArray1[i + 1]) {
                msg = true;
                break;
            }
        }
    }
    document.getElementById("output").value = msg + " : LongArray: " + inputArray1 + " , ShortArray: " + inputArray2;
}


Что я уже пробовал:

Пока все работает, кроме последнего утверждения.

F-ES Sitecore

Если вы используете отладчик javascript, вы можете пройти через свой код строка за строкой, чтобы увидеть, почему он не работает. При сравнении последних двух элементов в массиве, поскольку они совпадают с первыми двумя элементами во втором массиве msg устанавливается в true, и ничто другое не устанавливает его в false после этого.

Я думаю, что вы должны придумать более простой и надежный алгоритм. Возможно, цикл массива 1 до тех пор, пока вы не найдете первый элемент в массиве 2, а затем есть цикл, который проходит через остальную часть массива 2, чтобы убедиться, что каждый элемент соответствует следующему элементу в массиве 1 тоже.

W∴ Balboos, GHB

Кроме того: для небольших массивов, показанных на рисунке, это было бы нормально. Однако если сопоставление не удается, то поиск должен продолжаться сразу после последнего первоначальный сопоставьте, чтобы увидеть, существует ли подстрока еще дальше по большой строке. Просто заметив, на самом деле для первоначального вопрошающего, что "это не закончится, пока не закончится"

1 Ответов

Рейтинг:
1

W∴ Balboos, GHB

Вот вам бэк-хэндовое решение:

Возьмите цифры и превратите их в символьные строки, чтобы у вас было две строки:
"13654" и "136".

Теперь все, что вам нужно сделать, это использовать функцию php 'find-the-substring', чтобы увидеть, находится ли вторая строка в первой. Вы все равно должны работать над логикой вашего первоначального маршрута, так как это хороший опыт обучения.


F-ES Sitecore

Это, вероятно, домашнее задание, и предметом будет обработка массивов, поэтому я сомневаюсь, что это будет принято в качестве решения.

W∴ Balboos, GHB

Вот почему я называл это решением с обратной стороны, хотя и не думал об этом как о домашнем задании. Кроме того, аккуратный способ переформулировать проблему, нет?

F-ES Sitecore

Нет, не совсем так. Допустим, массив 1 имеет вид

1,5,8,12,45

а массив 2 был
2, 4, 5

Ваше решение приведет к ложному срабатыванию.

W∴ Balboos, GHB

Хороший улов. Думаю, ему придется оставить запятые на месте! Между тем, поджав хвост и ухмыляясь на этом конце.