import java.util.*; class LoopDemo { static double sum_v1( List data ) { if (data.isEmpty()) { return 0.0; } else { return data.get(0) + sum_v1(data.subList(1,data.size())); } } static double sum_v2( List data ) { double sumSoFar = 0.0; while (!data.isEmpty()) { sumSoFar = sumSoFar + data.get(0); data = data.subList(1,data.size()); } return sumSoFar; } static double min_v2( List data ) { double minSoFar = data.get(0); while (!data.isEmpty()) { minSoFar = Math.min( minSoFar, data.get(0) ); data = data.subList(1,data.size()); } return minSoFar; } /* Return a new list, like `data` but with all elements reversed. */ List reverse_v2( List data ) { List reversalSoFar = new ArrayList(); while (!data.isEmpty()) { reversalSoFar.add(0, data.get(0)); data = data.subList(1,data.size()); } return reversalSoFar; } static List numsDown( int n ) { if (n==0) { return new ArrayList(); } else { /* return numsDown(n-1).add(0, (double)n);*/ List restNumsDown = numsDown(n-1); restNumsDown.add(0, (double)n); // `add` is a void method, so I can't combine with the preceding or following line. return restNumsDown; } } public static void main( String[] args ) { System.out.println( "Expect: 0. Got: " + sum_v1( new ArrayList() )); System.out.println( "Expect: 12. Got: " + sum_v1(Arrays.asList( 5.0, 2.0, 4.0, 1.0 )) ); System.out.println( "Expect: 0. Got: " + sum_v2( new ArrayList() )); System.out.println( "Expect: 12. Got: " + sum_v2(Arrays.asList( 5.0, 2.0, 4.0, 1.0 )) ); } } /* ; To sort in Java: class Asteroid implements Comparable { double x,y; int compareTo( /* Asteroid this, */ /* Asteroid that ) { return (this.sz - that.sz); } } */