2015-11-01 3 views
0

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

С учетом сказанного я борюсь с возвращающимися методами в своем коде. Я могу написать эту программу, не разбивая ее на методы, как я, но мне сказали, что при кодировании хорошая практика заключается в том, чтобы разделить ее на методы, чтобы отладка была проще.

В следующем коде есть несколько основных недостатков.

public static boolean hybridNot() 
{ 
    String typeCar = input("Hybrid or Electric?"); 
    boolean electric = false; 

if (typeCar.equalsIgnoreCase("Electric")) 
{ 
    electric = true; 
} 

else if (typeCar.equalsIgnoreCase("Hybrid")) 
{ 
    electric = false; 
} 

else 
{ 
    print("Sorry I didn't understand that"); 
} 

return; 
} 

public static boolean solarNot() 
{ 
    String panelsMaybe = input("Solar panel?"); 
    boolean solarPanel = false; 

    if (panelsMaybe.equalsIgnoreCase("Yes")) 
    { 
     solarPanel = true; 
    } 

    else if (panelsMaybe.equalsIgnoreCase("No")) 
    { 
     solarPanel = false; 
    } 

    else 
    { 
     print("Sorry I didn't understand that"); 
    } 

    return; 
    } 

public static int discountNot() 
{ 
    final int basicPrice = 20000; 
    final int electricCost = 2000; 
    final int solarCost = 5000; 
    boolean electric = hybridNot(); 
    boolean solarPanel = solarNot(); 
    int totalPrice; 

    if ((solarPanel = true) || (electric = true)) 
    { 
     totalPrice = basicPrice + solarCost + electricCost - 500; 
    } 

    else if ((solarPanel = true) || (electric = false)) 
    { 
     totalPrice = basicPrice + solarCost; 
    } 

    else if ((solarPanel = false) || (electric = true)) 
    { 
     totalPrice = basicPrice + electricCost; 
    } 

    else 
    { 
     totalPrice = basicPrice; 
    } 

    return; 

    } 

public static void totalCost() 
{ 
    final int basicPrice = 20000; 
    final int electricCost = 2000; 
    final int solarCost = 5000; 
    final int discountCost = 500; 
    boolean hybrid = hybridNot(); 
    boolean solarPanel = solarNot(); 
    int finalPrice = 0; 

    finalPrice = discountNot(); 

    if (finalPrice >= 26500) 
    { 
     print("Basic Price: " + basicPrice + "\n" + "Electric model: " + electricCost + "\n" + "Solar Panel: " + solarCost + "\n" + "Discount: " + discountCost); 
    } 

    else if (finalPrice >= 25000) 
    { 
     print("Basic Price: " + basicPrice + "\n" + "Solar Panel: " + solarCost); 
    } 

    else if (finalPrice >= 22000) 
    { 
     print("Basic Price: " + basicPrice + "\n" + "Electric model: " + electricCost); 
    } 

    else 
    { 
     print("Basic Price: " + basicPrice); 
    } 

    print("Total: " + finalPrice); 

    } 

почему методы hybridNot и solarNot, кажется, повторяются, прежде чем перейти к следующему методу. Мне кажется, что у меня может быть проблема с тем, что я возвращаю в конце метода, но я, честно говоря, не могу понять, что случилось. Метод totalCost, похоже, игнорирует оператор if в методе discountNot, и логические значения не передаются правильно totalCost, и я получаю только значение finalPrice >= 26500.

Опять же, я новичок в Java в целом, и я также новичок в stackoverflow (так привет!), Поэтому, пожалуйста, скажите мне, что я делаю что-то неправильно, и я буду правильно смотреть в следующий раз! Спасибо!!

+1

Я недоумевал, что вы говорите, методы сделать что-нибудь, так как этот код не компилировать. Вы не можете написать оператор 'return' в методе с объявленным типом возвращаемого значения (например,' boolean'), не считая, что 'return' со значением, которое вы хотите вернуть. – RealSkeptic

+0

@RealSkeptic: Чтобы быть справедливым, это как раз проблема. Однако, когда я пытаюсь фактически вернуть туда возвращаемое значение, программа становится все хуже и хуже.Либо он начинает цикл, либо компилятор жалуется, что я возвращаю неправильный тип. – Overclock

+0

Это означает, что существует логическая проблема. И это имеет смысл, потому что у вас есть три возможности (электрический, гибридный, плохой ввод), но вы выбрали тип возврата, который дает только две возможности. Вам нужно изменить логику (возможно, поставить цикл проверки внутри метода?) Выбросить исключение?) – RealSkeptic

ответ

1

Вы не возвращаете никаких значений в свои функции. Использование:

public static boolean hybridNot(){ 
    //... 
    return electric; 
} 

вернуть значение electricboolean. Используйте аналогичный синтаксис в своих других функциях, чтобы вернуть соответствующие переменные.

Кроме того, причина, по которой методы повторяют себя, потому что вы их называете дважды:

public static int discountNot() 
{ 
    //... 
    boolean electric = hybridNot(); //here 
    boolean solarPanel = solarNot(); 
    //... 
} 

public static void totalCost() 
{ 
    //... 
    boolean hybrid = hybridNot(); //and here 
    boolean solarPanel = solarNot(); 
    //... 
} 
+0

У меня на самом деле было то, что в предыдущей итерации моего кода, но все, что он делал, было в цикле, спрашивая меня, хочу ли я гибрид или электричество снова и снова. Извиняюсь, если я вас неправильно понял. Ах, извините, я не видел вашей причины, почему они повторяются. Это решает повторяющуюся проблему, спасибо, много! – Overclock

2

Вы должны вернуть значение в соответствии с типом метода возвращения.

public static boolean hybridNot() 
{ 
    String typeCar = input("Hybrid or Electric?");  
    return (typeCar.equalsIgnoreCase("Electric")) 
} 

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

сейчас здесь:

if ((solarPanel = true) || (electric = true)) 

вы делаете назначение, не comparement. Для сравнения вы можете:

if (solarPanel || electric) 

Поскольку переменные уже булевы.

Здесь:

boolean hybrid = hybridNot(); 
    boolean solarPanel = solarNot(); 
    int finalPrice = 0; 

    finalPrice = discountNot(); 

discountNot будем называть hybridNot и solarNot снова:

public static int discountNot() 
{ 
    ... 
    boolean electric = hybridNot(); 
    boolean solarPanel = solarNot(); 
+0

Обратите внимание, что OP инициализирует 'boolean' как 'false', поэтому, если опция« Я не знаю », она все равно _would_ возвращает false (если функция была исправлена) – Arc676

+0

Вы правы, это выглядело как попытайтесь с первого взгляда получить три состояния по булеву. Я обновлю. –

+0

Благодарим вас за ответ. Однако у меня есть несколько вопросов. Я не понимаю, почему вы вернете то, что у вас есть, разве это не классифицируется как строка? Кроме того, сравнение приводит к тому, что компилятор жалуется, что '||' является неожиданным типом. – Overclock

Смежные вопросы