Как сравнить дроби, чтобы найти дубликаты, и добавить только уникальные дроби в массив в Java? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь сравнить две дроби здесь.Один из них считывается из файла и затем передается num и denom, а другой - каждые два индекса массива "allFracs".

Мне нужно сравнить каждое число и число, чтобы убедиться, что они уникальны, а не дубликаты, которые уже есть в "allFracs".

Я обнаружил, что могу сделать это путем перекрестного умножения дробей и установки булевой переменной в значение true / false в зависимости от того, существует она или нет.Если логическое значение по-прежнему равно false и в массиве достаточно места, я бы установил allFracs [count] и allFracs [count + 1] равными num, denom и счетчику приращений на 2.

Моя проблемачто дроби, которые равны тем же самым вещам (то есть 4/2 и 6/3), все еще появляются в массиве.* Пожалуйста, не отвечайте профессиональными решениями, я их не пойму.

    while(input.hasNextLine())
    {
        String[] frac = input.nextLine().split("/");
        int num = Integer.parseInt(frac[0]); 
        int denom = Integer.parseInt(frac[1]); 
        boolean doesExist = false;
        if (totalElements == 0)
        {
            allFracs[0] = num; 
            allFracs[1] = denom; 
            totalElements++; 
        } 
        else 
        {
            for (int index = 0; index < totalElements; index += 2)              
            {
                int fraction = (num * allFracs[index + 1]) / (denom * allFracs[index + 1]);
                int fraction2 = (denom * allFracs[index] / denom * allFracs[index + 1]);    

               if (fraction == fraction2) // cross-multiplication of two fractions.
                {
                    occurences[index / 2]++;
                    doesExist = true;
                }
            }
            if (doesExist == false) 
            {
                if (count + 2 >= allFracs.length - 1)
                {
                    allFracs = resizeArray(allFracs);
                    allFracs[count] = num;
                    allFracs[count + 1] = denom;
                }
                else
                {
                    allFracs[count] = num;
                    allFracs[count + 1] = denom;
                }
            }
        }
        count += 2; // incrementing for both the numerator and denominator.
    }
}

1 Ответ

0 голосов
/ 05 октября 2018

Для сравнения, если две дроби a/b и c/d равны, вы проверяете для a*d == c*b, что в вашем коде будет:

if (num*allFracs[index + 1] == allFracs[index]*denom) 
{
  occurences[index / 2]++;
  doesExist = true;
}
...