2016-03-04 55 views
-2

我正在編寫一個計算區域經理(作爲學校項目)的銷售統計的小程序,用戶輸入銷售部門的數量,每個部門的每季度的銷售數量。嵌套For循環給出邏輯錯誤

程序輸出:

銷售(正確)

從上一季度每格(正確)

季度訂單總數(正確)

師總數(的銷量變化正確)

劃分平均值(正確)

每季度頂級部門(不正確,邏輯錯誤)

使用下面的銷售數字,我應該得到每季度頂級部門3,5,2,2的結果。使用其他數據給出相同的邏輯錯誤(不同的結果,仍然是錯誤的)。

唯一可以計算的是12行代碼段。 其餘的代碼已經過測試,並且正常工作,我的錯誤必須在這裏,在這個片段中。

int[] topDivQuarter = new int[4]; 

    for(int quarter=0; quarter < 4; quarter++){ 
     topDivQuarter[quarter] = 0; //Initialize at zero so division one is default top. 
     for(int div=1; div < divNumb ; div++){ 
      //remember division first here, unlike the rest of the nested for loops. 
      //Initialized to one because need to compare to previous division 
      if ((sales[div][quarter]) > (sales[div - 1][quarter])){ 
       topDivQuarter[quarter] = div; 
      } 
     } 
    } 

我諮詢了兩位朋友,我們都沒有找到錯誤。

完整的代碼在這裏http://paste.ofcode.org/JvpVKB7c2NZrct2CAxscyH

測試銷售我一直在使用,

部門5,

DIV 1季度的1:1

DIV 1季度2:2

div 1 quarter 3:3

d IV 1季度4:4

DIV 2季度1:5

...(12345678912345678912)

結果是4,4,3,3,應該是3,5,2,2作爲每季度的頂級部門。

請原諒格式化的輸出,我現在正在修復這個錯誤。

+1

您是否在IDE調試器中逐步瞭解了代碼?如果不是,那就是開始的地方。檢查每個步驟的變量,以瞭解它與您的期望偏離的位置。順便說一下,使用二維數組來表示這種類型的數據非常適合1960年代的Fortran。這是21世紀,你應該使用適當的類和數據結構。 –

+0

「使用二維數組來表示這種類型的數據是1960年代Fortran的」很棒的一個!嘗試提供[mcve] *此處*,而不是鏈接。 –

+0

@JimGarrison二維數組只是因爲它是一個學校項目,它不是我通常使用的東西。我更喜歡和班級一起工作。 我爬過調試器atm,但我沒有經驗使用它。只是意味着需要一些時間來弄清楚(我正在使用)。 –

回答

0

隨着

if ((sales[div][quarter]) > (sales[div - 1][quarter])) 

你只比較連續的兩個部門之間的銷售數字。您應該比較迄今爲止頂級部門與當前部門之間的銷售數字:

if ((sales[div][quarter]) > (sales[topDivQuarter[quarter]][quarter])) 
+0

釘着它,我知道這是我可以忽略的東西,但是我在盯着它40分鐘後看不到它。非常感謝您的參與。 –