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:数组的定义范围
原因:有的数组定义在一个循环中,但是其他的地方还用到了,但是由于作用范围,出现了错误
解决方案:在主函数中定义
对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。

(三)代码托管

原文地址:https://www.cnblogs.com/1997zjx/p/8594442.html