【问题标题】:How do you create a calculator in bukkit?如何在 bukkit 中创建计算器?
【发布时间】:2014-07-04 09:42:56
【问题描述】:

我只是在学习 bukkit,我想像使用所有新的编程语言(我知道基本的 Java)一样制作一个计算器,但我似乎无法找到一种方法来添加某人输入的 args 而我找不到bukkit 的教程。任何人都可以帮我解析这些数字,因此如果您尝试添加不是双精度的东西,它会给出不同的错误消息。我尝试添加一个 switch 语句来执行此操作,但没有奏效。

这是我目前得到的......

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
    @SuppressWarnings("unused")
    Player player = (Player) sender;
    if(commandLabel.equalsIgnoreCase("calc")){
        if(args.length == 1){
            String n1 = args[0];
            if (true){
                if (args[0].equalsIgnoreCase("+") || args[0].equalsIgnoreCase("-")){
                    String n2 = args[1];
                    if (args[0].equalsIgnoreCase("+")){
                        double answer = Double.parseDouble(n1) + Double.parseDouble(n2);
                        sender.sendMessage("The answer is " + answer);
                    }

                    }else{
                        sender.sendMessage("Please use + or -");
                }
            }
        }else{
            sender.sendMessage(ChatColor.RED + "Incorrect Syntax");
        }
    }
    return false;
}

}

【问题讨论】:

  • 这读起来真的很混乱。另外,为什么会有一个 if(true),你可能可以摆脱它。您遇到什么错误?
  • if(true) 在那里,因为我打算稍后再放一些东西。当我尝试进行加法运算(我还没有进行减法运算)时,我收到了“语法错误”消息
  • 请发布您遇到的确切错误(复制并粘贴)
  • 其实我现在看到一个问题... n1 = args[0] 将是一个数字(最好),2 行你有 if(args[0].equalsIgnoreCase(+) 或 (- ). 你是否一直使用正确的 args[] 索引?哦,另一个。你正在比较 args.length == 1。这意味着唯一的索引是 args[0],你稍后再尝试阅读args[1],这将引发 ArrayIndexOutOfBoundsException,因为这需要 args.length 为 2

标签: java calculator bukkit


【解决方案1】:

你可以这样做:

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
  if(cmd.getName().equalsIgnoreCase("add")){//if the comand is /add
  if(args.length == 2){// if there are two arguments
     try{
       long n1 = Long.parseLong(args[0]);//get the first number
       long n2 = Long.parseLong(args[1]);//get the second number
       long result = n1 + n2;//add the two numbers together
       sender.sendMessage(n1 + " + " + n2 + " equals " + result);//tell the sender the result

     }
     catch(Exception e){
       //the user did not enter numbers
     }
   }
   else{
     sender.sendMessage("usage: /add num1 num2");
   }
}
return true;
}
return false;
}

然后你可以做/add <number 1> <number 2>,它会为你把这些数字加在一起

【讨论】:

    【解决方案2】:

    我编辑了你的代码,现在它可以工作了!

    public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("calc")) { //if the command is /calc
            if (args.length == 3) { // if the command structure is something like this /calc <number> <operator> <number>
                if (args[1].equalsIgnoreCase("+")) { // if the operator is +
                    double number1 = 0;
                    double number2 = 0;
                    double result = 0;
                    try { // see if the first and second numbers are a double
                        number1 = Double.parseDouble(args[0]);
                        number2 = Double.parseDouble(args[2]);
                    } catch (Exception e) { // if the two arguments aren't numbers
                        s.sendMessage(ChatColor.RED + "The argument " + ChatColor.DARK_RED + args[0] + ChatColor.RED
                                + " or the argument " + ChatColor.DARK_RED + args[2] + ChatColor.RED
                                + " is not a number !");
                        return false; // the code stops here
                    }
                    result = number1 + number2; // doing the adition
                    s.sendMessage(ChatColor.GREEN + "" + number1 + " + " + number2 + " = " + result); // send message to the player with the resut
                } else if (args[1].equalsIgnoreCase("*")) { //same as adition
                    double number1 = 0;
                    double number2 = 0;
                    double result = 0;
                    try {
                        number1 = Double.parseDouble(args[0]);
                        number2 = Double.parseDouble(args[2]);
                    } catch (Exception e) {
                        s.sendMessage(ChatColor.RED + "The argument " + ChatColor.DARK_RED + args[0] + ChatColor.RED
                                + " or the argument " + ChatColor.DARK_RED + args[2] + ChatColor.RED
                                + " is not a number !");
                        return false;
                    }
                    result = number1 * number2;
                    s.sendMessage(ChatColor.GREEN + "" + number1 + " * " + number2 + " = " + result);
                } else if (args[1].equalsIgnoreCase("/") || args[1].equalsIgnoreCase(":")) { //same as adition
                    double number1 = 0;
                    double number2 = 0;
                    double result = 0;
                    try {
                        number1 = Double.parseDouble(args[0]);
                        number2 = Double.parseDouble(args[2]);
                    } catch (Exception e) {
                        s.sendMessage(ChatColor.RED + "The argument " + ChatColor.DARK_RED + args[0] + ChatColor.RED
                                + " or the argument " + ChatColor.DARK_RED + args[2] + ChatColor.RED
                                + " is not a number !");
                        return false;
                    }
                    result = number1 / number2;
                    s.sendMessage(ChatColor.GREEN + "" + number1 + args[1] + number2 + " = " + result);
                } else if (args[1].equalsIgnoreCase("-")) { //same as adition
                    double number1 = 0;
                    double number2 = 0;
                    double result = 0;
                    try {
                        number1 = Double.parseDouble(args[0]);
                        number2 = Double.parseDouble(args[2]);
                    } catch (Exception e) {
                        s.sendMessage(ChatColor.RED + "The argument " + ChatColor.DARK_RED + args[0] + ChatColor.RED
                                + " or the argument " + ChatColor.DARK_RED + args[2] + ChatColor.RED
                                + " is not a number !");
                        return false;
                    }
                    result = number1 - number2;
                    s.sendMessage(ChatColor.GREEN + "" + number1 + " - " + number2 + " = " + result);
                } else {
                    s.sendMessage(ChatColor.RED + "Operator not recognized !");
                    s.sendMessage(ChatColor.RED + "Please use " + ChatColor.WHITE + "/calc number + number"
                            + ChatColor.RED + " OR " + ChatColor.WHITE + "/calc number - number" + ChatColor.RED
                            + " OR " + ChatColor.WHITE + "/calc number * number" + ChatColor.RED + " OR "
                            + ChatColor.WHITE + "/calc number : number" + ChatColor.WHITE + " to get a result !");
                }
            } else {
                s.sendMessage(ChatColor.RED + "Usage - /calc number operator number ");
            }
        }
        return false;
    }
    

    【讨论】:

    • 记录您所做的更改会得到更好的答案。
    • sponibus,代码现在已正确记录。感谢您的评论!
    • @L3n 好吧,他确实更新了他的答案,他甚至在上面这么说。都在修订历史中:stackoverflow.com/posts/32595604/revisions
    • @spinibus 但我的意思也是在更改之前。
    • @L3n 在没有解释的情况下转储一个代码块(尤其是大的)对读者没有多大帮助。以摘要或代码 cmets 的形式记录代码的作用,使答案更具可读性和更易于理解。 “这里,我刚刚修复了你的代码”没有什么可学的。
    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多