使用java在数组中查找具有不同绝对值的数字
我试图写一个程序,打印出具有唯一绝对值的数字。 以下是我的尝试:
import java.util.*;
public class MyClass {
static ArrayList<Integer> aCopy;
public static void main(String[] args)
{
int myArray[]= {-5, 4,-6,8,-4,6,13};
System.out.println(Arrays.toString(myArray));
aCopy = new ArrayList<>();
for(int i=0; i<myArray.length; i++)
{ aCopy.add(myArray[i]); }
System.out.println("Numbers with unique abs. value are:");
findDifferentAbsoluteValues(myArray);
System.out.println(aCopy);
}
public static boolean findDifferentAbsoluteValues (int[] anArray)
{
for (int i=0; i<anArray.length;i++)
{
for(int j=i+1;j<anArray.length; j++)
{
if ( Math.abs(anArray[i]) == Math.abs(anArray[j]) )
{
aCopy.remove(anArray[i]);
return false;
}
}
}
return true;
}
}
但它给出了错误的输出。我(还)不是很精通java,所以我主要关心的不是这个解决方案是否优雅,只是需要它工作。)任何人都可以解释一下出了什么问题,好吗
# 1 楼答案
在方法
findDifferentAbsoluteValues
中,这里aCopy.remove(anArray[i]);
首先必须找到要删除的元素的索引,然后删除它,否则它可以给出ArrayIndexOutOfBoundsException
在找到不正确的匹配项后,您将从函数返回,因为您还必须继续检查其他数字。 因此,用
break
语句替换return
。也要去掉boolean
返回类型,因为它是无用的,把它改成void
,因为你没有在任何地方使用返回值public static void findDifferentAbsoluteValues (int[] anArray)
您的代码应该如下所示:
这对我很管用
# 2 楼答案
在Java8+中,可以使用^{} 来获取绝对值,然后使用^{} 来获取唯一值,最后使用^{} 来打印它。比如
# 3 楼答案
我理解你想取一系列不同的绝对值的问题。 先错
它不能删除这些,因为它们具有相同的值。您发现相同的值,但
anArray[i]
不值得删除。例:i=1数组[1]=4。你会删除这个第二个错误不要返回错误。因为循环没有完成
我对问题和答案的理解如下:
# 4 楼答案
你们都是对的。我搞乱了内部循环,因为我想到了一个我不久前写的函数,它检查一个数字是否为素数,在这里使用return语句是有意义的。 非常感谢所有回复我帖子的人。复活节快乐
# 5 楼答案
你的(主要)问题是,你的函数
findDifferentAbsoluteValues
在删除第一个“重复项”后停止,你正在毫无顾忌地删除你正在迭代的列表中的元素。以下是一些帮助您改进代码的建议:ArrayList
直接用于myArray
,不要复制它ArrayList
作为参数,而不是对全局(static
)变量进行操作findDifferentAbsoluteValues
应该返回void
对于函数
findDifferentAbsoluteValues
中的算法:编辑:下面是一个解决方案示例: