2016-09-20 6 views
-3

私はJavaで初心者ですので、調査の不足のために判断を下さないでください。ここで私を複数のforループに対して無効な入力をした後に再度プロンプトを表示

このプログラムは、基本的な計算されたプログラムです。ユーザーは、プロジェクトの総コストを計算することができます。

私のプログラムはうまくデバッグできますが、問題は、ユーザー入力が無効な場合です。 ユーザが無効なエントリを入力すると、forループはただちに終了しますPlease, enter the amount!

ユーザが有効なエントリを入力するまで、プログラムはforループを維持します。

import java.util.Scanner; 

public class icalculator { 

    public static void main(String[] args) { 
     Scanner Keyboard = new Scanner(System.in); 
     double cost, percentage; 
     int years; 


     System.out.println("What the estimate cost of the project?"); 
     cost = Keyboard.nextDouble(); 

     if (cost <= 0) { 
      System.out.println("Please, enter the amount!"); 
     } else if(cost > 0) { 

      System.out.println("What the estimate percentage cost of the project? "); 
      percentage = Keyboard.nextDouble(); 

      if (percentage <= 0) { 
       System.out.println("Please, enter the amount!"); 
      } else if(percentage > 0) { 

       System.out.println("How long it will take to complete the project? \n" 
         + "Please, enter whole numbers."); 
       years = Keyboard.nextInt(); 

       if (years <= 0) { 
        System.out.println("Please, enter the amount!"); 
       } else if (years > 0) { 

この部分は計算領域である:

double c = cost; 
         double p = percentage; 
         int y = years; 

         for (int i = 1; i <= 1; i++) { 
          c = Math.round(((p/100) * c) + y); 
          System.out.println("At " + percentage + "% rate, the cost of the project will be $" 
            + c + " which take " + years + " years to be complete"); 
         } 


        } 
       } 
      } 
     } 

行う場合ループは良くなるだろうが、私が考えていたが、私はそれが何であるか、プログラムがよりcomplaicatedにしようとしておりません。

+0

実際の問題があなたが記述している/観察していることは明らかではありません。あなたは具体的になりますか? – David

+0

@Davidプログラムを実行すると、ユーザー入力が無効な場合、プログラムは「Please、amount!」と応答してプログラムを終了します。私は、ユーザが有効なエントリを入力するまで、プログラムがforループを続けるようにしたい。 – krillavilla

答えて

0

コンセプトの用語が「公式」であるかどうかはわかりませんが、有効な値が入力されるまで「入力ループ」が必要なユーザー入力の場合はそうです。 (現時点ではコードに「プロンプトに戻る」方法がないのに、有効な値をチェックするためにifが満たされないときは、ロジックは単純に終了します)。

入力ごとに、

double cost = 0; 
while (cost <= 0) { 
    System.out.println("What the estimate cost of the project?"); 
    cost = Keyboard.nextDouble(); 

    if (cost <= 0) { 
     System.out.println("Please, enter the amount!"); 
    } 
} 

確かにそれを構成するさまざまな方法がありますが、概念は同じです。変数を初期(ビジネス無効)の値に宣言し、値がビジネス有効になるまでユーザーにプロンプ​​トを繰り返します。したがって、ループの後に有効な値があることがわかります。

さらに、このプロセスを独自のメソッドにカプセル化することで、学習/練習を指示できます。このメソッドは、ユーザーから必要な値を返すメソッドです。 main()メソッドは、他のメソッドを呼び出して値を取得します。これを各入力に対してカプセル化した後、類似点を書き留めて、カプセル化された操作をの単一メソッドにリファクタリングできるかどうかを確認します。

究極的に理想的な構造は、これらのネストされた角かっこ(ifs、ループ内のifなど)から離れてしまうことです。右側にプッシュする)代わりに、それ自体が実行される全体的な操作を記述する、よく名付けられたメソッド呼び出しの単純なセットを有する。

関連する問題