日期:2014-05-20  浏览次数:20889 次

一道很简单的求大于平均值的JAVA题
要求从键盘读入一些正数(读入正数的个数要由用户从键盘输入,比如要读入9个正数,就要用户输入9来确定),求出大于总平均值的正数并输出到屏幕来.

------解决方案--------------------
import java.io.*;

public class MoreAverage {
InputStreamReader in;
BufferedReader reader;
String s;
int i;

public MoreAverage(){

}

public int setNumber(){
try{
in = new InputStreamReader(System.in);
reader = new BufferedReader(in);

s = reader.readLine();

i = 0;

try{
i = Integer.parseInt(s);
}catch(Exception e){
System.out.println( "Wrong Input! ");
}

}catch(IOException e){
System.out.print( "Wrong Input! ");
}

return i;
}

public int average (int size){
int[] array = new int[size];
int average = 0;

for(int i=0; i <size; i++)
array[i] = setNumber();

for(int i=0; i <size; i++)
average += array[i];
average /= size;

System.out.print(average);
return average;
}

public static void main(String args[]){
MoreAverage app = new MoreAverage();
app.average(3);

}

}

这个是计算三个输入数的均值,你可以修改app.average(3);中的3为任何数字。
至于如何输出比均值大的数,那就再循环一次数组就好了。
不知道还有没有更好的程序了,希望有人提供学习。
------解决方案--------------------
public class MoreAverage {

  private static float[] num;
  private static float aver;
  
  public static void main(String args[]) {
    num = setNumber(5);
    aver = average(num);
    System.out.printf( "平均值为:%.4f%n ", aver);
    System.out.println( "比平均值大的数有: ");
    for(int i=findIndex(0, num.length); i <num.length; i++){
      System.out.println(num[i]);
    }    
  }

  // 输入需要计算的数
  public static float[] setNumber(int count) {
    Scanner scan = new Scanner(System.in);
    float[] num = new float[count];
    for (int i = 0; i < count; i++) {
      System.out.printf( "请输入第%d个数: ", i + 1);
      try {
        num[i] = scan.nextFloat();
      }catch(Exception e){
        System.out.println(e.getMessage());
        --i;
        scan.next();
        System.out.println( " ** 输出错误,请重新输入 ** ");
      }
    }
    Arrays.sort(num); // 使用Java的内置算法进行排序
    return num;
  }

  // 计算平均数
  public static float average(float[] size) {
    float average = 0;
    float sum = 0;
    for (int i = 0; i < size.length; i++) {
      sum += size[i];
    }
    average = sum / size.length;
    return average;
  }
  

  // 使用二分法寻找大于平均数的索引点
  public static int findIndex(int low, int high) {
    int middle = (low + high) /2;
    if( low > = high){
      return middle;
    }
    if(num[middle]> =aver){
      return findIndex(low, middle);
    }else{
      return findIndex(middle+1, high);
    }
  }
}

先依次输入n个数,输入完成后进行排序,计算平均值,最后使用二分法查找大于平均数的数字的最小的索引点,再根据这个索引点输出。

如果输入完成后不进行排序,那只能按照你的方法依次使用循环进行查找了。
------解决方案--------------------
学习下
------解决方案--------------------
还行
------解决方案--------------------