2016-10-19 3 views
0

Я недавно начал курс, где основным языком, который мы изучаем на данный момент, является Java.Совершенствование методов в Java

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

Вот часть меня беспокоит в данный момент:

public String printResults(){ 
     if(candidate1Votes == 0 && candidate2Votes == 0) 
    { 
     System.out.println ("No votes cast, results cannot be displayed."); 
     return "No votes cast, results cannot be displayed."; 
    } 
    else if(this.completed == false) 
    { 
     System.out.println ("Voting has not finished"); 
     return "Voting has not finished"; 
    } 

    else if(this.completed == true) 
    { 
     System.out.println ("Voting has finished, no more votes will be allowed."); 
     return "Voting has finished, no more votes will be allowed"; 
    } 
    { 
     double totalVotes = this.candidate1Votes + this.candidate2Votes; 
     double cand1Share = (double) this.candidate1Votes/totalVotes*100; 
     double cand2Share = (double) this.candidate2Votes/totalVotes*100; 

     System.out.format(candidate1 + " received %3.1f percent of the votes\n", cand1Share); 
     System.out.format(candidate2 + " received %3.1f percent of the votes\n", cand2Share); 
     return "v"; 
    } 

}

Первоначально я использовал пустоту в этом методе, но часть нашей задачи в том, чтобы затем изменить его значение строки , Это то место, где я борюсь - как только я доработал до истины, он все же позволяет мне голосовать. Я знаю, что этот код неполный, но я не могу закончить его, поскольку я не уверен, что делать! Это были следующие вопросы.

  1. Измените метод printResults, чтобы он применял первые два правила. Обратите внимание, что значение заполненного поля указывает, завершено ли голосование. Метод должен быть изменен для возврата строки, которая указывает, была ли печать успешной.
  2. Измените свой метод голосования, чтобы применить третье правило. Протестируйте свои методы, создав экземпляр и сделав следующее - до выполнив каждое тестовое примечание результат, который вы ожидаете получить, и сравните его с тем, что вы на самом деле получаете: • Попробуйте немедленно распечатать результаты • Проголосовать за кандидатов и кандидатов попытайтесь распечатать результаты • Установите заполненный поле в истинно с помощью вызова setCompleted • Попробуйте проголосовать за кандидата • Печать результатов

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

+1

делает ** если (this.completed) ** вместо ** if (this.completed == true) ** будет улучшением для многих людей –

+0

Положите первый ответ, чтобы вы пошли; возможно, вы хотите продолжить комментировать/обновлять свой вопрос ... если мой ответ поможет вам * уточнить * ваш вопрос. Поскольку я не совсем уверен, где вы застряли прямо сейчас! – GhostCat

+0

наилучшим образом относится к вашему учителю, но она должна прекратить преподавать использование _return values_ для обработки ошибок (на Java). У него лучшие концепции. –

ответ

0

Прежде всего, ваш код не является сложным, что затрудняет чтение/улучшение. Он может легко упрощен, как

public String printResults(){ 

    if(candidate1Votes == 0 && candidate2Votes == 0) { 
    System.out.println ("No votes cast, results cannot be displayed."); 
    return "No votes cast, results cannot be displayed."; 
    } // you returned ... NO need for ELSE! 

    if(this.completed == false) { 
    System.out.println ("Voting has not finished"); 
    return "Voting has not finished"; 
    } 

    // it is very clear here that completed must be true! 
    double totalVotes = this.candidate1Votes + this.candidate2Votes; 
    double cand1Share = (double) this.candidate1Votes/totalVotes*100; 
    double cand2Share = (double) this.candidate2Votes/totalVotes*100; 

    System.out.format(candidate1 + " received %3.1f percent of the votes\n", cand1Share); 
    System.out.format(candidate2 + " received %3.1f percent of the votes\n", cand2Share); 
    return "v"; 
} 

Возможно, что проще для чтения коды это все, что вам нужно, чтобы вы собираетесь!

+1

'this.completed == false' лучше быть похожим на'! Completed' –

+0

mmmh ... три точки возврата в небольшом методе ... ??? – JimHawkins

+0

@RomanSamoylenko В конце, это * стиль * вопрос. Я сохранил его стиль здесь, чтобы ** не упустить его! не там. – GhostCat

0

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

Вы также можете написать код, в котором вы вызываете printResults и setCompleted, чтобы увидеть, где проблема.

еще несколько советов для улучшения кода:

  • Иногда у вас есть открывающая скобка на ту же линию, а иногда и на следующем.Вы, вероятно, следует выбрать один стиль
  • Не надо окружать последний блок кода со скобками
  • if (this.completed == true) и else if (this.completed == false) немного избыточен и может быть записана как: if (this.completed) и if (!this.completed). Также вы можете написать

    if (this.completed) { 
        ... 
    } else { 
        .... 
    } 
    

    потому что, если оно завершено, это неверно, это может быть неверно.

  • Вместо того, чтобы писать каждой строки в два раза и необходимости редактировать его в два раза в случае, если вы хотите изменить что-то вы могли бы также сделать следующее:

    String msg = "Voting has not finished" 
    System.out.println(msg); 
    return msg; 
    
Смежные вопросы