簡體   English   中英

循環添加數組中的元素

[英]Adding elements in an array in a loop

我只是一個初學者,所以我知道數據結構和代碼邏輯根本不是很好。

所以這是項目的一部分,但是我很難格式化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;
}

更改

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和要打印出的數組中的元素。 變化的內容可以用變量( itotalSale[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);

在這里,我可以看到您假設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循環的控制台,因為沒有理由要使用它。

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)

我想您的要求是如下匯總所有數組數據並將結果存儲到數組中嗎?

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);
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM