Java 第一次作业

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

import java.util.Scanner;  
public class ScannerDemo1 {  
public static void main(String[] args) {  
Scanner scan = new Scanner(System.in); 
System.out.print("输入数据:");  
 String str = scan.next();  
System.out.println("输入的数据为:"+str);  
}  

}

Scanner 的头文件为import java.util.Scannner,之后再用Scanner声明,就可以调用了。最简单的数据输入直接使用Scanner类的next()方法。
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math类的random()函数返回的值大于等于0.0小于1.0,
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“
原因为在Java中浮点数的计算会出现精度丢失的问题
改正之后

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<1e-6)
        {
        System.out.println("等于0.3");
    }else {
        System.out.println("不等于0.3");
    }
}     

}

(二)实验总结
1.看商品猜价格
利用Random产生随机数,用for循环控制一共可以猜的次数,循环内竞猜价格与随机数进行比较大小,进行输出。

package test;
import java.util.Scanner;
import java.util.Random;
public class yi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	   Random rand = new Random();
	int price_unkown;
	int max = 100;
    	int min = 1;
	int i,a,flag=0;
	a=rand.nextInt(100);
	System.out.println("商品价格");
	
	for(i=1;i<=10;i++){
		System.out.print("输入竞猜的价格");
		Scanner in = new Scanner(System.in);
		price_unkown = in.nextInt();
		flag++;
		if(price_unkown == a){
			System.out.println("猜对了");
			System.out.println("猜测的次数"+flag);
			System.out.println("商品价格"+a);
			break;
		}
		else if(price_unkown < a){
    		System.out.println("猜小了");
		}
	    else if(price_unkown > a){
	    System.out.println("猜大了");
	}
		
}System.out.println("商品价格为"+a);
}

   }

2.万年历

package test;
import java.util.Scanner;
public class yi {    
static boolean isleap(int year){ //判断闰年  
if(year%400==0 || (year%4==0 && year%100!=0)){ //是闰年  
    return true;   
}  
  
else{  
    return false;  
}  
}  
    static final int N = 1900; //用N表示起始年份 

public static void main(String[] args) {
	// TODO Auto-generated method stub
	 int n = 1;//1900年1月1日 是星期一  
        int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用来存储月份的天数  
        int year[] = new int[1001];  //用来存储每年1月1日是星期几  
        year[0] = n;  
        for(int i=1;i<year.length;i++){  
            int days = 365;  
            if(isleap(i+N-1)){//如果它的前一年是闰年则需要加366  
                days = 366;  
                year[i] = (year[i-1] + days)%7;  
            }  
            else{  
                year[i] = (year[i-1] + days)%7;  
            }  
        }   
        int Month ,Year;  
        Scanner in = new Scanner(System.in);  
        System.out.println("请输入年份在(1900~2900之间):");  
        Year = in.nextInt();  
        if(Year>2900 || Year<1900){  
            System.out.println("输入年份不合法,请重新输入!");  
            return;  
        }  
        //System.out.println(year[Year-1970]);  
        System.out.println("请输入月份(1~12之间):");  
        Month = in.nextInt();  
        if(Month>12 || Month<1){  
            System.out.println("输入月份不合法,请重新输入!");  
            return;  
        }  
        System.out.println("星期日" +"星期一 "+"星期二"+"星期三"+"星期四"+"星期五"+"星期六");  
        System.out.println();  
        if(isleap(Year)){ //如果是闰年,2月改为29号  
            month[2] = 29;  
        }  
        int day=0; //用来记录当前月的一号是今年的第几天  
        for(int i=1;i<Month;i++){  
            day = day + month[i];  
        }  
          
        day = (year[Year-N]+day)%7;  
        for(int i=0;i<7;i++){//输出控制  
            if(day == i){  
                System.out.print("  " + 1 + "   ");  
                if(day == 6){  
                    System.out.println();  
                }  
                break;  
            }  
            else{  
                System.out.print("      ");  
            }  
        }  
        for(int i=2;i<=month[Month];i++){  
            if(i<10){  
                System.out.print("  " + i + "   ");  
            }  
            else{  
                System.out.print(" " + i + "   ");  
            }  
            if((day+i-1)%7 == 6){  
                System.out.println();  
            }  
        }  
    }  
}  

3.评分系统

package ww;
import java.util.Scanner;
public class w {

	private static int grades[];

public static void main(String[] args) {
	grades = new int [5];
	for(int x=0;x<5;x++) {
	double[] scores = new double[10];
    Scanner input = new Scanner(System.in);//扫描器用于读取控制台输入
    for (int i = 0; i < scores.length; i++) {//输入分数
        System.out.print("请输入第" + (i + 1) + "位评委的分数,满分十10分");
        String temp = input.nextLine().trim();
        scores[i] = Double.parseDouble(temp);
            }
    getScore(scores);//对分数进行处理的函数
	}
}

private static void getScore(double[] scores) {
    //对分数进行排序
    double temp;
    for (int i = 0; i < scores.length - 1; i++) {
        for (int j = i + 1; j < scores.length; j++) {
            if (scores[i] > scores[j]) {
                temp = scores[i];
                scores[i] = scores[j];
                scores[j] = temp;
            }
        }
    }
    //去掉一个高分,一个低分后的平均分
    double sum =0;
    for (int i = 1; i < scores.length-1; i++) {
        sum+=scores[i];
    }
    double pjf = sum/(scores.length-2);
    System.out.println("去掉一个最高分:"+scores[scores.length-1]);
    System.out.println("去掉一个最低分:"+scores[0]);
    System.out.println("最后的平均分是:"+String.format("%.2f",pjf));//平均分保留2位小数
}
}
posted @ 2018-03-18 22:50  慕容紫落  阅读(118)  评论(0编辑  收藏  举报