#《Java技术》第一次作业

时间:2022-05-03 16:22:02

(一)学习总结

1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
需要导入java.util.Scanner,或者java.util.*(它是万能的)
整型就是nextInt(),双精度就是把Int换成Double,next()就是读取输入的下一个(空格分开);
特别注意字符串类型,没输入的方法;

import java.util.Scanner;
public class A {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num = input.nextInt();
System.out.println(num);
    }
}

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math.random()返回的只是从0.0到1.0之间的小数,如果要0到10,就先放大10倍,即0到10之间,这里还是小数,
如果要整数,就强制转换int,要是想要50到100之间,然后再加上50即为50~100.
最终代码:

import java.util.*;
public class A {
public static void main(String[] args) {
     int x=(int)(Math.random()*10+50);
     System.out.println(x); //57
    }
}

Random类产生的随机数,在其最大值范围内,按照概率均匀分布的。

import java.util.*;
public class A {
public static void main(String[] args) {
    Random rand = new Random(); 
    int x=rand.nextInt(50)+50; 
    System.out.println(x); //77
    }
}

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");
        }
    }     
}

正确的代码:

import java.math.BigDecimal;
public class A {
        public static void main(String args[]) { 
            double a = 0.1;
            double b = 0.1;
            double c = 0.1;
            if(MyMath.round(MyMath.add(a, b, c), 1) == 0.3){     
                System.out.println("等于0.3");
            }else {
                System.out.println("不等于0.3");
            }
        }     
    }
class MyMath{
    public static double add(double d1,double d2,double d3){  
        BigDecimal b1=new BigDecimal(d1);
        BigDecimal b2=new BigDecimal(d2);
        BigDecimal b3=new BigDecimal(d3);
        return b1.add(b2).add(b3).doubleValue();
    }
    public static double round(double d,int len) {
        BigDecimal b1=new BigDecimal(d);
        BigDecimal b2=new BigDecimal(1);
        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
 }

根据书上的那个程序改的 其实并不懂

(二)实验总结

1.看商品猜价格

import java.util.*;

public class Cai {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        Scanner str2 = new Scanner(System.in);
        String str = new String("yes");
        String str1 = new String("yes");
        Random rand = new Random();
        int a, b, c, sum = 0, d = 0, sum1 = 0;
        System.out.println("你有五次猜价格的机会,好好把握吧");
        while (str.equals(str1)) {
            d++;
            sum = 0;
            System.out.println("请输入价格");
            b = rand.nextInt(100);
            go: for (a = 0; a <5; a++) {
                System.out.println("你还有"+(5-a)+"次机会");
                c = in.nextInt();
                if (c > b) {
                    System.out.println("猜大了");
                }
                if (c < b) {
                    System.out.println("猜小了");
                }
                if (c == b) {
                    sum = 100 - a * 20;
                    System.out.println("猜对了你的得分是" + (100 - a * 20));
                    break go;
                }
            }
            if (a == 5)
                System.out.println("游戏结束你没有猜对数为" + b);
            sum1 = sum1 + sum;
            System.out.println("请确认是否还要继续是请输入yes否则no");
            str1 = str2.next();
        }
        System.out.println("你一共猜了" + d + "次你的总分是" + sum1);
    }
}

2.万年历

import java.util.*;

public class Wannianli {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("输入年份和月份,输出该月的日历,已知1900年1月1日是星期一");
        Scanner in = new Scanner(System.in);
        int year, mouth;
        year = in.nextInt();
        mouth = in.nextInt();
        printCalender(year, mouth);
    }

    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 mouth) {
        int a = 0;
        if (isLeap(year)) {
            if (mouth == 2) {
                a = 29;
            }
            if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
                a = 31;
            }
            if (mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11) {
                a = 30;
            }

        } else {
            if (mouth == 2) {
                a = 28;
            }
            if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
                a = 31;
            }
            if (mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11) {
                a = 30;

            }

        }
        return a;
    }

    public static int totalDays(int year, int mouth) {
        int sum = 0;
        for (int i = 1900; i < year; i++) {
            if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
                sum = sum + 366;
            else
                sum = sum + 365;
        }
        for (int m = 1; m < mouth; m++) {
            sum = sum + dayS(year, m);
        }
        return sum;
    }

    public static void printCalender(int year, int mouth) {
        int sum1 = totalDays(year, mouth);// 月之前
        int sum2 = dayS(year, mouth);// 月的天数
        int sum3 = sum2;
        System.out.println("共" + sum1+"天");
        System.out.println("这个月有" + sum2+"天");
        System.out.println("星期一 \t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
        int a = sum1 % 7;// System.out.print(""+a);
        if (a == 7)
            a = 0;
        for (int m = 1; m <= a; m++)
            System.out.print("\t");
        int flag = a;
        for (int i = 1; i <= sum3; i++) {

            if (flag % 7 == 0 && flag != 0)
                System.out.println("");
            flag++;
            System.out.print(i + "\t");
        }

    }
}

3.评分系统

import java.util.*;

public class Pingfen {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random rand = new Random();
        int max = 0, min = 0;
        int score[] = new int[10];
        double man[][] = new double[5][2];
        for (int i = 0; i < 5; i++) {
            
            for (int j = 0; j < score.length; j++) {     //对每一个人
                int in = rand.nextInt(10);
                score[j] = in;
            }
            max = max(score);
            // System.out.println("" + max);
            min = min(score);
            // System.out.println("" + min);
                System.out.print("第" + (i+1) + "人的评分是          ");
                for (int n = 0; n < score.length; n++) {

                    System.out.print("  " + score[n]);

                }
            System.out.println("");
            int flag = 0, flag1 = 0;
            for (int m = 0; m < score.length; m++) {
                if (max == score[m] && flag == 0) {
                    score[m] = 0;
                    flag = 1;
                }
                if (min == score[m] && flag1 == 0) {
                    score[m] = 0;
                    flag1 = 1;
                }
            }
            man[i][0] = avge(score);
            man[i][1] = i;
        }
        for (int j = 0; j < man.length - 1; j++)
            for (int i = 0; i < man.length - j - 1; i++) {
                if (man[i][0] > man[i + 1][0]) {
                    double m = man[i][0];
                    man[i][0] = man[i + 1][0];
                    man[i + 1][0] = m;
                    double n = man[i][1];
                    man[i][1] = man[i + 1][1];
                    man[i + 1][1] = n;
                }

            }
        for (int i = 0; i < man.length; i++) {
            System.out.printf("编号为%.0f 成绩为%.2f\n", man[i][1] + 1, man[i][0]);
        }
    }

    public static int max(int x[]) {
        int max1 = x[0];
        for (int i = 0; i < x.length; i++) {
            if (max1 <= x[i]) {
                max1 = x[i];
            }
        }
        return max1;
    }

    public static int min(int x[]) {
        int min1 = x[0];
        for (int i = 0; i < x.length; i++) {
            if (min1 >= x[i]) {
                min1 = x[i];
            }
        }
        return min1;
    }

    public static double avge(int x[]) {
        int sum = 0;
        for (int i = 0; i < x.length; i++) {
            sum += x[i];
        }
        double ave = (double) sum / 8.0;
        return ave;
    }

}

1.看商品猜价格

  • 程序设计思路:因为要猜好几次,所以要使用循环for循环就可以,拓展里要选择是否进行下一次游戏,所以使用do while
  • 实验问题分析:在使用equals时出错
    解决方法:上网查一个简单的使用equals的代码,看看他怎么使用的
    2.万年历
  • 程序设计思路:判断闰年就是用和4取余等于0并且和100取余不等于0或者和400取余等于0,判断每个月有多少天 特别注意二月,算距离1900.1.1有多少天的时候 首先算距离1900有多少年 乘以365 在算中间有多少个闰年 算该月距离该年的1月1日有多少天 相加就好
  • 实验问题分析:
    问题1:计算天数出错
    解决方法:在算月距离该年1月1日的循环中 传参的时候误把月份的那个 写成输入的那个固定月份 只需改成i就好
    问题2:输出格式很乱 每月1号总是对不齐
    解决方法:写那个循环输出空格的时候 若是星期4 则循环输出3次就好
    3.评分系统
  • 程序设计思路:自定义5个人得的分数,求最大值 定义一个数组存每一行的第一个数 让他和改行的数比较 那个数大 就把它赋值给存的那个 求最小值类似 求平均值 先求和 在除以8 方法写成double型的
  • 实验问题分析:输出数组的时候 会提示越界
    解决方法:在循环那 改成数组名.length 这样循环次数就不会出错了

    (三)代码托管

  • 码云提交历史截图
    #《Java技术》第一次作业
    #《Java技术》第一次作业
    #《Java技术》第一次作业