1. import java.util.Iterator;
  2. import java.util.AbstractList;
  3. import java.util.NoSuchElementException;
  4.  
  5. class Range extends AbstractList<Integer> {
  6.         int start;
  7.         Integer end;
  8.        
  9.         public Range()          { this(0); }
  10.         public Range(int start) { this(start, null); }
  11.         public Range(int start, Integer end) {
  12.                 this.start = start;
  13.                 this.end   = end;
  14.         }
  15.        
  16.         public Integer get(int i) {
  17.                 if (end != null && start + i >= end)
  18.                         throw new IndexOutOfBoundsException("Range "+this+" contains just "+(end-start)+" values, not "+(i+1));
  19.                 return start + i;
  20.         }
  21.        
  22.         public int size() {
  23.                 if (end == null)
  24.                         return Integer.MAX_VALUE; //no Integer.Infinity available
  25.                 return end - start;
  26.         }
  27.        
  28.         @Override
  29.         public String toString() {
  30.                 if (end == null)
  31.                         return "["+start+",∞)";
  32.                 return "["+start+","+end+")";
  33.         }
  34.        
  35.         public static void main(String[] args) {
  36.                 //test finite range
  37.                 for (int r1 : new Range(0, 25))
  38.                         System.out.println(r1 * r1);
  39.                 System.out.println();
  40.                
  41.                 //test infinite range
  42.                 for (int r2 : new Range(100)) {
  43.                         System.out.println(r2 * r2);
  44.                         if (r2 == 150) break; //we don’t want this to really run forever, no?
  45.                 }
  46.                 System.out.println();
  47.                
  48.                 //test finite range’s exception
  49.                 new Range(0, 4).get(5);
  50.         }
  51. }

Posted by flying sheep at 20 Jan 2013, 21:10:51 Europe/Berlin
Language: java