JRJC - How To Make Methods

Sometimes when you do the same task over and over, you need to create your own method (or function) to centralize the task. Take a look at this program:

public class Add
{

    // get numbers from the command line, right justify each,
    // show the sum and the average
    public static void main( String args[] )
    {
        int sum = 0 ;
        int i ;
        for ( i = 0 ; i < args.length ; i++ )
        {
            String s = args[ i ];
            sum += Integer.parseInt( s );
            while( s.length() < 20 )
            {
                s = " " + s ;
            }
            System.out.println( s );
        }
        System.out.println("--------------------");
        String sumStr = " " + sum ;
        while( sumStr.length() < 15 )
        {
            sumStr = " " + sumStr ;
        }
        System.out.println( "total" + sumStr );
        String average = " " + ( sum / args.length ) ;
        while( average.length() < 13 )
        {
            average = " " + average ;
        }
        System.out.println( "average" + average );
    }

}

Look at the while loops. The same task is essentially done three times! In all cases, the while loop right justifies a string. Here is the same program with a custom rightJustify() method.

public class Add
{

    private static String rightJustify( String s , int newLength )
    {
        while( s.length() < newLength )
        {
            s = " " + s ;
        }
        return s ;
    }

    // get numbers from the command line, right justify each,
    // show the sum and the average
    public static void main( String args[] )
    {
        int sum = 0 ;
        int i ;
        for ( i = 0 ; i < args.length ; i++ )
        {
            String s = args[ i ];
            sum += Integer.parseInt( s );
            System.out.println( rightJustify( s , 20 ) );
        }
        System.out.println("--------------------");
        String sumStr = " " + sum ;
        System.out.println( "total" + rightJustify( sumStr , 15 ) );
        String average = " " + ( sum / args.length ) ;
        System.out.println( "average" + rightJustify( average , 13 ) );
    }

}

My main() method is much simpler now.

The rightJustify() method takes two parameters. A string and an int. The method returns a string.

By looking at my main() method now, I see three cases where I get a number, format it and print it. I'm going to introduce one more method:


public class Add
{

    private static String rightJustify( String s , int newLength )
    {
        while( s.length() < newLength )
        {
            s = " " + s ;
        }
        return s ;
    }

    private static void justifyAndPrint( String leadingText , int number , int totalLength )
    {
        // convert the number to text
        String s = "" + number ;
        System.out.println( leadingText + rightJustify( s , totalLength - leadingText.length() ) );
    }

    // get numbers from the command line, right justify each,
    // show the sum and the average
    public static void main( String args[] )
    {
        int sum = 0 ;
        int i ;
        for ( i = 0 ; i < args.length ; i++ )
        {
            String s = args[ i ];
            int num = Integer.parseInt( s );
            sum += num ;
            justifyAndPrint( "" , num , 20 );
        }
        System.out.println("--------------------");
        justifyAndPrint( "total" , sum , 20 );
        justifyAndPrint( "average" , sum / args.length , 20 );
    }

}

I think main() is even simpler now.

One more thing! Look at how "20" crops up over and over ...


public class Add
{

    private static String rightJustify( String s , int newLength )
    {
        while( s.length() < newLength )
        {
            s = " " + s ;
        }
        return s ;
    }

    private static void justifyAndPrint( String leadingText , int number )
    {
        // convert the number to text
        String s = "" + number ;
        System.out.println( leadingText + rightJustify( s , 20 - leadingText.length() ) );
    }

    // get numbers from the command line, right justify each,
    // show the sum and the average
    public static void main( String args[] )
    {
        int sum = 0 ;
        int i ;
        for ( i = 0 ; i < args.length ; i++ )
        {
            String s = args[ i ];
            int num = Integer.parseInt( s );
            sum += num ;
            justifyAndPrint( "" , num );
        }
        System.out.println("--------------------");
        justifyAndPrint( "total" , sum );
        justifyAndPrint( "average" , sum / args.length );
    }

}

Looking good!

See page 44 in Just Java 1.2, or page 95 in Just Java 2 (sixth edition) for more information on methods.






For more information, please visit my java site.

And for a change of pace, you can visit my permaculture site.






© 2000 paul wheaton