(一)学习总结:
1.Scanner类实现基本数据输入的方法是什么?
java程序运行从键盘输入需要用到Scanne类,用Scanner类需要在程序的开头表明头文件java.util.Scanner
Scanner类输入文字遇到空格和或回车会结束输入。nextLine()可以输入包括空格。

package java1;
import java.util.Scanner;
public class Java1 {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		int input = in.nextInt();                                    //输入
		System.out.println("您输入的是:"+input);
	}
}

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math.random() //返回的数是0到1之间的小数
(int)(Math.random()*10) //如果要产生1到10之间,则需要扩大10倍;如果要输出正数需要强制转化

Random.in = new Random(); // Random类产生的随机数,在范围内按照概率均匀分布每次生成数的概率相同

3.3.运行下列程序,结果是什么?
结果如下图:

由图可知,结果与3很接近但是不等于3,double型只会保留16位,计算机在执行是会损失精度

(二)实验总结
实验内容:
1.看商品猜价格

package 猜价格;
import java.util.Scanner;

import java.util.Random;
public class CaiJia {
	public static void main(String args[]) {
	Scanner scan = new Scanner(System.in);
	System.out.println("输入竞猜的价格:");
	int price = scan.nextInt();
//	System.out.println("竞猜的价格是"+price);
	Random rand = new Random();
	int a,number=1;
	a = rand.nextInt(100);
//	System.out.println("商品的价格是:"+a);
	while(number<11)
	{
		if(price==a)
		{
			System.out.println("恭喜您第"+number+"次猜中了");break;
		}
		else
		{
			if(a>price)
			{
				System.out.println("您猜小了");
			}
			else if(a<price)
			{
				System.out.println("您猜大了");
			}
			if(number==10)
			{
				System.out.println("商品的价格是"+a);
			}
		}
		price = scan.nextInt();
		number++;
	}
}
}

程序设计思路:
1:利用随机函数生成一个随机数
2:让用户从键盘输入所猜的价格
3:用while循环判断用户输入的是否与随机数一样
问题:
1:随机数不能正常使用
原因:在头文件加上import java.util.Random;

2.万年历

package 万年历;
import java.util.Scanner;


public class WanNianLi {
	
	//判断平年还是闰年
	public static void panRunNian(int year){
			if(year%4==0&&year%100!=0||year%400==0) {
				System.out.println(year+"年是闰年");
			}
			else {
				System.out.println(year+"年是平年");
			}		
	}
//判断距离1900年1月1号的天数
	public static int panTianShu(int year,int month){
		int years,day,days=0,mday = 0,months;
		for(years=1900;years<year;years++) {
			if(years%4==0&&years%100!=0||years%400==0) {
				day=366;
			}
			else {
				day=365;
			}
			days=day+days;
		}
		

		days=panYueTian(year,month,days);
		days=days+1;

//		System.out.println(year+"年"+month+"月有"+mday+"天");
		System.out.println(year+"距离1900年1月1日"+(days-1)+"天");
		return days;
	}
		//判断每个月的天数
	public static int panYueTian(int year,int month,int days) {
		int mday = 0,months;
		for(months=1;months<month;months++) {
			if(months==1||months==3||months==5||months==7||months==8||months==10||months==12) {
				mday=31;
			}
			if(months==4||months==6||months==9||months==11) {
				mday=30;
			}
			if(months==2) {
				if(year%4==0&&year%100!=0||year%400==0) {
					mday=29;
				}
				else {
					mday=28;
				}
			}
			days=days+mday;
		}
		return days;
	}

//输出万年历方法
	public static void print(int year,int month,int week) {
		int x = 0,mday = 0,number;
		
		System.out.println("      ==========="+year+"年===========");
		System.out.println("                    "+month+"月   ");
		System.out.println("星期日   星期一    星期二    星期三    星期四   星期五  星期六");
		System.out.println("==================================================");
		switch (week%7) {
		case 0:System.out.print("");break;
		case 1:System.out.print("\t");break;
		case 2:System.out.print("\t\t");break;
		case 3:System.out.print("\t\t\t");break;
		case 4:System.out.print("\t\t\t\t");break;
		case 5:System.out.print("\t\t\t\t\t");break;
		case 6:x=0;break;
		}
		if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) {
			mday=31;
		}
		if(month==2) {
			if(year%4==0&&year%100!=0||year%400==0) {
				mday=29;
			}
			else {
				mday=28;
			}
		}
		x=week;
		for(number=1;number<=mday;number++) {
			x++;
			System.out.print(number+"\t");
			if(x%7==0) {
				System.out.println();
			}
		}
	}
	//主方法调用
	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		int days=0,week;
		Scanner in1 = new Scanner(System.in);
		Scanner in2 = new Scanner(System.in);
		System.out.println("请输入年和月用回车隔开:");
		int year = in1.nextInt();
		int month = in2.nextInt();
		
		panRunNian(year);
		days=panTianShu(year,month);
		week=days%7;
//		System.out.println(days);
//	System.out.print(week);
		print(year, month, week);
		
		
	}

}

设计思路
1:设计函数判断平年还是闰年
2:设计函数每个月的天数
3:计算出所输入年份距离1900年1月1日的天数
4:用天数跟7求余,计算出是周几

问题:
1:天数跟7求余总是少一天
解决:求周几时将总天数加1或者求余之后再加1;
3.评分系统

package 评分系统;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class PingFen {

	private static final int[] PingFen = null;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("***评分系统***");
		int score[][] = new int[10][5];
		int i,j;
		int max[] = new int[5];
		int min[] = new int[5];
		int pingjun[] = new int [10];
		Random rand = new Random();
		Scanner input = new Scanner(System.in);
		System.out.println("请为各位选手评分");
		for(i=0;i<10;i++) {
			System.out.println("请各位评委对第"+(i+1)+"位选手进行评分:");
			for(j=0;j<5;j++) {
				score[i][j]=rand.nextInt(11);
				System.out.println("请第"+(j+1)+"位评委评分:"+score[i][j]);
				
			}
		}
		max = zuiDa(score);
		min = zuiXiao(score);
		pingjun = pingJun(score,max,min);
		Arrays.sort(pingjun);
		for(i=0;i<10;i++){		
				System.out.println("第"+(i+1)+"位选手的最大评分为:"+max[i]);
				System.out.println("第"+(i+1)+"位选手的最小评分为:"+min[i]);
				System.out.println("第"+(i+1)+"位选手的最终评分为:"+pingjun[i]);
		}
		for(i=0;i<5;i++) {
			System.out.println("第"+(i+1)+"名:"+pingjun[i]);
		}
		
	}
	public static int[] zuiDa(int a[][]){
		int i,j;
		int max[]={0,0,0,0,0,0,0,0,0,0};
		for(i=0;i<10;i++){
			for(j=0;j<5;j++){
				if(a[i][j]>max[i]){
					max[i]=a[i][j];
				}
			}
		}
		return max;
		
	}
	public static int[] zuiXiao(int a[][]){
		int i,j;
		int min[]={10,10,10,10,10,10,10,10,10,10};
		for(i=0;i<10;i++){
			for(j=0;j<5;j++){
				if(a[i][j]<min[i]){
					min[i]=a[i][j];
				}
			}
		}
		return min;		
	}
	public static int[] pingJun(int a[][],int max[],int min[]){
		int sum=0,i,j;
		int pingjun[]=new int[10];
		for(i=0;i<10;i++){
			for(j=0;j<5;j++){
				sum=a[i][j]+sum;
			}
			sum=sum-min[i]-max[i];
			pingjun[i]=sum/3;
			sum=0;
		}
		return pingjun;
	}
}

设计思路:
1:定义一个二维数组里面存放5位评委给10位选手的评分
2:定义3个一维数组分别存放10位选手的最大值最小值和平均值
3:利用 Arrays.sort(pingjun);函数对平均分进行排序
问题:
1:利用 Arrays.sort(pingjun);函数排序时总是从小排序
解决:将排序后的结果倒叙输出

posted on 2018-03-17 13:09  计科myf  阅读(142)  评论(0编辑  收藏  举报