先有鸡蛋还是现有鸡---Java语言程序设计(基础篇)学习日记

折腾代码真是个无比耗时的东西啊,不知不觉,十分钟,二十分钟,三十分钟。。。

课后编程题,让读入数目不确定的考试分数,并且判断有多少个分数高于或等于平均分,有多少个分数低于平均分。输入一个负数标志输入结束。假设最高分为100.。。。

先有鸡蛋还是先有鸡?让我从生物学角度太好回答了,但是编程的话。。。额。

先初始化一个数组list,数组长度就定了,就不能满足数目不确定的考试分数了。但是想先输入分数再初始化数组呢,先输入的分数又没处存了,所以,小弟对策是先定义并初始化一个很长的数组,长度n,再根据输入的分数的数目初始化另一个数组list2,来把有效输入转存到新数组。再对新数组进行操作。

PS:前边,那个n,可以写很大很大,不管怎么写,都是个确定的数,而不是无穷吧,貌似这个数组长度也没上限吧?

那这就太局限了,只要不是无限,你定义多大的n,总有不够用的时候,总会有溢出的风险啊。。

PS:如果定义一个很大的数组,再加手动输入那些成绩的话,可能手抽筋也写不到他溢出的时候,但是这里讨论的是理论,理论上会溢出

不知道有没有更好的方法,暂时就想这么多。

我只是一个看书看到第六章并且没做全练习题的菜鸟,勿鄙视。。。。。。

package java06.ProgramTest;
//课后题4,输入数目不确定的数组
import javax.swing.JOptionPane;

public class Program_6_4 {
 public static void main(String[] args){
  int n=1000;
  //尴尬啊,想通过计算输入的成绩的总数来给Index赋值,用来初始化数组,但是不初始化数组又没处存输入的成绩
  int[] myList=new int[n];//我暂时通过一个手动赋值来初始化数组把
  
  int number=0;
  int i=0;
  for(i=0;number>=0;i++){
   String inputString=JOptionPane.showInputDialog("Enter a score. /n"+
     "Negative number to end~!!!/nThe allowable max score is 100.");
   number=Integer.parseInt(inputString); 
   if(number>=0)
    myList[i]=number;
    
  }
  i--;
  System.out.println("Score's amount is "+i);
  
  //直接用原来那个数组有风险,输入的数量刚好和定义的数组相等固然是好,
  //但是你输入的不够n的话,那些0,就全算平均值了,所以要把没输入的默认0的都给屏蔽掉
  //这里我们采用的方法是,在这new一个,把前边数组的值赋过来
  int[] myList2=new int[i];
  int index=i-1;
  for(int k=0;k<=index;k++){
   myList2[k]=myList[k];
  }
  System.out.println("/nTest:average "+computeAverage(myList)+"一千个数的平均值");
  System.out.println("/naverage"+computeAverage(myList2));
  System.out.println("/nTest: 大于等于平均值: "+
    computeCountAboveAverage(computeAverage(myList),myList)+"一千个数中大于等于平均值的");
  System.out.println("/n大于等于平均值: "+computeCountAboveAverage(computeAverage(myList2),myList2));
  System.out.println("/nTest: 小于平均值: "+
    computeCountBelowAverage(computeAverage(myList),myList)+"一千个数中小于平均值的");
  System.out.println("/n小于平均值: "+computeCountBelowAverage(computeAverage(myList2),myList2));
 
 }
 //计算平均值
 public static double computeAverage(int[] list){
  int sum=0;
  double average=0;
  for(int i=0;i<list.length;i++){
   sum+=list[i];
  }
//  average=sum/list.length;//bug  先Mark了,以后注意
  average=(double)sum/list.length;
  return average;
  
 }
 //计算获得平均成绩以上的成绩数目
 public static int computeCountAboveAverage(double average,int[] list){
  int count=0;
  for(int i=0;i<list.length;i++){
   if(list[i]>=average)
    count++;
  }
  return  count;
 }
 //计算获得平均成绩以下的成绩数目
 public static int computeCountBelowAverage(double average,int[] list){
  int count=0;  
  for(int i=0;i<list.length;i++){
   if(list[i]<average)
    count++;
  }
  return  count;
 }
 

}

后记。类的实例变量和静态变量称为类属变量数据域。定义在方法内部的变量称为局部变量。不管在何处声明,类属变量的作用域是整个类。类属变量和方法在类中可以按任何顺序声明。

例外:一个数据域需要引用另一个数据域来进行初始化,另一个数据域必须先声明(严格的顺序限制,书上有明文规定了)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值