2016-04-25 14 views
0

私はこのプログラムで質問を受けましたが、私はクラスに書いています。それは私が必要としているのと全く同じように機能しています。私のwhileループは、printステートメントの最後に余分な "+"を追加しています。JAVA Whileループで余分な出力を取り除く

public class Fractions 
{ 
    public static void main (String[] args) 
    { 
     //-----declare variables----- 
     int numOfFractions = 0, 
      numerator = 0; 
     double total = 0; 
     DecimalFormat df1 = new DecimalFormat("#0.##"); 
     Scanner stdIn = new Scanner(System.in); 

     //----Welcome MSG------ 
     System.out.println(""); 
     System.out.println("\t* * * Welcome to Fractions * * * "); 
     System.out.println(""); 

     //-----get numOfFractions------ 
     System.out.print("Enter the number of fractions: "); 
     numOfFractions = stdIn.nextInt(); 

     //----begin loop------- 
     numerator = 1; 

     while(numerator <= numOfFractions) 
     { 

      while(numOfFractions > 0) 
      { 
       System.out.print("" + numerator + "/" + numOfFractions + " " + "+" + " "); 
       total += (double)numerator/numOfFractions; 
       numOfFractions--; 
       numerator++; 
      } 
     } 

     System.out.println(""); 
     System.out.println(""); 
     System.out.print("The total: " + df1.format(total)); 
     System.out.println(""); 
     System.out.println("\nThanks for using the Fraction Adder program\n"); 


    } // end main 
} // end pgm 

Here is a picture of my output

+0

をするだけDF1を置き換える、次のようにあなたも、StringJoinerを使用し、ループの後に内容を印刷することができたJava 8を使用して

.format(total)をdf1.format(total.substring(0、total.length() - 1))に置き換えます。 (冗長+が文字列の最後の文字である場合) –

答えて

0

は単に場合/ else条件を使用してすることができ、この最も単純なアプローチを行うには多くの方法があり、これを試してください:要素必要に応じ

public class Fractions 
{ 
    public static void main(String[] args) 
    { 
     // -----declare variables----- 
     int numOfFractions = 0, numerator = 0; 
     double total = 0; 
     DecimalFormat df1 = new DecimalFormat("#0.##"); 
     Scanner stdIn = new Scanner(System.in); 

     // ----Welcome MSG------ 
     System.out.println(""); 
     System.out.println("\t* * * Welcome to Fractions * * * "); 
     System.out.println(""); 

     // -----get numOfFractions------ 
     System.out.print("Enter the number of fractions: "); 
     numOfFractions = stdIn.nextInt(); 

     // ----begin loop------- 
     numerator = 1; 

     while (numerator <= numOfFractions) 
     { 

      while (numOfFractions > 0) 
      { 
       if (numOfFractions > 1) 
       { 
        System.out.print("" + numerator + "/" + numOfFractions + " " + "+" + " "); 
       } 
       else 
       { 
        System.out.print("" + numerator + "/" + numOfFractions + " "); 
       } 

       total += (double) numerator/numOfFractions; 
       numOfFractions--; 
       numerator++; 
      } 
     } 

     System.out.println(""); 
     System.out.println(""); 
     System.out.print("The total: " + df1.format(total)); 
     System.out.println(""); 
     System.out.println("\nThanks for using the Fraction Adder program\n"); 

    } // end main 
} // end pgm 
0

は通常あなたがチェック最後の(または最初の)要素を印刷してから、セパレータを追加するかどうかを指定します。私はそれが何が起こっているか理解することは簡単だと思うので、ここでは、簡単な例です:

String[] arr = new String[] { "a", "b", "c" }; 
for (int i = 0; i < arr.length; i++) { 
    if (i > 0) 
     System.out.print("+"); 

    System.out.print(arr[i]); 
} 

我々は前index > 0実際の値でのみの要素用セパレータ+を印刷します。これを逆にして、 にすべての要素のセパレータを印刷すると、の実際の値の後にセパレータを印刷することもできます。あなたのコードで

String[] arr = new String[] { "a", "b", "c" }; 
StringJoiner joiner = new StringJoiner("+"); 
for (int i = 0; i < arr.length; i++) 
    joiner.add(arr[i]); 

これは、このようなものになります:

// ... 
StringJoiner joiner = new StringJoiner(" + "); 
while (numerator <= numOfFractions) { 
    while (numOfFractions > 0) { 
     joiner.add(numerator + "/" + numOfFractions); 

     total += (double) numerator/numOfFractions; 
     numOfFractions--; 
     numerator++; 
    } 
} 

System.out.println(joiner.toString()); 
// ... 
関連する問題