DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Range() In Java

04.24.2007
| 3895 views |
  • submit to reddit
        A range is a very handy feature of programing languages like Python.

    * range( 10 ) -> 0 1 2 3 4 5 6 7 8 9
    * range( 5, 10 ) -> 5 6 7 8 9
    * range( 0, 10, 3 ) -> 0 3 6 9
    * range( '0', '9' ) -> 012345678

With an extended for loop it is possible to use such a feature too:

/*
 * This project is made available under the terms of the BSD license, more information can be found at
 * http://www.opensource.org/licenses/bsd-license.html
 *
 * Copyright (c) 2007. Christian Ullenboom (http://www.tutego.com/) and contributors. All rights reserved.
 */
package com.tutego;

import java.util.Iterator;

/**
 * Class that generates immutable sequences (ranges) as Iterable<Integer>
 * objects. A range represents a start (0 if not given), an stop (mandatory) and
 * an optional step (1 by default). The start value is included in the range,
 * the stop value is exclusive. Every range is handled by an Iterable<Integer>
 * which can by used in an extended for loop.
 * 
 * <pre>
 * for ( int i : range( 0, 10, 3 ) )
 *   System.out.print( i + " " ); // 0 3 6 9
 * </pre>
 * 
 * @author Christian Ullenboom (tutego)
 * @version 1.0
 */
public class Range
{
  public static Iterable<Integer> range( final int start, final int stop, final int step )
  {
    if ( step <= 0 )
      throw new IllegalArgumentException( "step > 0 isrequired!" );

    return new Iterable<Integer>()
    {
      public Iterator<Integer> iterator()
      {
        return new Iterator<Integer>()
        {
          private int counter = start;

          public boolean hasNext()
          {
            return counter < stop;
          }

          public Integer next()
          {
            try
            {
              return counter;
            }
            finally { counter += step; }
          }

          public void remove() { }
        };
      }
    };
  }

  public static Iterable<Integer> range( final int start, final int stop )
  {
    return range( start, stop, 1 );
  }

  public static Iterable<Integer> range( final int stop )
  {
    return range( 0, stop, 1 );
  }
}

This is an example:

package com.tutego;

import static com.tutego.Range.range;

public class RangeDemo
{
  public static void main( String[] args )
  {
    for ( int i : range( 10 ) )
      System.out.print( i + " " );

    System.out.println();

    for ( int i : range( 5, 10 ) )
      System.out.print( i + " " );

    System.out.println();

    for ( int i : range( 0, 10, 3 ) )
      System.out.print( i + " " );

    System.out.println();

    for ( int i : range( '0', '9' ) )
      System.out.print( (char) i  );

    System.out.println();

    String[] a = { "Mary", "had", "a", "little", "lamb" };
    for ( int i : range(a.length ) )
      System.out.printf( "%d %s%n", i, a[i] );
  }
}