有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

声明字符串后,java在条件语句中设置int值

我有一个字符串(breakmsg),我希望每个if语句都使用相同的字符串(breakmsg),其中的整数value需要根据if语句中声明的内容进行更改。在声明了breakmsg字符串之后,如何更改value变量的值?以前的尝试在代码中被注释

这是我目前的代码:

private int value;

    public void setValue(int v){
        value = v;
    }

    @EventHandler
    public void onBlockBreak(BlockBreakEvent e) {
        Block b = e.getBlock();
        Player p = e.getPlayer();

        //int value = 0;
        String breakmsg = ChatColor.GREEN + "You gained " + ChatColor.GOLD + value + ChatColor.GREEN + " points for collecting " + ChatColor.AQUA + b.getType() + ChatColor.GREEN + ".";

        @SuppressWarnings("deprecation")
        int itemID = p.getItemInHand().getTypeId();

        if (b.getType() == Material.DIAMOND_ORE) {
            if (itemID == 257 || itemID == 278) {
                //value = 5;
                setValue(5);
                int points = getConfig().getInt("players." + p.getUniqueId() + ".points");
                getConfig().set("players." + p.getUniqueId() + ".points", points + value);
                saveConfig();
                startScoreboard();
                e.getPlayer().sendMessage(breakmsg);
            }
        }

        if (b.getType() == Material.GOLD_ORE) {
            if (itemID == 257 || itemID == 285 || itemID == 278) {
                //value = 3;
                setValue(3);
                int points = getConfig().getInt("players." + p.getUniqueId() + ".points");
                getConfig().set("players." + p.getUniqueId() + ".points", points + value);
                saveConfig();
                startScoreboard();
                e.getPlayer().sendMessage(breakmsg);
            }
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    你可以把这个逻辑封装在一个私有函数中

    private String generateBreakMsgFrom(Block block, int value) {
        return ...
    }
    

    然后在if语句中,而不是设置值,您可以执行以下操作:

    breakmsg = generateBreakMsgFrom(b, 5);
    

    请注意,您可能也应该简单地在if语句之后设置消息,但仍然希望将消息生成逻辑提取到私有函数中

    我真的建议你读Clean Code。你的函数很长,它做了很多事情,它有很多神奇的数字和相当多的代码重复

    编辑:因为你在函数中声明了int value,所以我没有意识到它是一个实例变量

    private String generateBreakMsgForBlock(Block block) {
        return ... //you can use value from here once properly set
    }