Попарное сопоставление массивов в java дает ошибку, также хранит данные между двумя похожими элементами

У меня два массива. Они представляют собой x-координаты и y-координаты. Код такой: если обе координаты совпадают, он печатает оператор "Обе координаты одинаковы", иначе они печатают Они не такие.

Мой код

 public static void main(String args[]){
    double[]xcoordinate={2.3,1.2,3.3,5.5,2.3,1.3,7.9,1.2,3.3,3.3,5.2};
    double[]ycordinate={5.4,2.2,4.4,6.6,5.4,1.9,5.2,2.2,3.5,4.4,4.2};
    int i=0,k=1;
    while(i<xcoordinate.length){
        //if(xcoordinate[i]&&ycordinate[i]==xcoordinate[k]&&ycordinate[k]){
        if(xcoordinate[i]==xcoordinate[k]&&ycordinate[i]==ycordinate[k]){
            System.out.println("Both co ordinates are same");
            i++;
            if(k<xcoordinate.length) {
                k = i + 1;
            }

        }
        else{
            System.out.println("They are not same");
        }
        k++;
    }
}

Если я проанализирую массив, я вижу, что 2.3 и 5.4 - пары, 1.2 и 2.2 - пары и так далее. Как видите, 2.3 и 5.4 повторяются на 5-й паре. Итак, в этот раз они печатают Они такие же.

Но блок кода не запускается для этого оператора if.

Ошибка: исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 11

Как устранить эту ошибку, а также как хранить данные типа Они не такие?

Например, хотите сохранить {{1.2,3.3,5.5} и {2.2,4.4,6.6}} и {{3.3,5.5,2.3,1.3,7.9} и {4.4,6.6,5.4,1.9,5.2}} ... .. в отдельности.

Разве это не должно быть if(xcoordinate[i] == ycordinate[i] && xcoordinate[k] == ycordinate[k])?

ernest_k 10.08.2018 15:07

Ваша проблема не имеет ничего общего с вашим алгоритмом (попарное сопоставление). У вас простая синтаксическая ошибка. Обратите внимание, что левый и правый операнды && должны вычисляться как логическое выражение.

Florian Albrecht 10.08.2018 15:08

Вместо while следует использовать цикл for. Вы будете зацикливаться бесконечно, если не все ваши координаты совпадают.

T A 10.08.2018 15:15

@FlorianAlbrecht Я меняю свой кодовый блок, и возникает новая проблема. Теперь это связано с моей проблемой парного алгоритма.

Saswati 10.08.2018 15:42

Отредактировали мой код, чтобы он соответствовал вашим новым требованиям! Надеюсь, поможет

Shubham Chopra 10.08.2018 15:52
3
5
94
3

Ответы 3

Вам нужно изменить, у вас синтаксическая ошибка:

if((xcoordinate[i]==xcoordinate[k])&&(ycordinate[i]==ycordinate[k]))

Если выражения не оцениваются так, как вы закодировали.

Обновлено еще раз: Вот полный рабочий код:

 public static void main(String args[]){
    double[]xcoordinate={2.3,1.2,3.3,5.5,2.3,1.3,7.9,1.2,3.3,3.3,5.2};
    double[]ycordinate={5.4,2.2,4.4,6.6,5.4,1.9,5.2,2.2,3.5,4.4,4.2};
    for(int i = 0; i < xcoordinate.length; i++)
    for(int k = i+1; k < xcoordinate.length; k++)
            if(xcoordinate[i]==xcoordinate[k]&&ycordinate[i]==ycordinate[k]){
            System.out.println("Both co ordinates are same: " + i + "," + k);
        }
        else{
            System.out.println("They are not same" + i + " " + k);
        }
    }

РЕДАКТИРОВАТЬ 3: та же функциональность, с использованием циклов while, правильный способ выполнения:

public static void main(String args[]){
    double[]xcoordinate={2.3,1.2,3.3,5.5,2.3,1.3,7.9,1.2,3.3,3.3,5.2};
    double[]ycordinate={5.4,2.2,4.4,6.6,5.4,1.9,5.2,2.2,3.5,4.4,4.2};
    int i = 0;
    while(i < xcoordinate.length)
    {
        int k = i+1;
        while(k < xcoordinate.length)
        {
        if(xcoordinate[i]==xcoordinate[k]&&ycordinate[i]==ycordinate[k]){
            System.out.println("Both co ordinates are same: " + i + "," + k);
        }
        else{
            System.out.println("They are not same" + i + " " + k);
        }
        k++;
        }
        i++;
    }
}

Вам не хватает закрывающей скобки.

T A 10.08.2018 15:14

@Simion Я меняю свой кодовый блок, и возникает новая проблема.

Saswati 10.08.2018 15:41

@Shubham Chopra, вы сильно ошибаетесь, я просто написал весь код на Java Fiddle, обратите внимание на выходы. Я даже не заглядывал в ваш код. Прежде чем что-то делать, вы должны убедиться в этом. Во-вторых: вы сделали по-другому, я вообще не сохраняю значения, все проверки делаю без сохранения старых индексов. Очень грубо с вашей стороны.

Simion 10.08.2018 15:57

@Simon Спасибо за ваш вклад, но проверка, которую вы сделали, не такая, как я хочу. Когда они находят совпадение между позициями i = 0, k = 4, тогда i увеличивается на 1 и значение k, начиная с позиции k = i + 1. Итак, согласно вашему блоку кода (0,5), (0,6), (0,7), (0,8), (0,9), (0,10) эта проверка никогда не выполнялась. Потому что я уже нахожу совпадение и увеличиваю на 1.

Saswati 10.08.2018 17:46

Помимо ответа Симиона, который решает вашу проблему с оценкой, у вас будет бесконечный цикл, потому что вы увеличиваете только i (i ++), когда ваши числа совпадают.

вот почему я написал хорошо работающий код ниже

Shubham Chopra 10.08.2018 15:28

Если бы редактор был открыт какое-то время, не увидел, что вы уже ответили на него.

LeBraveLittleToaster 10.08.2018 15:30

@ShubhamChopra Я меняю свой кодовый блок, и возникает новая проблема.

Saswati 10.08.2018 15:41

@ Сасвати, в чем проблема?

Shubham Chopra 10.08.2018 15:41

Я считаю, что вы пытаетесь отслеживать повторяющиеся координаты, Если да, то это может помочь!

int i=0;
HashMap<Double,Double> hst = new HashMap<Double,Double>();
while(i<xcoordinate.length){

    if(hst.containsKey(xcoordinate[i])){
        if(hst.get(xcoordinate[i]) == ycordinate[i])
        System.out.println("Occured before and now again at pos" +i);
        i++;
        continue;
    }

    System.out.println("Not occured before");
    hst.put(xcoordinate[i],ycordinate[i]);
    i++;
}

Это нормально, но как я могу получить значения тех координат, которых раньше не было. Я хочу создать набор подданных из фактического набора данных. Как я уже упоминал ранее, {1.2,3.3,5.5} и {2.2,4.4,6.6} - это мой первый поднабор данных, {3.3,5.5,2.3,1.3,7.9} и {4.4,6.6,5.4,1.9,5.2} мой 2-й вспомогательный набор данных .... и так далее.

Saswati 10.08.2018 17:37

Другие вопросы по теме