我有以下任务,编写一个方法,获取价格列表并将其相加,仅包括大于 minPrice(含)和小于 maxPrice(含)的价格,然后返回金额。
只能使用for循环。
我返回的结果是错误的。
我认为 if (price >= minPrice && Price <= maxPrice) counter++;
但我不明白为什么。
public int getPricesSum(int[] prices, int minPrice, int maxPrice) {
if (prices.length == 0) return 0;
int counter = 0;
for(int i = 0; i < prices.length; i++) {
int price = prices[i];
if (price >= minPrice && price <= maxPrice) counter++;
}
int result [] = new int [counter];
int newResult = 0;
for(int i = 0; i < result.length; i++) {
newResult += prices[i];
}
return newResult;
}
public static void main(String[] args) {
QuadraticEquationSolver shop = new QuadraticEquationSolver();
//Should be 144 - 20 + 50 + 40 + 34
int[] prices = new int[] {10, 20, 50, 40, 34, 500};
System.out.println(shop.getPricesSum(prices, 20, 50));
}
}
结果是120。 我想它只计算数组的前四个索引。
为什么要增加计数器?您刚刚获得了 NUMBER 个正确的元素,但随后您将从第一个 (0) 个元素开始迭代。相反,您可以在第一个 foo 循环中对其进行总结,如下所示:
for(int i = 0; i < prices.length; i++) {
int price = prices[i];
if (price >= minPrice && price <= maxPrice) newResult += price;
}
public int getPricesSum(int[] prices, int minPrice, int maxPrice) {
int sum = 0;
for (int price : prices) {
if (price >= minPrice && price <= maxPrice) {
sum += price;
}
}
return sum;
}
您的任务是确定给定范围内的价格总和
[minPrice, maxPrice]
。无需计算元素或将元素复制到新数组即可实现您的目标。
您可以将问题分解为三个步骤:
result
变量中包含的元素求和。public int getPricesSum(int[] prices, int minPrice, int maxPrice) {
int newResult = 0;
for(int i = 0; i < prices.length; i++) {
if (prices[i] >= minPrice && prices[i] <= maxPrice){
newResult += prices[i];
}
}
return newResult;
}
public static void main(String[] args) {
QuadraticEquationSolver shop = new QuadraticEquationSolver();
int[] prices = new int[] {10, 20, 50, 40, 34, 500};
System.out.println(shop.getPricesSum(prices, 20, 50));
}