我试图在这里比较两个分数。从文件中读取其中一个,然后赋予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.
}
}
答案 0 :(得分:1)
要比较两个分数a/b
和c/d
是否相等,请检查a*d == c*b
,在您的代码中为:
if (num*allFracs[index + 1] == allFracs[index]*denom)
{
occurences[index / 2]++;
doesExist = true;
}