(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
基本数据的输入通过两个语句来实现,即:
Scanner input=new Scanner(System.in);
变量的类型 变量的名称=input.nexInt;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个数值:");
int length=input.nextInt();//输入一个正整数
System.out.println("输入的数字是:"+length);}
}
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
最终代码:(int)(Math.random()*50) + 50
Random类产生的随机数,在其最大值范围内,按照概率均匀分布的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
3.运行下列程序,结果是什么?查阅资料,分析为什么。
public class Test {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
if((a + b + c) == 0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
结果是不等于0.3
因为a,b,c都是浮点型的数据,对于他们进行运算时会产生误差使最后的结果不是0.3,所以会输出“不等于0.3”
为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
(二)实验总结
实验内容:
1.看商品猜价格
package text1;
import java.util.Random;
import java.util.Scanner;
public class text1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入你猜的价格"+"
");
Random rand=new Random();
int a=rand.nextInt(100);
int m=0;
for(int i=0;i<10;i++)
{
Scanner input=new Scanner(System.in);
int price=input.nextInt();
if(a==price)
m=1;
else if(a>price)
System.out.println("猜小了"+"
");
else
System.out.println("猜大了"+"
");
}
if(m==0)
System.out.println("对不起,你输了"+"
"+"正确价格为"+a+"
");
else
System.out.println("答案正确"+"
");
}
}
package imprve;
import java.util.Random;
import java.util.Scanner;
public class imprvetext1{
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入你猜的价格"+"
");
Random rand=new Random();
int a=rand.nextInt(100);
int m=0;
int n=0;
for(int i=0;i<10;i++)
{
Scanner input=new Scanner(System.in);
int price=input.nextInt();
if(a==price) {
m=1;
break;
}
else if(a>price)
System.out.println("猜小了"+"
");
else
System.out.println("猜大了"+"
");
n++;
}
if(m==0)
System.out.println("对不起,你输了"+"
"+"正确价格为"+a+"
");
else
System.out.println("答案正确"+"
"+"最后得分是"+(100-20*n));
}
}
程序设计思路:创建一个随机函数来生成正确价格,利用循环来实现有限次数的输入,并且对它进行判断,若正确跳出循环,否则,继续循环,用循环次数来统计,然后计算分数。
问题1:头文件的声明
原因:输入错误
问题2:输入输出格式错诶
解决方案:通过查找课本来修正
2.万年历
package text2;
import java.util.Scanner;
public class text2 {
public static void main(String[] args) {
System.out.println("请输入要查询的年份和月份:"+"
");
Scanner input=new Scanner(System.in);
int year=input.nextInt();
int month=input.nextInt();
printCalendar(year,month);
}
public static boolean isleap(int year){ //判断是否是闰年
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return true;
return false;
}
public static int days(int year,int month){ //判断每个月的天数
int days;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days=31;
break;
case 4:case 6:case 9:case 11:
days=30;
break;
default:
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
days=29;
else
days=28;
}
return days;
}
public static int totaldays(int year,int month){ //计算总共的天数
int totaldays=0;
for (int i = 1900; i < year; i++) {
totaldays += isleap(i) ? 366 : 365;
}
// 2,整月的天数
for (int i = 1; i < month; i++) {
totaldays += days(year, i);
}
return totaldays;
}
public static int xingqi(int totaldays){
int xingqi;
xingqi=1+totaldays+1;
return xingqi;
}
private static int getKongGeCount(int year, int month) {
int count = totaldays(year, month) % 7 + 1;
return count;
}
private static void printCalendar(int year, int month)
{
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
int kongGe = getKongGeCount(year, month);
for (int i = 1; i <= kongGe; i++) {
System.out.print(" ");
}
if (kongGe == 7) {
System.out.println();
}
for (int i = 1; i <= days(year, month); i++) {
System.out.print(i + " ");
if ((i + kongGe) % 7 == 0)
System.out.println();
}
}
}
程序设计思路:通过定义函数来实现对相求年和月份刀1900年1月1日的总天数、每个月的天数、闰年平年的判断、星期几的判断,最后输出月份的信息
问题1:总共的天数计算
解决方案:利用循环来对每年,每月的天数进行判断并且进行相加
3.评分系统
package text3;
import java.util.Scanner;
import java.math.BigDecimal;
public class text3 {
public static void main(String[] args) {
int grade[]=new int [10];
int sum[]=new int [5];
for(int i=0;i<5;i++) { //输入评委的评分
System.out.println("请输入第"+(i+1)+"位选手");
for(int j=0;j<10;j++){
System.out.println("第"+(j+1)+"位评委的评分,满分10分");
Scanner input=new Scanner(System.in);
int number=input.nextInt();
grade[j]=number;
sum[i]+=grade[j];
}
}
int max[]=new int [5];
for(int i=0;i<5;i++) { //计算每位选手的最高分
max[i]=grade[0];
for(int j=0;j<10;j++) {
if(grade[j]>=max[i])
max[i]=grade[j];
}
}
int min[]=new int [5];
for(int i=0;i<5;i++) { //计算每位选手的最高分
for(int j=0;j<10;j++) {
min[i]=grade[0];
if(grade[j]<=min[i])
min[i]=grade[j];
}
}
float ave[]=new float[5];
for(int i=0;i<5;i++){ //计算每位选手的平均分
sum[i]=sum[i]-max[i]-min[i];
ave[i]=(float) (sum[i]/8);
}
for(int i=0;i<5;i++) {
for(int j=i+1;j<2;j++) {
float temp;
if(ave[i]>ave[j]){
temp = ave[i];
ave[i] = ave[j];
ave[j] = temp;
}
}
}
for (int i = 0;i<5; i++) {
System.out.println(ave[i]);
}
}
}
程序设计思路:通过定义一维数组来实现对于评委评分,每位学生的最高分、最低分的统计,然后在进行最后分数的计算
问题1:数组的定义范围
原因:有的数组定义在一个循环中,但是其他的地方还用到了,但是由于作用范围,出现了错误
解决方案:在主函数中定义
对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
(三)代码托管