2016-03-04 121 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分钟后看不到它。非常感谢您的参与。 –