(一)学习总结:
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(" ");break;
case 2:System.out.print(" ");break;
case 3:System.out.print(" ");break;
case 4:System.out.print(" ");break;
case 5:System.out.print(" ");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+" ");
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);函数排序时总是从小排序
解决:将排序后的结果倒叙输出