假设我有一个数组或整数列表(没有重复),比如说:
int[] = { 35 165 21 5 6 55 7 42}
现在我需要根据两条规则过滤列表:
让我再解释一下我的问题:
假设我在之前的数组中选择165。现在,165不能被35,6,7,42整除;但它可以被5和55整除。所以,我从数组中删除了5和55。同样,21,6,7也被删除。因此,我的最终列表是:165, 35, 42
。
我试图用以下代码对此进行排序:
Set<Integer> MFV = new HashSet<>();
for(i = 0; i < lwd.length; i++)
{
for(j = i; j < lwd.length; j++)
{
if(i != j && (lwd[i] % lwd[j] == 0 || lwd[j] % lwd[i] == 0))
{
if(lwd[i] > lwd[j])
MFV.add(lwd[i]);
//else
//MFV.add((int)lwd[j]);
}
}
}
System.out.println();
for(Iterator<Integer> it = MFV.iterator(); it.hasNext();)
{
System.out.print(it.next() + " ");
}
但是这会得到结果35, 165, 21
。
答案 0 :(得分:1)
您的实施不起作用, 有两个原因:
您过早地将元素添加到不可分集的集合中:仅仅因为第i个元素被第j个元素除,并不意味着不应该删除第i个元素。它只意味着应该删除第j个元素。随着循环的继续,很可能也必须删除第i个元素,但是为时已晚,因为它已经被添加到不可分集的集合中。
用于在不可分集的集合中添加元素的条件<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="#" id="videosButton">videos</a><br>
<a href="#" id="graphicButton">graphic design</a><br>
<a href="#" id="webButton">web design</a><br>
My pages are formatted like so:
<div id="videos" class="page">Videos page</div>
是不够的:例如lwd[i] > lwd[j]
永远不会成立,阻止x > c * x
被添加到集。
根据数字的顺序, 实施可能会给出正确的结果。 通过重新排列数字很容易打破它, 例如,这个排序演示了我在上面指出的两个问题:
c * x
在此顺序中,程序输出:35,21。
也就是说,21被错误地添加到集合中, 之前考虑21比42,这将消除21。 这证明了第一个问题。
缺失的165表明了第二个问题:
在int[] lwd = {35, 21, 5, 6, 55, 7, 42, 165};
比较中,
165将永远是第二个操作数,因为它位于列表的末尾,
它比所有其他元素都大,
所以它永远不会被添加到不可分割的集合中。
这是修复这些问题的替代版本:
lwd[i] > lwd[j]
答案 1 :(得分:0)
您的规则1与您的示例相冲突。
我相信你可以重新解决你的问题&#34;删除所有可以分割成另一个值的值&#34;。 (是&#34;可分为&#34;正确的短语?)
换句话说,删除所有a
a < b && b % a == 0
。