我正在为AP CSA编写一个Java程序,它从一个二维数组的列中获取最大值,用来确定并打印出品牌的哪个区域最受欢迎/或销售额最高;它还获取最小值,用来确定品牌的哪个区域销售额最低。
我已经创建了两个一维数组,一个是为5个运动鞋品牌出售,另一个是为四个地区/地点,他们出售。
String[] brands = { "ACTION", "DEFY", "GEL", "JETPRO", "MAGNUM"
};
String[] districts =
{
"North", "West", "South", "East" };
然后,我创建了一个二维数组,其中包含以下数字**,对应于**:
- 每行五个 * 运动鞋品牌 *
- 以及每列中的 * 位置 *
int[][] sales = {
{ 17, 57, 35, 48, 31 },
{ 35, 36, 53, 78, 76 },
{ 55, 56, 96, 44, 56 },
{ 35, 44, 34, 43, 44 }
};
为了找到上面提到的最大值和最小值,我必须做一个嵌套的for循环来遍历二维数组,逐行而不是逐列,根据运动鞋销售的位置/区域来检查值,我有两个变量来保存最大值和最小值以及它们的索引,这就是问题开始出现的地方。
一开始,我把max和min设置为从2d数组的第一个元素开始,并根据if语句进行更改,索引从0开始。
if语句检查每列中是否有元素小于min或大于max,如果有,则将列表中的特定元素设置为min/max,并且maxIndex和minIndex(找到min/max的位置)将相应地更新。
它对最大值工作得很好,但是在超过数千次失败的尝试中,检查最小值的if语句从来没有工作过。
下面是完整的代码,包括起始变量和for循环:
int max = sales[0][0];
int min = sales[0][0];
int minIndex = 0;
int maxIndex = 0;
for (int col = 0; col < sales[0].length; col++) {
for (int dist = 0; dist < sales.length-1; dist++) {
min = sales[dist][col];
// if this element is larger than any other element
if(sales[dist+1][col]<min) {
min = sales[dist][col];
minIndex = dist;
System.out.print("Min value: " + sales[minIndex][col] + "\n");
}
if(max<sales[dist][col]) {
maxIndex = dist;
max = sales[dist][col];
System.out.print("Max value: " + max + "\n");
}
}
System.out.println();
System.out.println(brands[col]);
System.out.println("Most popular: " + districts[maxIndex]);
System.out.println("Least popular: " + districts[minIndex]);
minIndex = 0;
max = sales[0][0];
}
上千次失败的尝试都没有解决我的if语句问题,该语句用于检查列中的最小值,既然我不能给你上千个例子,我将展示我的第一次尝试。
- 我使用了线性搜索技术,这是搜索小于目标元素(在本例中为sales [0][0])的值的最简单方法。
- 如果任何值小于该特定元素,则最小值将被设置为该元素,并且循环将相应地运行。
- 它看起来是这样的:
if(sales[dist][col]<min) {
minIndex = dist;
min = sales[dist][col];
}
我希望每次运行内部for循环时,它都会相应地改变min值,然而,我尝试了很多不同的方法,但都无济于事。
这是我第二次尝试修复,但最终失败了:(要查看for循环和其他代码,请查看问题详细信息部分,我在那里对所发生的事情进行了全面概述)
min = sales[dist][col];
// if this element is larger than any other element
if(sales[dist+1][col]<min) {
min = sales[dist][col];
minIndex = dist;
System.out.print("Min value: " + sales[minIndex][col] + "\n");
}
我以为这会起作用,但是没有返回任何结果,在我的所有尝试中,min的值在循环之前和循环完成迭代之后都停留在[0][0]。
我真的需要帮助来找到我的问题的根本原因,所以任何帮助都将不胜感激。
1条答案
按热度按时间sdnqo3pr1#
因为你希望每列都有一个最小值和最大值,所以你应该把变量移到外部(第一个)for循环中,并在内部循环中进行最大值/最小值检查: