#《Java技术》第一次作业

时间:2021-08-13 16:21:33

(一)学习总结

1:Scanner类实现基本数据输入的方法是什么?
构造Scanner对象,并与System.in连用。
Scanner input=new Scanner(System.in);
调用Scanner的各种方法完成输入操作。
int num=input.nextlnt();
2:区别:
Math类的random()方法可以生成大于等于0.0、小于1.0的double型随机数。
Random类的随机方法是设定随机种子的(如:new Random().nextInt(10))。
特点:
Math类的random():直接调用Random类中的nextDouble方法实现的,比较方便。
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");
        }
    }     
}

为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
输出结果是不等于0.3,有误差。
4:第一题的扩展用的到了String类的equal方法不会,所以没有写第一题的扩展。

(二)实验总结

一.猜数游戏

import java.util.Random;
import java.util.Scanner;
public class Guess {

public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    Random rand=new Random();
    System.out.println("只能猜10次哦");
    int in=rand.nextInt(100);
    
    int i=0;
    for(i=0;i<10;i++){
        int num=input.nextInt();
        if(num==in){
            System.out.println("猜对了");
            System.out.println("商品的价格为:"+in);
        }
        else if(num<in){
                System.out.println("猜小了");
            }
        else{
                System.out.println("猜大了");
            }
        }
    System.out.println("商品的价格为:"+in);
}

}

-程序设计思路:用Scanner实现用户的输入,通过与用Random产生的随机数比较,来判断猜测的是否对
-实验问题分析:
问题1:输出的时候明明显示猜对了,却发现输出的值比以前输得数结果显示猜小了了的值还小。
原因:输出的是用户输入的值。
解决方案:改成接收产生随机数那个变量。
二万年历
import java.util.Scanner;
public class year {

public static void main(String[] args) {
    System.out.println("请输入年份");
    Scanner input=new Scanner(System.in);
    int year=input.nextInt();
    if(isLeap(year)==true){
        System.out.println("是闰年");
    }
    else{
        System.out.println("不是闰年");
    }
    System.out.println("请输入月份");
    Scanner in=new Scanner(System.in);
    int month=in.nextInt();
    printCalender(year,month);
    
}
public static boolean isLeap(int year){
    if((year%4==0&&year%100!=0)||year%400==0){
        return true;
        }
    else{
        return false;
    }
}
public static int days(int year,int month){
    int day,g = 0;
    boolean a;
    a=isLeap(year);
    if(a==true){
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
        day=31;
    }
    else if(month==4||month==6||month==9||month==11){
        day=30;
    }
    else{
        day=29;
    }
}
    else{
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
            day=31;
        }
        else if(month==4||month==6||month==9||month==11){
            day=30;
        }
        else{
            day=28;
        }
    }
    return day;

}
public static int totaDays(int year,int month){
int sum1=0,sum2=0,sum,g;
for(int i=1900;i<year;i++){
if(isLeap(i)){
sum1+=366;
}
else
{
sum1+=365;
}
}

    for(g=1;g<month;g++){
        sum2+=days(year,g);
    }
    sum=sum1+sum2;
    return sum;
}
public static void printCalender(int year,int month){
    int day,a,b,c,d;
    a=days(year,month);
    d=totaDays(year,month);
    System.out.println("距1900年1月1日天数为:"+d);
    System.out.println("这个月天数为:"+a);
    c=(1+d%7);
    System.out.println("月初是星期:"+c);
    System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
    for(b=1;b<c;b++) {
        System.out.printf("\t");
       }
    for(int i=1;i<=a;i++){
            System.out.printf(" %2d\t",i);
            if((i+c-1)%7==0){      
                System.out.printf("\n");
            }
        }



}

}
-程序设计思路:用到了闰年的计算方法,还有怎样计算月初是星期几,函数的调用。
-实验问题分析:
问题1:计算到1900年1月1日的天数总是不对,老是多好多天。
原因:public static int totaDays(int year,int month)再用这个函数时,在月数相加时,循环变量从0开始。
解决方案:自己找了好久都没发现,同学帮忙改的。
问题2:月份输出格式不对
原因:换行语句不对。
解决方案:在调用public static int totaDays(year,month)这个函数计算月初是周几时,加了一个1,需要把这个1减去。
三评分
import java.util.Arrays;
public class average {

public static void main(String[] args) {
    int score[][]={
            {
                1,8,9,8,6,7,3,7,6,10
            },
            {
                4,3,7,9,5,9,1,9,8,3
            },
            {
                9,1,3,4,5,6,8,9,7,2
            },
            {
                7,9,6,7,8,1,3,4,10,2
            },
            {
                7,9,2,7,6,7,9,5,10,1
            }
        };
        ave(score);
}
    public static int getMax(int score[][]) {
    int max=score[0][0];
    for(int i=0;i<score.length;i++) {
        for(int j=0;j<score[i].length;j++) {
            if(score[i][j]>max) {
                max=score[i][j];
            }
        }
    }
    return max;
}
    public static int getMin(int score[][]) {
        int min=score[0][0];
        for(int i=0;i<score.length;i++) {
            for(int j=0;j<score[i].length;j++) {
                if(score[i][j]<min) {
                    min=score[i][j];
                }
            }
        }
        return min;
    }
    public static void ave(int score[][]){
        int b,c,sum=0;
        double a[];
        a=new double[score.length];
        b=getMax(score);
        c=getMin(score);
        double ave;
        for(int i=0;i<score.length;i++) {
            sum=0;
            for(int j=0;j<score[i].length;j++) {
                sum+=score[i][j];
            }
            sum=sum-b-c;
            ave=(double)sum/(score[i].length-2);
            a[i] =ave;
        }
        Arrays.sort(a);
        for (int i=score.length-1;i>=0;i--) {
        System.out.println("第"+(score.length-i)+"位选手的得分为:"+a[i]);
        }

    }

}
-程序设计思路:用二维数组完成静态赋值,然后在子函数中找到最大值最小值,在计算平均分的时候调用,将平均分放到一维数组中,用Arrays.sort(a)进行排列。
-实验问题分析:
问题1:计算结果不对。
原因:二维数组没有定义大小,求平均分的时候除以的8,。
解决方案:求平均分时应该除以(score[i].length-2)。

(三)代码托管

#《Java技术》第一次作业