如何 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_VALUE
和 Integer.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]
嗨,你好吗? =) 我是 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_VALUE
和 Integer.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]