我只是一个初学者,所以我知道数据结构和代码逻辑根本不是很好。
所以这是项目的一部分,但我在格式化for循环时遇到了困难。我很确定我必须为每个循环创建一些类型。我不知道该怎么做,所以我创建了一个非常简化和分解的版本(我知道大部分代码都在实践中,但我想要想象它。我需要帮助打印每个类别的总销售额现在,我只有四个值,但是如果我要达到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;
}
答案 0 :(得分:1)
更改
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语句。在处理涉及数组的循环语句时,请考虑数组的一般情况。由于您使用相同的行“类别总销售额”打印出阵列中的每个元素,因此您可以使用它来玩具并思考正在发生变化的内容和不发生变化的内容。
显然,唯一改变的是i
和正在打印的数组中的元素。变量(i
,totalSale[i]
)可以表示变化,而不变的变量可以用常数("Total sale for category"
,"$"
)表示。因此,在打印出数组元素时,只需要在for循环中使用一行来表示这一点。
编辑:在方法中处理接受可变数量的销售类别的问题的方法是改为使您的方法采用2D数组,其中行数是每个类别中的销售数量的类别数和列数。例如,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);
答案 1 :(得分:0)
在这里,我可以看到你假设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循环,因为它没有理由被使用。
答案 2 :(得分:0)
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)
答案 3 :(得分:0)
我认为你的要求是SUM所有数组数据,如下所示,并将结果存储到数组中?
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[] result equal to {macSUM, iphoneSUM, ipadSUM, ipodSUM}
因此,对于每个设备,我们可以使用两个循环,而另一个循环用于数组中的每个元素,代码如下所示
public static int totalSale(int[] devices){
int sum;
for (int i = 0; i < devices.length ; i++) {
sum += devices[i];
}
return totalSale;
}
public static void main(String[] arguments) {
int[] days = {1,2,3,4};
int[] mac = {200,9000,13000,900};
int[] iphone = {500,5000,200,0};
int[] ipad = {900,4300,0,800};
int[] ipod = {0,300,120,500};
numberOfDays(days);
int[]totalSales = new int[4];
for(int i = 0; i < 4; i++) {
totalSales[i] = totalSale(mac);
}
}