Difference between revisions of "Using an Accumulator"

From Progzoo
Jump to: navigation, search
(Using an accumulator to concatenate)
(Using an accumulator to find the maximum)
 
(2 intermediate revisions by 2 users not shown)
Line 93: Line 93:
 
At each stage the accumulator stays the same or gets bigger (set to the current value).
 
At each stage the accumulator stays the same or gets bigger (set to the current value).
 
  max(max(max(max(0,2),7),1),1)
 
  max(max(max(max(0,2),7),1),1)
 +
<hint tease='What about smaller numbers?'>
 +
If all of the numbers in the list were negative, for example <code>{-2,-7,-1,-1}</code> then this program
 +
would print 0 instead of the correct answer -1. You can fix that by starting the accumulator at the smallest possible
 +
integer:
 +
int acc = Integer.MIN_VALUE;
 +
for (int i : new int[]{2,7,1,1})
 +
{
 +
  acc = Math.max(acc,i);
 +
}
 +
System.out.println(acc);
 +
</hint>
 
<prog lang="java">
 
<prog lang="java">
 
int acc = 0;
 
int acc = 0;
Line 112: Line 123:
 
WARNING - Using an accumulator like this can use a great deal of memory. You will find using a [[StringBuilder]] is more efficient.
 
WARNING - Using an accumulator like this can use a great deal of memory. You will find using a [[StringBuilder]] is more efficient.
 
  StringBuilder acc = new StringBuilder();
 
  StringBuilder acc = new StringBuilder();
  for (String s : new String[]{"one","two"})
+
  for (String s:new String[]{"one","two"})
 
  {
 
  {
 
   acc.append(s);
 
   acc.append(s);

Latest revision as of 18:35, 20 June 2009

When using an accumulating variable there are three stages:

Initialise
We declare our accumulator and set it to an initial values.
Update
Inside the loop we update the accumulator - we take into account the current data item.
Output/use
After the loop our accumulator contains the required value. We use it or output it.

Using an accumulator to add

Print the total of all of the numbers

  • We initialise to 0.
  • We add to the accumulator.
  • The value printed is the sum 0+2+7+1+1.


[Font] [Default] [Show] [Resize] [History] [Profile]

Using an accumulator to count

Print the number of items in the list.

  • We initialise to 0.
  • We increment the accumulator.
  • The value printed is the count: 0+1+1+1+1.


[Font] [Default] [Show] [Resize] [History] [Profile]

Using an accumulator to count on a condition

Count the number of 1s in the list

  • We initialise to 0.
  • We increment the accumulator only if the current value equals 1.


[Font] [Default] [Show] [Resize] [History] [Profile]

Using an accumulator to multiply

Print the product of the numbers.

  • We initialise to 1. (If you initialise to 0 then the result will always be 0.)
  • We multiply the accumulator.
  • The value printed is the product: 1*2*7*1*1


[Font] [Default] [Show] [Resize] [History] [Profile]

Using an accumulator to find the maximum

Print the largest number in the list.

  • We initialise to 0.
  • We take the max.
  • The value printed is the largest:

At each stage the accumulator stays the same or gets bigger (set to the current value).

max(max(max(max(0,2),7),1),1)


[Font] [Default] [Show] [Resize] [History] [Profile]

Using an accumulator to concatenate

Concatenate all items in the list

Notice that we are using a list of strings this time.

  • We initialise to the empty string "".
  • We concatenate the next value (stick at the end).

WARNING - Using an accumulator like this can use a great deal of memory. You will find using a StringBuilder is more efficient.

StringBuilder acc = new StringBuilder();
for (String s:new String[]{"one","two"})
{
  acc.append(s);
}
System.out.println(acc);


[Font] [Default] [Show] [Resize] [History] [Profile]

Using two accumulators to find the mean

Print the mean of all items in the list.

  • We initialise both sum and count to 0.
  • We add to the sum and increment the count.
  • We divide the sum by the count to get the average.


[Font] [Default] [Show] [Resize] [History] [Profile]