Java Lesson 17: ArgumentHelper with state
From Erlands Wiki
The main class has now been changed so it looks like this:
public class MyClass { public static void main(String[] args) { ArgumentHelper helper = new ArgumentHelper(args); int i=0; Argument argument = helper.getArgument(i++); while(argument!=null) { printStuff(argument); argument = helper.getArgument(i++); } } public static void printStuff(Argument data) { System.out.println("You specified: "+data.getValue()); } }
The Argument class is the same as before:
public abstract class Argument { public abstract String getValue(); }
The IntArgument class is the same as before:
public class IntArgument extends Argument { private int intArgument; public IntArgument(int intArgument) { this.intArgument = intArgument; } public int getInt() { return intArgument; } public String getValue() { return String.valueOf(intArgument); } }
The StringArgument class is the same as before:
public class StringArgument extends Argument { private String strArgument; public void setString(String arg) { this.strArgument = arg; } public String getString() { return strArgument; } public String getValue() { return String.valueOf(strArgument); } }
The ArgumentHelper class looks as follows:
public class ArgumentHelper { public static Argument getArgument(int argumentNumber, String[] args) { if(args.length>argumentNumber) { int argument = 0; try { argument = Integer.valueOf(args[argumentNumber]); // If we end up here it has successfully converted the parameter to an integer return new IntArgument(argument); } catch (NumberFormatException e) { // If we end up here the parameter could not be converted to an integer and StringArgument strArgument = new StringArgument(); strArgument.setString(args[argumentNumber]); return strArgument; } }else { return null; } } }
Your job is to change the ArgumentHelper class so it works.
The program shall be possible to execute as:
java MyClass 5 Hello
And then give an output as:
You specified: 5 You specified: Hello
