Java 有没有办法改进这个数组代码?
这是App Academy入学挑战的问题之一。他们并不难,但我对java的知识非常有限,所以花的时间比平时长。我遇到的问题是:给定一个数字数组和一个目标数字,如果数组中的元素是目标数字的倍数,则以数组格式返回它们。例:{7,12,9,5,15},3只返回12,9,15 我的思考过程是:我将得到一个空数组,其中的元素与传入的数组相等。创建计数变量以增加临时数组。循环并赋值。为输出创建一个与方法类型相同的新变量,并将从临时数组到新数组的所有内容传入。返回 我觉得有一种更简单的方法可以做到这一点,但我不知道如何/查找什么Java 有没有办法改进这个数组代码?,java,Java,这是App Academy入学挑战的问题之一。他们并不难,但我对java的知识非常有限,所以花的时间比平时长。我遇到的问题是:给定一个数字数组和一个目标数字,如果数组中的元素是目标数字的倍数,则以数组格式返回它们。例:{7,12,9,5,15},3只返回12,9,15 我的思考过程是:我将得到一个空数组,其中的元素与传入的数组相等。创建计数变量以增加临时数组。循环并赋值。为输出创建一个与方法类型相同的新变量,并将从临时数组到新数组的所有内容传入。返回 我觉得有一种更简单的方法可以做到这一点,但我
public static Integer[] multipleSelect(Integer[] nums, int target) {
int [] temp = new int[nums.length];
int count = 0;
for(int x = 0; x < nums.length; x++)
{
if(nums[x] % target == 0)
{
temp[count] = nums[x];
count++;
}
}
Integer[] output = new Integer[count];
for(int y = 0; y < count; y++)
{
output[y] = temp[y];
}
return output;
}
public静态整数[]倍数选择(整数[]nums,整数目标){
int[]temp=新的int[nums.长度];
整数计数=0;
对于(int x=0;x
网站接受了这个,但我不太喜欢。如何改进它?您可以使用两个递增值删除第二个数组和循环,$I表示输入数组的当前索引,$j表示输出中的索引。
如上文/下文所述,使用arraylist或非固定长度数据类型进行输出会使您受益。您可以通过使用数组列表来提高程序的空间复杂度,当您的条件满足时,您可以向列表中添加值以提高第一个数组的空间复杂度,然后,如果您使用上述代码,您可以转换数组列表按数组排列
Integer[] output = {name of arraylist}.toArray();
然后,您可以从函数返回此数组,只要您可以使用Java 8或更高版本,这是使用流的最佳位置,您可以在一行中执行您想要的操作:
import java.util.Arrays;
public class X {
public static Integer[] multipleSelect(Integer[] nums, int target) {
return Arrays.stream(nums).filter( x -> x % target == 0).toArray(Integer[]::new);
}
public static void main(String[] args) {
Integer[] input = new Integer[] {7, 12, 9, 5, 15};
Integer[] output = multipleSelect(input, 3);
for (Integer i : output)
System.out.println(i);
}
}
结果:
12
9
15
您最好注意,在查看代码时,您应该发布完整的可运行示例,因此在此代码中提供一个
main
。您可以删除第二个数组output
,只需将temp
数组重新指定为Integer
数组。这样,您就可以直接返回temp
,而无需创建第二个数组。