A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 葛迅 于 2013-4-2 13:12 编辑

编写程序,统计输入的正数和负数的个数,并计算这些数的平均值。输入:若干个整数;输出:正数个数、负数个数、平均值。0不参与计数和求平均值,当输入为0时,程序结束。例如:
依次输入: 12  -3   5  -7  0
输出: 正数2个,负数2个,平均值1.75, 共输入5个数字.

求儿大神帮帮忙。。

5 个回复

正序浏览
写得比较急,有什么不足的地方请见凉
  1. import java.io.*;
  2. import java.util.*;

  3. public class Mytest {
  4.        
  5.         public static void main(String[] args) throws Exception {
  6.                 List <Integer> list = new  ArrayList <Integer>();
  7.                 boolean ctr  = true;
  8.                 System.out.println("只可输入整数,输一个数按按回车确认一次,输入sure为确定,输入exit为退出");
  9.                 InputStreamReader inr =null;
  10.                 InputStream in = null;
  11.                 while (ctr){
  12.                          in = System.in;//这是一个阻塞式的方法,执行到此处要从键盘输入东西才可往往下走
  13.                      inr = new InputStreamReader(in);//转换成字符流
  14.                         char [] carr = new char[10];//定义下数组来装从键盘输入的数据
  15.                         int num = 0;
  16.                         if((num=inr.read(carr))!=-1){
  17.                                 String str = new String(carr);
  18.                                
  19.                                 if(check(str)){
  20.                                         int i = Integer.valueOf(str.trim());
  21.                                         if(i!=0){
  22.                                                 list.add(i);
  23.                                         }
  24.                         //                System.out.println(list.size());
  25.                                 }
  26.                                
  27.                                 if(str.trim().equals("sure")){//确认,退出循环
  28.                                         ctr = false;
  29.                                 }
  30.                                
  31.                                 if(str.trim().equals("exit")){//直接退出,后面的语句将不被执行
  32.                                         return;
  33.                                 }
  34.                                 //System.out.println(ctr+"|"+str.trim()+"|"+str.trim().length());
  35.                         }
  36.                 }
  37.                
  38.                 int count1 = 0;//计算整数的个数
  39.                 int count2 = 0;//计算负数的个数
  40.                 for(int i : list){
  41.                         if(i>0)count1++;
  42.                         if(i<0)count2++;
  43.                         System.out.println(i);
  44.                 }
  45.                 double m = mean(list);//求平均数
  46.                 System.out.println("平均数:"+m+" | 整数个数:"+count1+" | 负数的数:"+count2);
  47.         }
  48.        
  49.         //求平均数的方法
  50.         public static double mean (List<Integer>list){
  51.                  int count = 0;
  52.                  if(list==null||list.size()<1)return 0;
  53.                  for(int i:list){
  54.                          count += i;
  55.                  }
  56.                  double m = (double)count/list.size();
  57.                 return m;
  58.         }
  59.         //判断字符串是否全是数字
  60.         public static boolean check(String str){
  61.                 if(str==null||str.trim().length()<1){
  62.                         return false;
  63.                 }
  64.                 String cstr = str.trim();
  65.                 char [] sarr = cstr.toCharArray();
  66.                 for(char c:sarr){
  67.                         Character chr = Character.valueOf(c);
  68.                         if(Character.valueOf(sarr[0]).equals('-')){//如果字符串第一个是"-"号跳过
  69.                                 continue;
  70.                         }
  71.                         if(chr>'9'||chr<'0'){
  72.                                 return false;
  73.                         }
  74.                 }
  75.                 return true;
  76.         }
  77. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
邵震 发表于 2013-4-2 08:04
因为我还不会怎么直接从dos命令行输入 所以我是直接把数存在数组里了

数组我才刚刚看到 不是很懂 不过谢谢了 我先收藏了 回来在研究感激不尽
还有你的代码写的很好  很整洁 能不能交个朋友 一起交流
回复 使用道具 举报
这题目应该不是很难把。。还是自己多多动脑筋,做出来才有成就感。
回复 使用道具 举报
本帖最后由 邵震 于 2013-4-2 08:07 编辑
  1. <div class="blockcode"><blockquote>/**
  2. 编写程序,统计输入的正数和负数的个数,并计算这些数的平均值。输入:若干个整数;输出:正数个数、负数个数、平均值。0不参与计数和求平均值,当输入为0时,程序结束。例如:
  3. 依次输入: 12  -3   5  -7  0
  4. 输出: 正数2个,负数2个,平均值1.75, 共输入5个数字.
  5. 思路:
  6. 统计总输入个数,在定义两个变量 x,y  对每个数进行对比 大于零x++小于零y++等于零不作处理
  7. 对所有数进行累加 然后求平均值。
  8. 最后进行打印
  9. */
  10. class java0402d1
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 int [] arr =new int [] {12,-3,5,-7,0};
  15.                 hanshu(arr);
  16.         }
  17.         public static void hanshu(int [] arr)
  18.         {
  19.                 System.out.print("输入:");
  20.                 int x=0,y=0;
  21.                 float z=0;
  22.                 for (int a=0;a<arr.length ;a++ )
  23.                 {
  24.                         if (arr[a]>0)
  25.                         {
  26.                                 x++;
  27.                         }
  28.                         if (arr[a]<0)
  29.                         {
  30.                                 y++;
  31.                         }
  32.                         z+=arr[x];
  33.                         System.out.print(arr[a]+" ");
  34.                 }
  35.                 System.out.println();
  36.                 System.out.print("正数:"+x+"个,负数:"+y+"个, 平均值:"+(z/arr.length)+"。共输入"+arr.length+"个数字");
  37.         }
  38. }

  39. /*

  40. 这个是输出结果
  41. 输入:12 -3 5 -7 0
  42. 正数:2个,负数:2个, 平均值:1.8。共输入5个数字
  43. */
复制代码
因为我还不会怎么直接从dos命令行输入 所以我是直接把数存在数组里了

评分

参与人数 2技术分 +1 黑马币 +21 收起 理由
葛迅 + 21 很给力!
冯海霞 + 1

查看全部评分

回复 使用道具 举报
个人认为这个要用到累加思想,和计数器思想。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马