Java 有没有办法改进这个数组代码?

Java 有没有办法改进这个数组代码?,java,Java,这是App Academy入学挑战的问题之一。他们并不难,但我对java的知识非常有限,所以花的时间比平时长。我遇到的问题是:给定一个数字数组和一个目标数字,如果数组中的元素是目标数字的倍数,则以数组格式返回它们。例:{7,12,9,5,15},3只返回12,9,15 我的思考过程是:我将得到一个空数组,其中的元素与传入的数组相等。创建计数变量以增加临时数组。循环并赋值。为输出创建一个与方法类型相同的新变量,并将从临时数组到新数组的所有内容传入。返回 我觉得有一种更简单的方法可以做到这一点,但我

这是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
,而无需创建第二个数组。