2016-10-19 2 views
0

私は最近、私たちが現在学んでいる主な言語がJavaであるコースを開始しました。Javaでメソッドを改善する

私は、人々が2人の候補者に投票することを許可するプログラムを作成することを任されています。プログラムは投票をカウントし、表示されるものによって男投票がどのように行われたかによって異なります。ここで

は、私は現時点ではと心配です一部です:

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. 最初の2つのルールを適用するようにprintResultsメソッドを変更します。完了フィールドの値は、投票が完了したかどうかを示します。このメソッドは、印刷が成功したかどうかを示すStringを返すように変更する必要があります。
  2. 投票方法を変更して、3番目のルールを適用します。 各テストを実行して実際に得られる結果と比較する前に、インスタンスを作成して次の手順を実行してメソッドをテストしてください。 •すぐに結果を印刷してみてください •候補と結果を印刷しようと • •結果
  3. を印刷候補者に投票するようにしてください• をsetCompleted呼び出すことにより、真の完成フィールドを設定し

私は(これは私の最初の年である)、これに新しいですし、持っていますこれまでのところ私の本で大丈夫なことをしてくれましたが、この次の問題の助けがあれば大歓迎です!

+1

  • 代わりのすべての文字列を2回書いて、あなたはまた、次の何ができる何かを変更したい場合には、それを2回編集すること)** **の代わりに**(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 ...小さなメソッドで3つの 'return'ポイント... ??? – JimHawkins

    +0

    @RomanSamoylenko最後に、これは*スタイル*の質問です。私は彼がそれを見落とさないよう**に、彼のスタイルをここに保持しました!いない。 – GhostCat

    0

    コードを見ると、投票していないか、投票しているために完了したかどうかはtrueまたはfalseで、常にelse ifのいずれかになり、すべて返されるため、最後のブロックには到達しません文字列。だから、どうしてどのように投票を投じることができるのだろうと思います。

    また、printResultsとsetCompletedを呼び出してどこに問題があるかを示すコードを投稿することもできます。

    あなたのコードを改善するためのいくつかのより多くのヒント:

    • は時々あなたが同じライン上の開口部ブラケットを持ち、時には隣に。おそらく、カッコ
    • if (this.completed == true)else if (this.completed == false)との最後のコードブロックを囲む必要はありません一つのスタイル

    • を選択するビット冗長であり、のように書くことができる必要があります。if (this.completed)if (!this.completed)

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

      を書き込むこともできます。これが真でない場合はfalseになる可能性があるからです。 this.completed(場合

      **をやっ
      String msg = "Voting has not finished" 
      System.out.println(msg); 
      return msg;