《Java技术》第一次作业

时间:2021-08-10 16:21:46

(一)学习总结

1.Scanner类数据的使用方法
程序头加上import java.util.Scanner;程序中Scanner in = new Scanner(System.in);
使用输入数据时用 数据类型 类名 = 类名.next数据类型(); 如输入整型数据: int x= x.nextInt();
每种数据类型都有对应的输入方法,但是char类型没有,可以用string型替代,但是string类型与其他类型不同,如果要输入一个包含空格的字符串,
就用nextLine();如String x=in.nextLine();

import java.util.Scanner;
public class Wannianli {

private static final String pubilc = null;

public static void main(String args[]) {
    // TODO Auto-generated constructor stub
    Wannianli Wan=new Wannianli();
    int year,month,i,k,n,sum,j=0,a,b;
    System.out.println("请输入年份:(>=1900)");
    Scanner input=new Scanner(System.in);
    year=input.nextInt();
    System.out.println("请输入月份:(1-12)");
    month=input.nextInt();
}}

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math.random()返回的只是从0到1之间的小数,如果要10到30,就先放大10倍,即0到10之间,这里还是小数,如果要整数,就强制转换int,然后再加上20即为10~30.
如:(int)(Math.random()*10) + 20
而 Random类产生的随机数,在其最大值范围内,按照概率均匀分布的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
如产生一个在10~30之间的整数

package java练习;
    public class X {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int x=(int)(Math.random()*20+10);
        System.out.println(x); 
    }
}


package java练习;
import java.util.Random;
public class S1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random rand = new Random(); 
        int x=rand.nextInt(20)+10; 
        System.out.println(x); 
    }
}

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".
修改:

package test;
import java.math.BigDecimal;
import java.math.MathContext;
public class test {
    public static void main(String args[]) { 
        double arr = 0.1,brr = 0.1,crr = 0.1;
        if((arr + brr + crr) -0.3>0){
            System.out.println("等于0.3");
        }
        else {
            System.out.println("不等于0.3");
        }
    }     
}

输出结果为:"等于0.3".

(二)实验总结

实验内容:

1.看商品猜价格

import java.util.Random;
import java.util.Scanner;
public class Guess2 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int price_guess=0 ;
    int max=100;
    int min=1;
    Random random=new Random();
    int price=random.nextInt(max)%(max-min+1)+min;
    for(int i=1,j=0;i<=10;i++){
        System.out.println("请输入猜测的商品价格:");
        Scanner input=new Scanner(System.in);
        price_guess=input.nextInt();
        if(price<price_guess&&j<=10)
        
    {System.out.println("猜大了"); j++;}
else if(price>price_guess&&j<=10)               {System.out.println("猜小了");
            j++;}
else if(price==price_guess&&j>10)
            {System.out.println("商品价格:"+price);}
else if(price==price_guess&&j<=10)
{System.out.println("商品价格:"+price);
System.out.println("猜了"+j+"次");}
}}}

结果
《Java技术》第一次作业

**程序设计思路:

首先根据Random函数产生随机数,再输入数据同随机数进行比较。
定义一个j用于记录猜测次数,再根据算法把最终得分计算出来。
使用for循环判断是否进入下一轮循环.

2.万年历

import java.util.Scanner;
public class Wannianli {

private static final String pubilc = null;

public static void main(String args[]) {
    // TODO Auto-generated constructor stub
    Wannianli Wan=new Wannianli();
    int year,month,i,k,n,sum,j=0,a,b;
    System.out.println("请输入年份:(>=1900)");
    Scanner input=new Scanner(System.in);
    year=input.nextInt();
    System.out.println("请输入月份:(1-12)");
    month=input.nextInt();
    System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
    sum=totalDays(year,month);
    n=(sum+1)%7;
    for(i=1;i<=n;i++);
    {System.out.println("\t");
    j++;}
    a=Days(year,month);
    for(k=1;k<=a;k++)
    {System.out.print(k+"\t");
    j++;
    if(j%7==0)
        System.out.println("\n");}
    }
    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 a[]= {31,28,31,30,31,30,31,31,30,31,30,31};
        if(isLeap(year))
            a[1]=29;
        
        return a[month-1];
    }
    public static int totalDays(int year,int month) {
        int i,j,day,totaldays=0;
        for(j=1;j<month;j++)
  {day=Days(year,j);
  totaldays=totaldays+day;}
        for(i=1900;i<year;i++)
        {if(isLeap(i)) totaldays=totaldays+366;
        else  totaldays=totaldays+365;
    
        }
        return totaldays;
    }
    
}

**程序设计思路:
.输入年份、月份, year%4==0&&year%100!=0||year%400==0 判断平年闰年,得出2月天数,把1900年到输入的年份总天数求出,再加上当年的月天数day, 控制输出格式每7天为一行打印出万年历。
问题:输出结果总是不对,但找不到自己的程序哪里有问题,希望得到大家帮助。

3.评分系统
思路:用数组存储评委打的分数, 利用循环找到最大值最小值,总分减去最大分最小分 ,求出平均值为最后得分,调用排序函数最后输出。

(三)玛云托管
《Java技术》第一次作业