zoukankan      html  css  js  c++  java
  • 《Java技术》第一次作业

    (一)学习总结
    1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。

    Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
    Scanner 的头文件为import java.util.Scannner,之后再次声明 Scanne r即可调用。需要注意的是在用Scanner输入的时候要保持前后一致,
    如:Scanner in=new Scanner(System.in)和year = in.nextInt(),Scanner后为in,则用in.nextInt,而且字符串类型遇到空格或者回车时会结束输入。

    代码举例:

    import java.util.Scanner;

    public class square {

    public static void main(String[] args) {
    	// TODO 自动生成的方法存根
    	int i;
    	Scanner in = new Scanner (System.in);
    	System.out.println("请输入一个数字");
    	int x = in.nextInt();
    	for(i=1;i<=x;i++){
    		System.out.println(i+"*"+i+"="+(i*i));
    	}
    }
    

    }

    2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。

    Random类的随机方法是设定随机种子的,(如:new Random().nextInt(10)),这里的10就是随机种子,根据随机数的原理,相同随机种子在相同的随机次数中产生的随机数是一样的;
    Math类的随机方法是返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。

    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”
    造成此类问题是因为在Java中使用分数和指数来表示浮点类型的数据时,在加减的过程中,产生了浮点型误差,解决此类问题的方法可调用BigDecimal方法。
    改正方法如下:

    package test;
    import java.math.BigDecimal;
    import java.math.MathContext;
    @SuppressWarnings("unused")
    public class Test {
    public static void main(String args[]) {
    BigDecimal a = new BigDecimal(0.3);
    BigDecimal b = new BigDecimal("0.3");
    System.out.println(a);
    System.out.println(b);
    }

    }
    

    4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,
    对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。

    1)注意定义时变量的类型,确保精度和变量范围足够
    2)注意使用Scanner时in或input的匹配

    实验内容:

    1.看商品猜价格

    程序设计思路:首先系统生成一个随机数,然后提示用户输入猜的数字,根据输入的数字,系统会给出提示“猜大了”或者“猜小了”,用户可以继续输入至猜对或者用完
    次数,无论哪种情况,系统均会给出正确答案,并提示输入了几次。

    问题1:无法产生随机数
    原因: 未在开始进行定义
    解决方案:在项目开头添加对随机数的定义

    问题2:无法进行输入
    原因: 用Scanner进行输入时,上下使用的关键字不匹配
    解决方案:同时使用in输入或同时使用inpt输入

    代码:
    package caijiage;

    import java.util.Random;
    import java.util.Scanner;

    public class caijiage {

    public static void main(String[] args) {
    
    	@SuppressWarnings({ "resource" })
    	Scanner in=new Scanner(System.in);
           Random rand=new Random();
           int answer;
           int count=0;
           int result = rand.nextInt(100);
           @SuppressWarnings("unused")
    	String str = null;
           while(count<10){   
        	   System.out.println("请输入你猜的价格:");  
        	   answer = in.nextInt();
        	   if(answer<result){
        		   System.out.println("猜小了,继续输入");
        		   count++;
        	   }
        	   else if(answer>result){
        		   System.out.println("猜大了,继续输入");
        		   count++;
        	   }
        	   else{
        		   count++;
        		   break;
        	   }
           }
           System.out.println("这个数字是"+result);
           System.out.println("你猜的次数是"+count);
    
    }
    

    }

    2.万年历

    程序设计思路:用户输入年份和月份,系统对其进行判断,判断是否为闰年,之后判断月份,闰年时2月为29天,平年为28天;
    之后计算天数的时候要确定输入月份与上一年12月相距的天数。

    import java.util.Scanner;

    public class NewWannianli {

    public static void main(String[] args) {
    	@SuppressWarnings("resource")
    	Scanner in=new Scanner(System.in);
    	@SuppressWarnings("unused")
    	int year,mouth,i;
    	System.out.print("请输入一个年份:");
    	year = in.nextInt();
    	isLeap(year);
    	System.out.print("请输入一个年份和月份:");
    	year = in.nextInt();
    	int month = in.nextInt();
    	days(year,month);
    	System.out.println(year+"年"+month+"月有"+days(year,month)+"天");
    	System.out.println(year+"年"+month+"月距离1900年1月1日有"+totalDays(year,month)+"天");
    	printCalender(year,month);
    }
    //判断闰年的方法
    public static boolean isLeap(int year){
    	if(year%4==0&&year%100!=0||year%400==0){
    		System.out.println(year+"是闰年");
    		return true;
    	}
    	else{
    		System.out.println(year+"是平年");
    		return false;
    	}
    }
    //判断某年某月有多少天的方法
    public static int days(int year, int month){
    	int day=0;
    	switch(month){
    		case 1:  
    		case 3:  
    		case 5:  
    		case 7:  
    		case 8:  
    		case 10:  
    		case 12:  
    			day = 31;  
    			break;  
    		case 4:  
    		case 6:  
    		case 9:  
    		case 11:  
    			day = 30;  
            break; 
    		case 2:
    			if(year%4==0&&year%100!=0||year%400==0){
    				day = 29;
    			}
    			else{
    				day = 28;
    			}
    	}
    	return day;
    }
    
    
    //计算某年某月之前距离1900年1月1日的总天数的方法
    public static int totalDays(int year, int month){
    	int i,j,sum=0,sum1=0,sum2=0;
    	for(i=1900;i<year;i++){
    		if(i%4==0&&i%100!=0||i%400==0){
    			sum1+=366;
    		}
    		else{
    			sum1+=365;
    		}
    	}
    	for(j=1;j<month;j++){
    		if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
    			sum2+= 31;  
    		else if(j==4||j==6||j==9||j==11)
    			sum2+= 30;  
    		else{
    			if(year%4==0&&year%100!=0||year%400==0){
    				sum2+= 29;
    			}
    			else{
    				sum2+= 28;
    			}
    		}
    	}
        sum = sum1 + sum2;
        return sum;
    }
    
    
    
    //输出某年某月日历的方法的方法
    public static void printCalender(int year, int month){	
    	int totalDays = totalDays(year, month);// 月之前
        int MonthDays = days(year,month);// 月的天数
        int sum3 = MonthDays;
        System.out.println("星期一 	星期二	星期三	星期四	星期五	星期六	星期日");
        int day = totalDays % 7;// System.out.print(""+a);
        if (day==7)
            day=0;
        for (int m=1;m<=day;m++)
            System.out.print("	");
        int flag = day;
        for (int i=1;i<=sum3;i++) {
    
            if (flag%7==0 && flag!=0)
                System.out.println("");
            flag++;
            System.out.print(i + "	");
        }
    }
    

    }

    问题:无法打印出每个月的日历
    原因: 未在主类中调用打印函数
    解决方案:在主类中添加输出,调用“打印”函数

    3.评分系统

    程序设计思路:因为选手和评委均为多位,所以应该设计一个二维数组来存放每位评委对每个选手的评分。

    import java.util.Arrays;
    import java.util.Scanner;
    public class Pingfen {

    public static void main(String[] args) {
    	@SuppressWarnings("resource")
    	Scanner input = new Scanner(System.in);
    	int i,j,sum=0;
    	float ave;
    	int score[][] = new int [5][10];
    	for(i=0;i<5;i++){
    		for(j=0;j<10;j++){
    			if(j==0){
    				System.out.println("请输入选手成绩:");
    			}
    			score[i][j] = input.nextInt();
    		}
    		Arrays.sort(score[i]);
    	}
    	for(i=0;i<5;i++){
    		System.out.println("第"+(i+1)+"选手成绩为:");
    		for(j=8;j>0;j--){
    			sum+=score[i][j];
    			System.out.print(score[i][j]+" ");
    			if(j==1)
    			System.out.print('
    ');	
    		}
    		ave=(float)sum/8;
    		System.out.println("该选手最低成绩为"+score[i][0]);
    		System.out.println("该选手最高成绩为"+score[i][9]);
    		System.out.println("该选手平均成绩为"+ave);
    		sum=0;
    	}
    }
    

    }

    问题1:当每位选手的评分均相同时,输出的平均分却递增
    原因: 求平均分的时候,上一次的和未清零,被加到了本次成绩中
    解决方案:每次平均分之后重新给分数和赋值

    (三)代码托管
    码云提交历史截图
    上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。

  • 相关阅读:
    orm 锁 和 事务
    多表查询
    django 单表查询
    djgango装饰器
    几个SQL命令的使用
    怎么成为优秀的软件模型设计者?
    jbpm 工作流(二)
    Jbpm工作流(一)
    EJB 介绍
    JNDI 使用
  • 原文地址:https://www.cnblogs.com/wei530/p/8595970.html
Copyright © 2011-2022 走看看