2016-02-15 3 views
0

У меня есть следующий код, который содержит ошибку во время выполнения. Код был предназначен для вывода: режимНужна помощь в поиске ошибки

Автомобиля: полет топлива: пропан Макс высоты: 10000

Автомобиля режим: обход топлива: угль Мощность: 5000

Я не мог найти его сам (как я я довольно новичок в кодировании) и хотел бы помочь, если это возможно.

Спасибо.

class Main { 

public static void main(String[] args) { 

    HotAirBalloon airbag = new HotAirBalloon(10000); 
    Locomotive loco = new Locomotive(5000); 

    System.out.println(airbag.toString()); 
    System.out.println(loco.toString()); 
} 
} 

class Vehicle { 

String mode, fuel; 

public String toString() { 
    return "Vehicle Mode:" + mode + " Fuel:" + fuel; 
} 
} 

class HotAirBalloon extends Vehicle { 

int maxAltitude; 

HotAirBalloon(int _alt) { 
    mode = "flight"; 
    fuel = "propane"; 
    maxAltitude = _alt; 
} 
public String toString() { 
    return toString() + " Max Altitude:" + maxAltitude; 
} 

} 

class Locomotive extends Vehicle { 

int horsePower; 
Locomotive(int _hp) { 
    mode = "traversal"; 
    fuel = "coal"; 
    horsePower = _hp; 

} 
public String toString() { 
    return toString() + " Horsepower:" + horsePower; 
} 

} 
+0

Каков ваш фактический результат и где происходит ошибка? –

+0

Вывод находится в основном методе, и ошибка возникает в строке 37 (извините, что я забыл строки сообщения) в строке, содержащей этот код (return toString() + "Max Altitude:" + maxAltitude;). Случается, что код продолжает повторяться в (ahmed.HotAirBalloon.toString (main.java:37)) и дает эту ошибку: Исключение в потоке «main» java.lang.StackOverflowError – xtremeslice

ответ

1

Потому что вы пытаетесь назвать супер классы версии текущего метода необходимо добавить super.toString()

//old 
return toString() + " Horsepower:" + horsePower; 
//new 
return super.toString() + " Horsepower:" + horsePower; 

Вы также должны сделать это с другими подклассами

Когда вы вызываете метод, он называется рекурсией, где метод продолжает называть себя до определенного состояния.

+0

Вы буквально спасли мне жизнь. Спасибо! – xtremeslice

0

Этот код будет работать нормально. проблема заключалась в том, что вы вызывали toString() несколько раз, что вызывало переполнение стека. плюс вы должны объявить String в автомобиле родительского класса и обновить его в дочерних классах с помощью режима полета и т. д. запустите следующий код:

class Main { 

public static void main(String[] args) { 

    HotAirBalloon airbag = new HotAirBalloon(10000); 
    Locomotive loco = new Locomotive(5000); 

System.out.println(airbag.toString()); 
System.out.println(loco.toString()); 
} 
} 

class Vehicle { 
String mode, fuel; 
String s; 
} 

class HotAirBalloon extends Vehicle { 

int maxAltitude; 

HotAirBalloon(int _alt) { 
    mode = "flight"; 
    fuel = "propane"; 
    maxAltitude = _alt; 
    s= "Vehicle Mode:" + mode + " Fuel:" + fuel; 
} 
public String toString() { 
    return s + " Max Altitude:" + maxAltitude; 
}} 

class Locomotive extends Vehicle { 

int horsePower; 
Locomotive(int _hp) { 
mode = "traversal"; 
fuel = "coal"; 
horsePower = _hp; 
s= "Vehicle Mode:" + mode + " Fuel:" + fuel; 

} 
public String toString() { 
return s+ " Horsepower:" + horsePower; 
} 
} 
Смежные вопросы