【问题标题】:How to fix brackets in a Java program? [closed]如何修复Java程序中的括号? [关闭]
【发布时间】:2016-10-25 21:56:31
【问题描述】:

我的括号有问题,我做错了什么吗?我在某处添加一个括号试图修复错误的所有内容,它要么说我需要一个elseStatment,要么我需要添加另一个括号,当我添加另一个括号时,我得到一个很大的错误,说“无法访问代码”。

如果有人能解释为什么会发生这种情况并帮助我解决它,我将不胜感激。为了向您显示错误发生的位置,我将添加 3 个感叹号。

package me.bukkit.Ragnarok;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import net.minecraft.server.v1_10_R1.PlayerSelector;

public class StandardFlight extends JavaPlugin {

    @Override
    public void onEnable() {
        getLogger().info("StandardFlight: Flight plugin has been loaded successfully!");

    }

    @Override
    public void onDisable() { 

    } **!!!**

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if (cmd.getName().equalsIgnoreCase("flight") && sender instanceof Player) {
            Player player = (Player) sender;
            if(player.hasPermission("uheal.heal.self")) {

            if (args.length == 0) {
            player.sendMessage(ChatColor.GOLD + "Ops, try " + ChatColor.RED + "/flight on " + ChatColor.GOLD + "or " + ChatColor.RED + "/flight off");
            return true;

            if (args.length == 1) {
            } else  if (args[0].equals("on")) {
                player.setAllowFlight(true);
                player.setFlying(true);
                player.sendMessage(ChatColor.GOLD + "Setting Flight for player: " + ChatColor.RED + player.getName() + ChatColor.GOLD + ChatColor.BOLD + " On!");
                return true;

                if (args.length == 1) {
            } else if (args[0].equals("off")) {
                    player.setAllowFlight(false);
                    player.setFlying(false);
                    player.sendMessage(ChatColor.GOLD + "Setting Flight for player: " + ChatColor.RED + player.getName() + ChatColor.GOLD + ChatColor.BOLD + " Off!");  
                    return true;

            }
            return false;

        }
        {

    }

    }

} **!!!**

【问题讨论】:

  • 你应该清理你的缩进。你到处都是。一旦你的代码正确缩进,括号应该变得很明显。
  • 另外,你的 ifs 没有意义?
  • 它在底部的那个把你所有的东西都弄乱了 return false;}{}}} 也在顶部第一个 if 在 return true 之后没有右括号;这应该很明显,如果您使用的是 IDE 检查代码格式如果您使用的是 ide 来查看您遇到的问题,例如返回后的任何代码都无法访问

标签: java plugins minecraft bukkit


【解决方案1】:

这个:

if (args.length == 0) {
     player.sendMessage(ChatColor.GOLD + "Ops, try " + ChatColor.RED + "/flight on " + ChatColor.GOLD + "or " + ChatColor.RED + "/flight off");
     return true;

     if (args.length == 1) {

注意缩进。该代码块只有在args.length 为0 时才能执行,这意味着args.length == 1 可以NEVER 为真。并且由于您在那一秒之前无条件地return,因此您的“无法访问代码”。

所以.. 你可能错过了}

if (args.length == 0) {
    player.sendMessage(ChatColor.GOLD + "Ops, try " + ChatColor.RED + "/flight on " + ChatColor.GOLD + "or " + ChatColor.RED + "/flight off");
    return true;
} else if (args.length == 1) {
^^^^^^^^^^---NOTE THIS

如果您花时间正确格式化您的代码,这应该很明显。

【讨论】:

  • 还要注意,Unreachable Statement 被报告是因为代码返回,所以所有其他代码都没有执行,因此无法访问。
  • 下一个缺少的右括号是else if (args[0].equals("on")) {
  • 哦,我现在明白了,是的,这有帮助,但现在我得到了这个“无法访问的代码”部分。它接近尾声: } else if (args[0].equals("off")) {
【解决方案2】:

您有很多问题,但这是我想出的带有适当括号的内容,至少我认为它们是基于我假设您正在尝试做的事情:

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import net.minecraft.server.v1_10_R1.PlayerSelector;

public class StandardFlight extends JavaPlugin {

    @Override
    public void onEnable() {
        getLogger().info("StandardFlight: Flight plugin has been loaded successfully!");

    }

    @Override
    public void onDisable() { 

    } **!!!**

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if (cmd.getName().equalsIgnoreCase("flight") && sender instanceof Player) {
            Player player = (Player) sender;
            if(player.hasPermission("uheal.heal.self")) {

            if (args.length == 0) {
                player.sendMessage(ChatColor.GOLD + "Ops, try " + ChatColor.RED + "/flight on " + ChatColor.GOLD + "or " + ChatColor.RED + "/flight off");
                return true;
            }
            if (args.length == 1) {

            } else  if (args[0].equals("on")) {
                player.setAllowFlight(true);
                player.setFlying(true);
                player.sendMessage(ChatColor.GOLD + "Setting Flight for player: " + ChatColor.RED + player.getName() + ChatColor.GOLD + ChatColor.BOLD + " On!");
                return true;
                //This code is unreachable because you have a return statement above it. You need to move the code below it. 
                if (args.length == 1) {

                } else if (args[0].equals("off")) {
                    player.setAllowFlight(false);
                    player.setFlying(false);
                    player.sendMessage(ChatColor.GOLD + "Setting Flight for player: " + ChatColor.RED + player.getName() + ChatColor.GOLD + ChatColor.BOLD + " Off!");  
                    return true;

            }
            return false;

        }
    }
}

}

} **!!!**

【讨论】:

  • 它修复了大多数括号问题,但我没有一个部分显示“无法访问的代码”。就在这里: } else if (args[0].equals("off")) { player.setAllowFlight(false); player.setFlying(false); player.sendMessage(ChatColor.GOLD + "为玩家设置飞行:" + ChatColor.RED + player.getName() + ChatColor.GOLD + ChatColor.BOLD + "Off!");返回真;
  • @Ragnarok 我用评论更新了代码。你有一个 return 语句,然后在它下面编写代码。它下面的所有代码都无法访问,因为您将其返回。移动该代码或返回语句。
  • 好吧,好吧,现在它仍然有该死的无法访问代码的东西。我非常讨厌这个错误。你有什么想法我应该为此做些什么吗? @BlackHatSamurai
  • 我认为你应该格式化你的代码,正确排列你的括号,然后遍历代码。您有许多可能导致该问题的返回语句。你需要把所有东西都排好,这样你才能看到你在做什么。
  • 好的,会的。抱歉,我是一个非常新的初学者,我正在努力避免出现任何错误,以便我可以导出和测试它...
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多