2016-04-25 55 views
0

我对这个为我写的课程有疑问。除了一个小细节之外,它的功能正是我需要的。我的while循环在我的打印语句的末尾添加了一个额外的“+”。在JAVA中摆脱额外的输出虽然循环

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 .format(total)with df1.format(total.substring(0,total.length() - 1))。 (假设多余的+是你的字符串中的最后一个字符) –

回答

0

有很多方法可以做到这一点最简单的方法可以通过简单的使用if/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元素。您也可以反转此操作并在之后打印所有元素的分隔符index < arr.length - 1的实际值。

当使用Java 8你也可以使用StringJoiner和循环后打印的内容,就像这样:

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()); 
// ...