要求从键盘读入一些正数(读入正数的个数要由用户从键盘输入,比如要读入9个正数,就要用户输入9来确定),求出大于总平均值的正数并输出到屏幕来.
解决方案 »
- 请教有关图像的问题!icon.getIcon().getScaledInstance(参数)
- 怎么用代码实现换颜色?好久没提问啦。。
- 发了几个论坛都没人知道,试试csdn吧!关于初始化顺序的 java
- 请问tomcat中的路径问题,如何让链接有效?
- 用java怎么实现循环链表?
- jsp+javabean的错误
- 怎么用KEYTOOL生成keyalg为DESede的数字证书?
- 怎么在一个frame上放20个panel??
- martin的<<uml for java programmer>> 远程编译 smc 文件的例子谁编译过没有?
- Float型的困惑(一定给分)
- 怎么才能把java学好?迷茫中.............
- 关于UltraEdit的筛选同一后缀名文件
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为任何数字。
至于如何输出比均值大的数,那就再循环一次数组就好了。
不知道还有没有更好的程序了,希望有人提供学习。
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个数,输入完成后进行排序,计算平均值,最后使用二分法查找大于平均数的数字的最小的索引点,再根据这个索引点输出。如果输入完成后不进行排序,那只能按照你的方法依次使用循环进行查找了。
import java.util.*;public class MoreAverage {
InputStreamReader in;
BufferedReader reader;
String s;
float i;
public MoreAverage(){
}
public float setNumber(){
try{
in = new InputStreamReader(System.in);
reader = new BufferedReader(in);
System.out.print("请输入数:");
s = reader.readLine();
i = 0;
try{
i = Float.parseFloat(s);
}catch(Exception e){
System.out.println("Wrong Input!");
}
}catch(IOException e){
System.out.print("Wrong Input!");
}
return i;
}
public float average (int size){
float[] array = new float[size];
float average = 0;
for(int i=0; i<size; i++)
array[i] = setNumber();
Arrays.sort(array);
System.out.print("数组排序后:");
for(int i=0; i<size; i++)
System.out.print(array[i] + " ");
for(int i=0; i<size; i++)
average += array[i];
average /= size;
System.out.println("\n" + "平均值为:" + average);
System.out.print("大于平均数的数有:");
for(int i=0; i<size; i++)
if(array[i] > average)
System.out.print(array[i] + " ");
return average;
}
public static void main(String args[]){
MoreAverage app = new MoreAverage();
app.average(5);
}
}这个是完整的程序了,加上了排序功能,其实排序在这里不是必须的。
输出结果:
请输入数:233
请输入数:44
请输入数:51
请输入数:66
请输入数:90
数组排序后:44.0 51.0 66.0 90.0 233.0
平均值为:96.8
大于平均数的数有:233.0
// TODO Auto-generated method stub
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader bf = new BufferedReader(in);
int sum=0;
try {
String[] a = bf.readLine().split(" ");
for(int i=0; i<a.length; i++){
sum+=Integer.parseInt(a[i]);
}
float f = sum/a.length;
System.out.println(f);
for(int j=0; j<a.length; j++){
int c = Integer.parseInt(a[j]);
if(c>f){
System.out.println(c);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}