Java语言程序设计A基础实验2控制流程Word文档格式.docx
《Java语言程序设计A基础实验2控制流程Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计A基础实验2控制流程Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
2.计算机操作系统。
3.程序编辑器EditPlus。
4.Java开发工具JDK。
四.实验内容及要求
基础实验2-1:
从键盘读取一个考试分数列表,计算它们的平均分。
基础实验2-2:
从键盘读取一个考试分数列表,计算它们的最高分、最低分。
基础实验2-3:
从键盘读取一个考试分数列表,计算总考试人数和每个级别的人数(90~100
优,80~89良,70~79中,60~69及格,0~59不及格)。
基础实验2-4:
将实验2-1、2-2、2-3综合起来,从键盘读取一个考试分数列表,统计:
总
考试人数、最高分、最低分、平均分、每个级别的人数、每个级别的人数
占总考试人数的百分比。
五.实验方案及技术路线(设计思路、算法、注意事项)
考虑到从键盘中读取的考试分数个数不确定,并且分数有可能重复,所以此处使用ArrayList集合储存double类型数据,决定采用do{}while()循环实现不断从键盘读取分数值,之后结合for循环及if语句的使用,计算集合中的分数的平均分、最高分和最低分以及各个分数级别人数和所占百分比等等。
因为do{}while()循环是先执行do{}中的代码再判断,所以最后输入的负数会被存入集合的末尾,应该要将其删除,用语句marks.remove(marks.size()-1)实现。
第二部分:
实验过程记录(可加页)(代码、运行结果、实验中出现的问题及解决过程)
⏹实验2-1
程序代码如下:
importjava.util.*;
publicclassTest05
{
staticdoubleaverage;
publicstaticvoidmain(String[]args)
{
doublemarkIn;
Scannersc=newScanner(System.in);
List<
Double>
marks=newArrayList<
();
do
{
System.out.print("
请输入一名学生成绩[输入负数结束]:
"
);
markIn=sc.nextDouble();
marks.add(markIn);
}
while(markIn>
=0);
intlen=marks.size()-1;
marks.remove(len);
for(inti=0;
i<
len;
i++)
average+=marks.get(i)/len;
System.out.print(len+"
名学生成绩的平均分为:
+average);
}
}
运行结果如下:
⏹实验2-2
publicclassTest06{
doublemarkIn,max,min;
marks.remove(marks.size()-1);
max=min=marks.get(0);
for(doubleitem:
marks)
if(item>
max)
{
max=item;
}
if(item<
min)
min=item;
System.out.println("
学生分数列表:
+marks);
最低分:
+min+"
\n"
+"
最高分:
+max);
⏹实验2-3
publicclassTest07
publicstaticvoidmain(String[]args)
intgradeA=0,gradeB=0,gradeC=0,gradeD=0,fail=0;
try{
do
System.out.print("
markIn=sc.nextDouble();
marks.add(markIn);
while(markIn>
marks.remove(marks.size()-1);
}catch(Exceptione){
System.out.println("
无效输入!
charch=0;
=90&
&
item<
100)
ch='
A'
;
=80&
90)
B'
=70&
80)
C'
=60&
70)
D'
60)
E'
switch(ch)
case'
:
gradeA++;
break;
gradeB++;
gradeC++;
gradeD++;
default:
System.out.println("
错误信息"
总考试人数为:
+marks.size());
90到100分数段的人数:
+gradeA);
80到90分数段的人数:
+gradeB);
70到80分数段的人数:
+gradeC);
60到70分数段的人数:
+gradeD);
60分以下的人数:
⏹实验2-4
publicclassTest08{
List<
getMark(marks);
judgeMark(marks);
}catch(InputMismatchExceptione){
System.err.print("
输入有误,只能输入数字!
publicstaticvoidgetMark(List<
marksIn)throwsInputMismatchException
ScannerkeyBoard=newScanner(System.in);
markIn=keyBoard.nextDouble();
if(markIn>
{
System.err.println("
分数值为0-100"
}
else
marksIn.add(markIn);
marksIn.remove(marksIn.size()-1);
publicstaticvoidjudgeMark(List<
marksIn)
doublemax=marksIn.get(0),min=marksIn.get(0),avg=0;
intnumber_A=0,number_B=0,number_C=0,number_D=0,number_Fail=0,num=0;
num=marksIn.size();
marksIn)
avg+=item/num;
number_A++;
number_B++;
number_C++;
number_D++;
number_Fail++;
//当分数大于100时,输出此信息
//default:
总人数:
+num+"
平均分:
+avg+"
+number_A+"
占总分数的"
+number_A*100.0/num+"
%"
+number_B+"
+number_B*100.0/num+"
+number_C+"
+number_C*100.0/num+"
+number_D+"
+number_D*100.0/num+"
+number_Fail+"
+number_Fail*100.0/num+"
1)当输入错误时,给出提示如下:
2)当输入分数大于100时给出提示如下:
3)正常输入后结果如下:
教师签字__________
第三部分结果与讨论(可加页)
一、实验结果分析(包括数据处理、影响因素讨论、综合分析和结论等)
试验中使用ArrayList集合解决了考试人数不确定问题,最后也可以很方便的通过.size()方法的出考试人数,同时,在本次实验中是使用do{}while()来实现重复输入,其实也可以使用for循环实现此功能,在遍历集合求最大值、最小值、平均值、个分数级别的人数等等功能的时候,也可以使用增强的for循环来实现遍历,因为试验中不需要更改集合中的数值。
此外,实验中在对最大值(max)和最小值(min)赋初值时一开始使他们的初值为0,但后来调试中发现得出的最小值始终未0,所以应当使他们的初始值为集合marks中的第一个值,这样才能得出正确的结果。
二、小结、建议及体会
程序中代码比较长的时候,通常将为将不同的功能实现写成不同的方法,最后只需要在main()方法中调用即可,这样不仅大大增强了程序的可读性,并且通过模块化也能减少出错的概率,是调理更加清晰。
此外,实验中对输入错误的处理还不够成熟,每当用户输入错误时能够提示用户输入错误,但提示完后,用户需要从头进行输入,这不是很好的用户体验,应再对程序进行改进,每次用户输入错误或者误操作,只需要重新输入当前的数值即可,无需重来来过。