Hi, I am making a calculator plugin. I know it's been done a million times but I am doing it as a practice. I made it so that you can add up to four integers. I wasn't sure what would happen if I put in less then four args, so I put some line saying that if that arg isn't put into the command, then set it to 0 so it doesn't affect the sum. It doesn't work though.... Code: Code: package me.Zach_1919.Calc; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; public class Calc extends JavaPlugin implements Listener { public void onEnable() { getServer().getPluginManager().registerEvents(this,this); } public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if(commandLabel.equalsIgnoreCase("add")) { if(args[2].equals(null)) { args[2].replace(null, "0"); } else if(args[3].equals(null)) { args[3].replace(null, "0"); } int add1 = Integer.parseInt(args[0]); int add2 = Integer.parseInt(args[1]); int add3 = Integer.parseInt(args[2]); int add4 = Integer.parseInt(args[3]); String sum = String.valueOf(add1+add2+add3+add4); sender.sendMessage(ChatColor.GOLD + "Answer = " + sum); } return false; } }
If the user specifies less than 4 arguments, the args[3], args[2], etc. will not be null, they will just not be in the array, so there will only be args[0] and args[1] for example. A much easier way to do this would be to loop through the arguments and add it to an integer. For example: Code:java int i = 0;for(String s : args){ i += Integer.parseInt(s);} Which will add all of the arguments to one integer which you can then give to the user.
daviga404 You'd want to surround that with a try-catch block also in case the argument they entered isn't a integer.
macguy8 I usually make a method that checks if it is a number: Code:java public boolean isNumber(String args) { boolean parsable=true; try { Integer.parseInt(args); } catch(NumberFormatException e) { parsable=false; } return parsable; } So if you can parse it and it is a number it will return true, else if it contains characters and is not parsable it will return false.
marwzoor True, but in the shown code, it'd be easier to just use a try-catch instead of adding another method to the OP's plugin
Code:java package me.Zach_1919.Calc; import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.event.Listener;import org.bukkit.plugin.java.JavaPlugin; public class Calc extends JavaPlugin implements Listener{ public void onEnable() { getServer().getPluginManager().registerEvents(this,this); } public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if(commandLabel.equalsIgnoreCase("add")) { if(args[2].equals(null)) { args[2].replace(null, "0"); } else if(args[3].equals(null)) { args[3].replace(null, "0"); } int add1 = Integer.parseInt(args[0]); int add2 = Integer.parseInt(args[1]); int add3 = Integer.parseInt(args[2]); int add4 = Integer.parseInt(args[3]); int sum = add1+add2+add3+add4; sender.sendMessage(ChatColor.GOLD + "Answer = " + sum); } return false; }} Try that instead!
marwzoor You don't need a variable for it Code:java public void isNumber(String s) { try { Integer.parseInt(s); return true; } catch(NumberFormatException nfe) {} return false;}
marwzoor I tried that and it didn't work so I just made it into a two variable adder and did the same thing with subtraction, multiplication, and division. Thanks though