我只是个初学者,所以我知道数据结构和代码逻辑根本不是很好。
这是一个项目的一部分,但我在格式化for循环时遇到了困难。我非常确定我必须创建某种for each循环。我不确定该怎么做,所以我创建了一个非常简化和分解的版本(我知道大部分代码都在实践中,但我想把它可视化。我需要帮助打印出每一类产品的总销售额。现在,我只有四个值,但是如果我增加到30个值,这个代码显然不能工作。那么关于如何创建for循环有什么建议吗?
public static int[] totalSale( int[] mac, int[] iphone, int[] ipad, int[] ipod ){
int[] totalSale = {0,0,0,0};
for (int i = 0; i < mac.length ; i++) {
totalSale[0] = totalSale[0] + mac[i];
totalSale[1] = totalSale[1] + iphone[i];
totalSale[2] = totalSale[2] + ipad[i];
totalSale[3] = totalSale[3] + ipod[i];
}
for (int i = 0; i < totalSale.length; i++) {
System.out.println("Total sale for category " + i + ": $" +
}
return totalSale;
}发布于 2016-10-08 23:09:48
变化
for (int i = 0; i < totalSale.length; i++) {
if (i == 0) {
System.out.println("Total sale for category " + i + ": $" + totalSale[0]);
}
if (i == 1) {
System.out.println("Total sale for category " + i + ": $" + totalSale[1]);
}
if (i == 2) {
System.out.println("Total sale for category " + i + ": $" + totalSale[2]);
}
if (i == 3) {
System.out.println("Total sale for category " + i + ": $" + totalSale[3]);
}
}至
for (int i = 0; i < totalSale.length; i++) {
System.out.println("Total sale for category " + i + ": $ + totalSale[i]);
}不需要为数组totalSale中的每个元素创建if语句。在处理涉及数组的循环语句时,请考虑数组的一般情况。由于您打印出数组中的每个元素都具有相同的行"Total sale for category",因此您可以玩弄它,并思考哪些正在发生变化,哪些没有变化。
显然,唯一变化的是i和要打印的数组中的元素。变化的可以用变量(i,totalSale[i])表示,不变的可以用常量("Total sale for category","$")表示。因此,在打印数组元素时,只需要在for循环中使用一行代码来表达这一点。
EDIT:处理在您的方法中接受可变数量的销售类别的问题的一种方法是让您的方法接受一个二维数组,其中行数是类别的数量,列数是每个类别中的销售数量。例如,int sales[][] = new int[30][20]表示一个包含30个类别的数组,每个类别有20个销售额。所以修改报头,
public static int[] totalSale( int[] mac, int[] iphone, int[] ipad, int[] ipod )至
public static int[] totalSale(int[][] sales)改变这一点,
int[] totalSale = {0,0,0,0};
for (int i = 0; i < mac.length ; i++) {
totalSale[0] = totalSale[0] + mac[i];
totalSale[1] = totalSale[1] + iphone[i];
totalSale[2] = totalSale[2] + ipad[i];
totalSale[3] = totalSale[3] + ipod[i];
}至
int[] totalSale = new int[sales.length];//sales.length is the number of
//rows/categories in sales
for (int i = 0; i < sales.length ; i++) {
for (int j = 0; j < sales[i].length; j++) { //sales[i].length is the number
//of sales/columns per category
totalSale[i] = totalSale[i] + sales[i][j];//sales[i][j] is the jth
//sale in the ith category
}
}最后,大体上,这4个数组现在可以替换为2D数组。
替换,
int[] mac = {200,9000,13000,900};
int[] iphone = {500,5000,200,0};
int[] ipad = {900,4300,0,800};
int[] ipod = {0,300,120,500};使用
int[][] sales = { {200,9000,13000,900},
{500,5000,200,0},
{900,4300,0,800},
{0,300,120,500}}; //how you define a 2D array上面是一个4x4阵列,但它可以很灵活。您可以将其设置为10x10、20x20、30x30等等。最后,不要忘记更改方法调用,现在只接受一个参数,即2D数组。
变化
popularDay(days,mac,iphone,ipad,ipod);至
popularDay(sales);发布于 2016-10-08 23:18:47
在这里,我可以看到你假设mac,iphone,ipad和ipod数组总是有相同数量的元素(长度)。如果其中一个有不同的长度,你的代码可能会中断。
我更倾向于采用这种方法:
public static int[] totalSale( int[] mac, int[] iphone, int[] ipad, int[] ipod ){
int[] totalSale = {0,0,0,0};
for (int i = 0; i < mac.length ; i++) {
totalSale[0] = totalSale[0] + mac[i];
}
for (int i = 0; i < iphone.length ; i++) {
totalSale[1] = totalSale[1] + iphone[i];
}
for (int i = 0; i < ipad.length ; i++) {
totalSale[2] = totalSale[2] + ipad[i];
}
for (int i = 0; i < ipod.length ; i++) {
totalSale[3] = totalSale[3] + ipod[i];
}
System.out.println("Total sale for category mac: $" + totalSale[0]);
System.out.println("Total sale for category iphone: $" + totalSale[1]);
System.out.println("Total sale for category ipad: $" + totalSale[2]);
System.out.println("Total sale for category ipod: $" + totalSale[3]);
return totalSale;
}首先,使用for循环计算每个类别各自的总销售额。然后在不使用for循环的情况下将结果写回控制台,因为没有理由使用它。
发布于 2016-10-08 23:19:22
Varargs将帮助您:https://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
public static int[] totalSale(int[]... categories) {
int[] totalSale = new int[categories.length];
for (int i = 0; i < totalSale.length; i++) {
for (int j = 0; j < categories[i].length; j++) {
totalSale[i] = totalSale[i] + categories[i][j];
}
System.out.println("Total sale for category " + i + ": $" + totalSale[i]);
}
return totalSale;
}因此,在这种情况下,您可以传递任意数量的参数:
int[] totalSales = totalSale(mac, iphone, ipad, ipod, ipod2, iphone3, iphone4);
int[] totalSales2 = totalSale(ipod, ipod2, iphone3, iphone4);或者使用相同的方法创建一个仅传递一个参数的数组:
int[][] categories = {mac, iphone, ipad, ipod, ipod2, ipod3, iphone100500};
int[] totalSales2 = totalSale(categories);如果您只想使用第二种方法,那么您可以将该方法定义为:
public static int[] totalSale(int[][] categories)https://stackoverflow.com/questions/39933866
复制相似问题