• Java第一次作业


    (一)学习总结

    1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
    基本数据的输入通过两个语句来实现,即:
    Scanner input=new Scanner(System.in);
    变量的类型 变量的名称=input.nexInt;

    import java.util.Scanner;
    public class Test {
    public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    System.out.println("请输入一个数值:");
    int length=input.nextInt();//输入一个正整数
    System.out.println("输入的数字是:"+length);}
    }
    

    2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
    Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
    最终代码:(int)(Math.random()*50) + 50
    Random类产生的随机数,在其最大值范围内,按照概率均匀分布的。也就是说,两个种子数相同的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");
            }
        }     
    }
    

    结果是不等于0.3
    因为a,b,c都是浮点型的数据,对于他们进行运算时会产生误差使最后的结果不是0.3,所以会输出“不等于0.3”
    为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。

    (二)实验总结

    实验内容:
    1.看商品猜价格

    package text1;
    import java.util.Random;
    import java.util.Scanner;
    public class text1 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
            System.out.println("请输入你猜的价格"+"
    "); 
            Random rand=new Random();
            int a=rand.nextInt(100);
        	int m=0;
            for(int i=0;i<10;i++)
            {
            	Scanner input=new Scanner(System.in);  
            	int price=input.nextInt();
            	if(a==price) 
            		m=1;
            	else if(a>price)
            		System.out.println("猜小了"+"
    ");
            	else
            		System.out.println("猜大了"+"
    ");
    	    }
            if(m==0)
                System.out.println("对不起,你输了"+"
    "+"正确价格为"+a+"
    ");
            else
            	System.out.println("答案正确"+"
    ");
    	}
    }
    

    
    package imprve;
    import java.util.Random;
    import java.util.Scanner;
    public class imprvetext1{
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
            System.out.println("请输入你猜的价格"+"
    "); 
            Random rand=new Random();
            int a=rand.nextInt(100);
        	int m=0;
        	int n=0;
            for(int i=0;i<10;i++)
            {
            	Scanner input=new Scanner(System.in);  
            	int price=input.nextInt();
            	if(a==price) {
            		m=1;
            		break;
            	}
            	else if(a>price)
            		System.out.println("猜小了"+"
    ");
            	else
            		System.out.println("猜大了"+"
    ");
            	n++;
    	    }
            if(m==0)
                System.out.println("对不起,你输了"+"
    "+"正确价格为"+a+"
    ");
            else
            	System.out.println("答案正确"+"
    "+"最后得分是"+(100-20*n));
    	}
    }
    
    

    程序设计思路:创建一个随机函数来生成正确价格,利用循环来实现有限次数的输入,并且对它进行判断,若正确跳出循环,否则,继续循环,用循环次数来统计,然后计算分数。
    问题1:头文件的声明
    原因:输入错误
    问题2:输入输出格式错诶
    解决方案:通过查找课本来修正
    2.万年历

    package text2;
    import java.util.Scanner;
    public class text2 {
    	public static void main(String[] args) {
            System.out.println("请输入要查询的年份和月份:"+"
    ");
    	Scanner input=new Scanner(System.in);  
        	int year=input.nextInt();
        	int month=input.nextInt();
        	printCalendar(year,month);   	
    	}
    	public static boolean isleap(int year){   //判断是否是闰年
    		if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    			return true;
    		return false;
    	}
    	public static int days(int year,int month){  //判断每个月的天数
    		int days;
    		switch(month){
    		     case 1:case 3:case 5:case 7:case 8:case 10:case 12:
    		    	 days=31;
    		    	 break;
    		     case 4:case 6:case 9:case 11:
    		    	 days=30;
    		    	 break;
    		     default:
    		    	 if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    		    		 days=29;
    		    	 else
    		    		 days=28;
    		}
    		return days;
    	}
    	public static int totaldays(int year,int month){  //计算总共的天数
    		int totaldays=0;
    		for (int i = 1900; i < year; i++) {  
                totaldays += isleap(i) ? 366 : 365;  
            }  
            // 2,整月的天数  
            for (int i = 1; i < month; i++) {  
                totaldays += days(year, i);  
            }  
    		return totaldays;
    	}
    	public static int xingqi(int totaldays){
    		int xingqi;
    		xingqi=1+totaldays+1;
    		return xingqi;
    	}
    	private static int getKongGeCount(int year, int month) {  
            int count = totaldays(year, month) % 7 + 1;  
            return count;  
        }  
      
    	private static void printCalendar(int year, int month) 
    	{   
            System.out.println("星期日	星期一	星期二	星期三	星期四	星期五	星期六");   
            int kongGe = getKongGeCount(year, month);   
            for (int i = 1; i <= kongGe; i++) {  
                System.out.print("	");  
            }   
            if (kongGe == 7) {  
                System.out.println();  
            }   
            for (int i = 1; i <= days(year, month); i++) {  
                System.out.print(i + "	");  
                if ((i + kongGe) % 7 == 0)  
                    System.out.println();   
            }
    	}
    }
    

    程序设计思路:通过定义函数来实现对相求年和月份刀1900年1月1日的总天数、每个月的天数、闰年平年的判断、星期几的判断,最后输出月份的信息
    问题1:总共的天数计算
    解决方案:利用循环来对每年,每月的天数进行判断并且进行相加
    3.评分系统

    package text3;
    import java.util.Scanner;
    import java.math.BigDecimal;
    public class text3 {
    	public static void main(String[] args) {
    		int grade[]=new int [10];
    		int sum[]=new int [5];
    		for(int i=0;i<5;i++) {          //输入评委的评分   
    			System.out.println("请输入第"+(i+1)+"位选手");
    			for(int j=0;j<10;j++){
    				System.out.println("第"+(j+1)+"位评委的评分,满分10分");
    				Scanner input=new Scanner(System.in);
    				int number=input.nextInt();
    				grade[j]=number;
    				sum[i]+=grade[j];
    			}
    		}
    		int max[]=new int [5];
    		for(int i=0;i<5;i++) {         //计算每位选手的最高分
    			max[i]=grade[0];
    			for(int j=0;j<10;j++) {
    			    if(grade[j]>=max[i])
    				max[i]=grade[j];
    			}
    		}
    		int min[]=new int [5];
    		for(int i=0;i<5;i++) {        //计算每位选手的最高分
    			for(int j=0;j<10;j++)     {
    				min[i]=grade[0];
    				if(grade[j]<=min[i])
    					min[i]=grade[j];
    			}
    		}
    		float ave[]=new float[5];
    		for(int i=0;i<5;i++){         //计算每位选手的平均分
    			sum[i]=sum[i]-max[i]-min[i];
    			ave[i]=(float) (sum[i]/8);
    		}
    		for(int i=0;i<5;i++) {		    
    			for(int j=i+1;j<2;j++) {
    				float temp;
    				if(ave[i]>ave[j]){
    					temp = ave[i];
    		            ave[i] = ave[j];
    		            ave[j] = temp;
    		        }
    		    }
    		}
    		for (int i = 0;i<5; i++) {
    			System.out.println(ave[i]);
    		} 
    	}
    }
    
    

    程序设计思路:通过定义一维数组来实现对于评委评分,每位学生的最高分、最低分的统计,然后在进行最后分数的计算
    问题1:数组的定义范围
    原因:有的数组定义在一个循环中,但是其他的地方还用到了,但是由于作用范围,出现了错误
    解决方案:在主函数中定义
    对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。

    (三)代码托管

  • 相关阅读:
    Openfire 调试信息
    ejabberd分析(三)启动流程
    Openfire 离线消息的处理机制
    OpenFire SSLSocketFactory 编译报错解决
    用消息队列和消息应用状态表来消除分布式事务
    XMPP文件传输过程
    ejabberd分析(一)
    erlang(1)
    Openfire 好友状态的发送(用户登录)
    ejabberd分析(二) 用户注册
  • 原文地址:https://www.cnblogs.com/1997zjx/p/8594442.html
Copyright © 2020-2023  润新知