0

Что означает cannot be resolved to a variable? В условии находится действие, создающее переменную Double xco,которая равняется разности координат игроков по "x". В другом условии я вызываю эту переменную: "If_(xco<10){...}" На этом этапе выдаётся ошибка

@EventHandler
public <ChatMessage> void onPlayerChat(AsyncPlayerChatEvent z) { 
Player p=z.getPlayer();
Location I=p.getLocation();
String a=z.getMessage();


if (a.equals("word")) { 

    for (Player ps : Bukkit.getOnlinePlayers()) { 
        Location i = ps.getLocation();
        if (I.getX()<0 && i.getX()<0){ 
            double xco = I.getX() - i.getX();} 
            else if (I.getX()>0 && i.getX()>0 ) { 
                double xco = I.getX() - i.getX();} 

        if (I.getY()<0 && i.getY()<0) { 
            double yco = I.getY() - i.getY();} 
            else if (I.getY()>0 && i.getY()>0 ) { 
                double yco = I.getY() - i.getY();} 
        if (I.getZ()<0 && i.getZ()<0) { 
            double zco = I.getZ() - i.getZ();} 
            else if (I.getZ()>0 && i.getZ()>0 ) { 
                double zco = I.getZ() - i.getZ();} 



        if (xco<10) { 
            ps.playSound(ps.getLocation(), Sound.BLOCK_ANVIL_DESTROY, 1, 5); 
            ps.sendMessage("Test");}

1 Answers1

0

Переменные нужно создавать в начале класса/метода, где они используются. Во-первых, они тогда доступны во всем классе/методе, во-вторых это облегчает чтение и понимание кода:

public <ChatMessage> void onPlayerChat(AsyncPlayerChatEvent z) { 
Player p = z.getPlayer();
Location I = p.getLocation();
String a = z.getMessage();
double xco = 0; // <- вот здесь
double yco = 0;
double zco = 0;

В вашем коде переменная xco может вообще не создасться, что приведет к падению программы в процессе выполнения.

  • Если так перезаписать,то возникают ошибки Duplicate local variable в условиях,где им были заданы значения – Antony Antony Apr 28 '19 at 11:33
  • Потому что в дальнейшем нужно писать просто xco, а не double xco. – Эникейщик Apr 28 '19 at 11:34
  • Откройте учебник и почитайте про область видимости переменных. 2. Что произойдет, если I.getX() больше 0, а i.getX() меньше 0? 3. Приучайтесь давать переменным понятные названия. Чем отличается I от i? I вообще рекомендуется в качестве имени чего бы то ни было не использовать. Разницу между I и l видите? А она есть.
  • – Эникейщик Apr 28 '19 at 11:40
  • Спасибо,ознакомлюсь – Antony Antony Apr 28 '19 at 11:42