2017-03-13 25 views
0

因此,現在計算平均值,我試圖打印出用戶輸入,它只在自己的行中嚴格小於平均值。我試着這樣做,但是,進入一個錯誤的 「壞的操作數爲二進制運算符」 <「只打印用戶輸入的數字,嚴格小於平均值

import java.util.Scanner; 
    public class avg 
    { 
     public static void main (String args[]) 
     { 
      Scanner in = new Scanner(System.in); 
      System.out.println("Enter some numbers(Ctrl-d to quit):"); 
      double[] myArray = new double[10]; 
      int howMany = 0; 
      double sum=0 ; 
      double avg=0; 
      while (in.hasNextDouble()) // Ctrl-D to terminate 
      { 
       double userVal = in.nextDouble(); 
       myArray[howMany++] = userVal; 

       if (howMany >= myArray.length) 
       { 
        //myArray.length = myArray.length * 2; 
        double[] tempArray = new double[2 * myArray.length]; 

        for (int i = 0; i < howMany; i++) 
         tempArray[i] = myArray[i]; 
        myArray = tempArray;   
       } 
      } 
      for (int i = howMany - 1; i >= 0; i--) 
      { 
      sum += myArray[i]; 
      } 
      avg = sum/howMany; 
      System.out.print("Average: "+ avg); 
      System.out.println(myArray<avg);// to print numbers that the user entered only which are strictly less than the avg. This did not work// 

    } 
} 
+0

'Arrays.stream(myArray的,0的howmany)。平均()。getAsDouble()' – shmosel

+0

所以先生做ü要我後的for循環中添加這種說法? –

回答

1
for (int i = howMany - 1; i >= 0; i--){ 
    sum+=myArray[i];//sum up the array 
} 
avg = sum/howMany; 

打印每double在一行:

System.out.println(avg); 

for (int i = 0; i < howMany; i++) { 
    if(myArray[i] < avg){ 
     System.out.println(myArray[i]);//single line for every double 
    } 
} 

打印所有double S IN一個行:

String oneLine = "["; 
int lowerAvg = 0; 
for (int i = 0; i < howMany; i++) { 
if(myArray[i] < avg){ 
     oneLine += (i > 0 && ++lowerAvg > 0)?", ":""; // add separator 
     oneLine += (myArray[i]); 
    } 
} 
oneLine+="]"; 
System.out.println(oneLine);//prints like [1.0, 2.0, ...] 

使用Java 8:

avg = Arrays.stream(myArray, 0, howMany).average().orElse(0); 
final double finalAvg = avg;//final variable to use in filter condition 
System.out.println(finalAvg); 
Arrays.stream(myArray, 0, howMany).filter(x -> x < finalAvg).forEach(System.out::println);//will print every double in a single line 
System.out.println(Arrays.toString(Arrays.stream(myArray, 0, howMany).filter(x -> x < finalAvg).toArray()));//Will print the array like [1.0, 2.0, ...] 
+0

無需檢查'isPresent()',只需執行'orElse(0)'或'orElse(avg)'。 – shmosel

+0

謝謝,編輯了代碼! –

+0

謝謝,它效果很好。另一個問題是,如果我想打印用戶輸入的數字,然後輸出平均值,該怎麼辦?例如:AVERAGE:12(後跟用戶輸入的數字)x(nxtline)y(nextline) –

相關問題