我是Java编码的新手,我需要一些帮助。
我需要一种方法来过滤数组中的平方数,例如(4、9、16、25),然后将它们保存到新数组中而不替换旧数组。
不幸的是,我没有办法:/。
这是我自己的一些想法:
public static int[] arrayFilter(int originalArray[]) {
int[] filterArray = generateCopy(originalArray);
for(int index = 0; index < filterArray.length; index++) {
}
}
}
感谢您的帮助:)
答案 0 :(得分:0)
这是怎么回事,请遍历数组并检查平方根的平方与原始数字相同。如果是这样,则将其添加到列表中,完成后将其转换为数组。
int[] numbers = new int[] { 1,2,3,4,5,6,7,8,9,10 };
List<Integer> resultList = new ArrayList<>();
for (int number: numbers) {
int sqrRoot = (int) Math.round(Math.sqrt(number));
if (sqrRoot * sqrRoot == number) {
resultList.add(number);
}
}
或者如果您不能使用List
(请参阅下面原始问题作者的评论)...
int[] numbers = new int[] { 1,2,3,4,5,6,7,8,9,10 };
int[] initResult = new int[numbers.length];
int numSquares = 0;
for (int i = 0; i < numbers.length; i++) {
int sqrRoot = (int) Math.round(Math.sqrt(numbers[i]));
if (sqrRoot * sqrRoot == numbers[i]) {
initResult[numSquares] = numbers[i];
numSquares++;
}
}
int[] result = new int[numSquares];
for (int i = 0; i < numSquares; i++) {
result[i] = initResult[i];
}
我按照(int) Math.round(Math.sqrt(numbers[i]))
计算平方根的原因是为了防止floating point arithmetic问题。这样,整数4的平方根将始终是值为2的整数。
答案 1 :(得分:-1)
下面是使用带过滤器的Streams创建新输出数组的示例。
public class Squares {
public static void main(String... args) {
double[] numbers = {1, 2, 3, 4, 4.4, 100, 2500, 2500.1};
double[] squares = Arrays.stream(numbers)
.filter(Squares::isSquare)
.toArray();
System.out.println(Arrays.toString(squares));
}
private static boolean isSquare(double d) {
double sr = Math.sqrt(d);
return sr - Math.floor(sr) == 0;
}
}