如何 return 空数组 Java

How to return an empty array Java

嗨,你好吗? =) 我是 Java 的新手,目前,我正在学习数组和循环,目前我真的很吃力。

这是我的作业: 编写一个 public 方法 int[] findMinMaxPrices(int[] price)。 它需要一个价格数组和 return 一个新数组。

空,如果数组为空。 Returns只有一个元素,如果价格数组中的最高价和最低价相同。 Returns 如果价格数组同时包含最低价和最高价,则只有两个元素。最低价格应该在前,然后是最高价格。

只能使用for循环

我会在这里使用一些帮助: 在这种情况下如何 return 一个空数组? 我在草稿中做了很多次,不幸的是,它在这里不起作用。

如何在这里使用 for 循环?

你能给我一些提示或建议吗?

提前致谢!)

import java.util.Arrays;

public class QuadraticEquationSolver {
    
        public int[] findMinMaxPrices(int[] prices) { // I know it's a mess, but I'm just learning =)
        
        Arrays.sort(prices);
        
        int empty [] = {};
        int first [] = Arrays.copyOf(prices, 1);
        
        int a = prices[0];
        int b = prices[prices.length-1];
        
        int second [] = new int[] {a,b};        
        
            if(prices[0] == prices[prices.length-1]) {
                    return first;
            }   
            else if(prices[0] < prices[prices.length-1]) {
                    return second;
                        
            }else{ 
                return empty;
                //return new int[0]; I tried to use this here, didn't work =(
            }       
    }
   
    public static void main(String[] args) {
        QuadraticEquationSolver shop = new QuadraticEquationSolver();

        //Should be [50, 1500]
        int[] prices = new int[] {100, 1500, 300, 50};
        int[] minMax = shop.findMinMaxPrices(prices);
        System.out.println(Arrays.toString(minMax));

//findMaxPrices(new int[] {10, 50, 3, 1550}), returns [3, 1550]
//findMaxPrices(new int[] {}), returns []
//findMaxPrices(new int[] {50, 50}), returns [50]


    }
}

你 return 一个空数组就像调用 findMaxPrices(new int[]{}) 时创建一个空数组一样,只需使用 new int[]{}.

根据您的要求,您不需要对数组进行排序,因为您可以将最小值和最大值存储在局部变量中,只需将最小值加在最大值之前到您 return 的数组。

您遗漏的一件重要事情是检查 prices 的数组长度。使用 prices.length 可以得到数组中有多少个值。在尝试使用索引访问数组之前,请始终检查数组的长度,否则您可能会遇到 IndexOutOfBounds 异常。使用这个你可以在 prices.length == 0 时立即 return 因为那时数组中没有值,你需要 return 一个空数组。如果 prices.length == 1 我们在数组中只有一个值。这个值必须是最小值和最大值,所以我们可以 return 一个包含这个值的数组。在所有其他情况下,我们可以使用 for 循环遍历数组中的所有元素。如果我们找到一个小于/大于当前最小值/最大值的值,我们将其设置为新的最大值。为此,我们需要先将最小值和最大值初始化为最大/最小可能值。 Java 有常量 Integer.MAX_VALUEInteger.MIN_VALUE 用于这种事情。最后但同样重要的是,我们需要检查最大值和最小值是否相同。在那种情况下,我们只有 return 一个元素,否则我们 return 两个,但最小值在最大值之前。

public class Application {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(findMinMaxPrices(new int[]{100, 1500, 300, 50})));
        System.out.println(Arrays.toString(findMinMaxPrices(new int[]{})));
        System.out.println(Arrays.toString(findMinMaxPrices(new int[]{50, 50})));
    }

    public static int[] findMinMaxPrices(int[] prices) {
        // we can simply check the array length. If it is zero we return an empty array
        if(prices.length == 0) return new int[]{};
        else if(prices.length == 1) return new int[prices[0]]; // if we only have one element that one element must be the minimum and maximum value
        // array length is not zero or one -> we need to find minimum and maximum
        int min = Integer.MAX_VALUE; // set to maximal possible int value
        int max = Integer.MIN_VALUE; // set to minimal possible int value
        for (int i = 0; i < prices.length; i++) {
            int currentPrice = prices[i];
            if(currentPrice < min) min = currentPrice;
            if(currentPrice > max) max = currentPrice;
        }
        // now we have minimum and a maxium value
        // if they are the same only return one value
        if(min == max) return new int[]{max};
        // otherwise return both, but minumum first
        return new int[]{min, max};
    }
}

预期输出:

[50, 1500]
[]
[50]