#《Java技术》第一次作业

(一)学习总结

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("星期一	星期二	星期三	星期四	星期五	星期六	星期日");
	for(b=1;b<c;b++) {
		System.out.printf("	");
	   }
	for(int i=1;i<=a;i++){
			System.out.printf(" %2d	",i);
			if((i+c-1)%7==0){      
				System.out.printf("
");
			}
		}


			
}

}
-程序设计思路:用到了闰年的计算方法,还有怎样计算月初是星期几,函数的调用。
-实验问题分析:
问题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)。

(三)代码托管

原文地址:https://www.cnblogs.com/1998li/p/8593002.html