passing command line argument in java


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 2 of 2

Thread: passing command line argument in java

  1. #1
    Join Date
    Oct 2005
    Posts
    3

    passing command line argument in java

    I was writting a calendar pogram that took user input from the command line. What I want to know is how can I write my program so that if the user doesn't enter the info. it will automatically assign a value to the variable in the array, eg:

    if they typed: java calendarmonth 10 2005

    they would get a printout for the calendar month of October 2005, but I want it so that if they typed

    java calendarmonth 10

    it would automatically assign they year to be the current year, and if they typed

    java calendarmonth

    it would auctomattically assign the current month and year to the program, heres the source code:

    import javax.swing.JOptionPane;
    import java.util.*;

    public class calendarmonth {
    /** Main method */
    public static void main(String argv[]) {



    String monthString = argv[0];
    int month = Integer.parseInt(monthString);
    String yearString = argv[1];
    int year = Integer.parseInt(yearString);
    printMonth(year, month);

    if (month > 12) {
    System.out.println("Invalid Number Please Try");
    //code to perform OK action
    }





    }



    /** Print the calendar for a month in a year */
    static void printMonth(int year, int month) {
    //Print the heading of the calendar
    printMonthTitle(year, month);

    //Print the headings of the calendar
    printMonthBody(year, month);
    }

    /** Print the month title, e.g., May, 1999 */
    static void printMonthTitle(int year, int month) {
    System.out.println(" " + getMonthName(month)
    + " " + year);
    System.out.println("------------------------------");
    System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
    }

    /** Get the English name for the month */
    static String getMonthName(int month) {
    String monthName = null;
    switch (month) {
    case 1: monthName = "January"; break;
    case 2: monthName = "February"; break;
    case 3: monthName = "March"; break;
    case 4: monthName = "April"; break;
    case 5: monthName = "May"; break;
    case 6: monthName = "June"; break;
    case 7: monthName = "July"; break;
    case 8: monthName = "August"; break;
    case 9: monthName = "September"; break;
    case 10: monthName = "October"; break;
    case 11: monthName = "November"; break;
    case 12: monthName = "December"; break;
    }

    return monthName;

    }

    /** Print month body*/
    static void printMonthBody(int year, int month){
    //Get start day of the week for the first date in the month
    int startDay = getStartDay(year, month);

    //Get number of days in the month
    int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);

    //Pad space before the first day of the month
    int i = 0;
    for (i = 0; i < startDay; i++)
    System.out.print(" ");

    for (i = 1; i <= numberOfDaysInMonth; i++) {
    if (i < 10)
    System.out.print(" " + i);
    else
    System.out.print(" " + i);

    if ((i + startDay) % 7 == 0)
    System.out.println();

    }

    System.out.println();
    }

    /** Get the start day of the first day in a month */
    static int getStartDay(int year, int month) {
    //Get total number of days since 1/1/1800
    int startDay1800 = 3;
    int totalNumberOfDays = getTotalNumberOfDays(year, month);

    //Return the start day
    return (totalNumberOfDays + startDay1800) % 7;

    }


    /** Get the total number of days since Jan 1, 1800 */

    static int getTotalNumberOfDays(int year, int month) {
    int total = 0;


    // Get the total days from 1800 to year - 1
    for (int i = 1800; i < year; i++)

    if (isLeapYear(i))
    total = total + 366;
    else
    total = total + 365;


    // Add days from Jan to the month prior to the calendar month

    for (int i = 1; i < month; i++)

    total = total + getNumberOfDaysInMonth(year, i);

    return total;

    }

    /** Get the number of days in a month */

    static int getNumberOfDaysInMonth(int year, int month) {

    if (month == 1 || month == 3 || month == 5 || month == 7 ||

    month == 8 || month == 10 || month == 12)

    return 31;



    if (month == 4 || month == 6 || month == 9 || month == 11)

    return 30;



    if (month == 2) return isLeapYear(year) ? 29 : 28;



    return 0; // If month is incorrect

    }

    thanks


    /** Determine if it is a leap year */
    static boolean isLeapYear(int year) {
    return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    }
    }

  2. #2
    Join Date
    Oct 2005
    Location
    New Jersey
    Posts
    255
    Your code seems to be okay. There are a few aspects which you need to look into
    1> Your code is presently not checking if arguments are being passed or not. It would be a good idea to do that.
    2> NumberFormatException should be handled in case the String entered for month / year is not an integer.

    You could check if the month and / or year should be set to some default value based on the argument length - argv.length in your code.

    Your main() method should be modified something like this:
    Code:
    	public static void main(String argv[]) {
    		int len = argv.length;
    
    		int month = 0;
    		int year  = 0;
    
    		Calendar cal = Calendar.getInstance();
    
    		if(len > 0) {
    			// Get month
    			String monthString = argv[0];
    			try {
    				month = Integer.parseInt(monthString);
    			} catch(NumberFormatException nfe) {
    				System.out.println("Invalid month input: " +monthString);
    				//code to fetch input again OR exit.
    			}
    			if (month > 12) {
    				System.out.println("Invalid Number Please Try");
    				//code to perform OK action
    			}
    
    			if(len > 1) {
    				// Get year
    				String yearString = argv[1];
    				try {
    					year = Integer.parseInt(yearString);
    				} catch(NumberFormatException nfe) {
    					System.out.println("Invalid year input: " +monthString);
    					//code to fetch input again OR exit.
    				}
    			} else {
    				// Set the year to current year if nothing is entered.
    				year = cal.get(Calendar.YEAR);
    			}
    		} else {
    			System.out.println("No arguments passed.");
    			month = cal.get(Calendar.MONTH) +1;	// Months are returned from 0-11
    			year = cal.get(Calendar.YEAR);
    		}
    
    		// Print the calendar.
    		printMonth(year, month);
    	}
    See if this helps!

    Another observation: Your calendar is printing correctly but the formatting on the console is a bit off. I guess you could sort that out later.
    Happiness is good health and a bad memory.

Similar Threads

  1. Replies: 2
    Last Post: 06-14-2006, 03:16 PM
  2. Java vs. .Net. A questionnaire
    By Basil in forum .NET
    Replies: 1
    Last Post: 05-13-2005, 06:46 AM
  3. learning c# very confusing.
    By Mike Tsakiris in forum .NET
    Replies: 11
    Last Post: 10-04-2002, 05:32 PM
  4. Replies: 0
    Last Post: 01-31-2002, 11:08 PM
  5. Re: VB vs. Visual Age for Java
    By JJ in forum Enterprise
    Replies: 1
    Last Post: 07-06-2000, 04:50 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center