如何比较分数以查找重复项,并且仅将唯一分数添加到Java中的数组?

时间:2018-10-05 03:55:03

标签: java arrays fractions

我试图在这里比较两个分数。从文件中读取其中一个,然后赋予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 :(得分:1)

要比较两个分数a/bc/d是否相等,请检查a*d == c*b,在您的代码中为:

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