2015-10-16 2 views
-1

Im пытается создать класс с базовым объектом. Базовый объект будет использоваться для создания нескольких объектов и должен быть «сражаться» в другом классе на основе силы и бонусов.Ошибка Java Error unreachable

У меня есть эта ошибка при компиляции «Ошибка, недостижимая инструкция», и она указывает на строку 27, указывающую на возврат, может ли кто-нибудь помочь мне?

public class Superhero { 

    private String superheroName; 
    private int superheroStrength; 
    public int powerUp; 

    public Superhero (String superheroName, int superheroStrength, int powerUp){ 
    this.superheroName = superheroName; 
    this.superheroStrength = superheroStrength; 
    System.out.println("Superhero: " + superheroName); 
    System.out.println("Strength: " + (superheroStrength + powerUp)); 
    } 

    public Superhero (String superheroName, int powerUp){ 
    this.superheroName = superheroName; 
    superheroStrength = 10; 
    System.out.println("Strength: " + (superheroStrength+powerUp)); 
    } 

    public int getStrength(){ 
     return superheroStrength += powerUp; 
    } 

    public void powerUp (int powerUp){ 
     this.powerUp += powerUp; 
    } 

    public Superhero battle(Superhero1 opponent){ 
     if (this.getStrength()>opponent.getStrength()); 
     return this; 
     return opponent; 
    } 
    public String toString(){ 
    return this.superheroName; 
    } 
} 
+4

Удалить ';' в конце этой строки: if (this.getStrength()> enemy.getStrength()); ' –

+1

В качестве альтернативы замените вышеупомянутый'; 'на' {} 'и положите' return это; в блоке. Это сделает его более читаемым, решит проблему недостижимости и сделает его более очевидным, потому что сейчас он даже не отступается. – Arc676

+1

Это одна из причин, почему вы всегда должны использовать фигурные скобки для операторов 'if', даже если они содержат только один оператор. – JonK

ответ

1

экстренн ; вызвал все беспорядок

if (this.getStrength()>opponent.getStrength()); <-- 

, что точка с запятой завершает заявление там, и предполагая, что в качестве нового блока с указанием оттуда.

Поэтому код

public Superhero battle(Superhero1 opponent){ 
    if (this.getStrength()>opponent.getStrength()); 
    return this; 
    return opponent; 
} 

равна

public Superhero battle(Superhero1 opponent){ 
    if (this.getStrength()>opponent.getStrength()){ 
    } 
    return this; 
    return opponent; 
} 

Удалить этот дополнительный ; (надежду, что намеренно не напечатанный), коды будет хорошо тогда.

Как кто-то уже прокомментировал, это причина, всегда используйте фигурные скобки, чтобы избежать подобных ситуаций.