一道很简单的求大于平均值的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个数,输入完成后进行排序,计算平均值,最后使用二分法查找大于平均数的数字的最小的索引点,再根据这个索引点输出。
如果输入完成后不进行排序,那只能按照你的方法依次使用循环进行查找了。
------解决方案--------------------学习下
------解决方案--------------------还行
------解决方案--------------------