Java基础习题练习

1、编写程序,判断给定的某个年份是否是闰年。

      闰年的判断规则如下:

      (1)若某个年份能被4整除但不能被100整除,则是闰年。

      (2)若某个年份能被400整除,则也是闰年。

/**
 * 1,编写程序,判断给定的某个年份是否是闰年。
 *       闰年的判断规则如下:
 *       (1)若某个年份能被4整除但不能被100整除,则是闰年。
 *       (2)若某个年份能被400整除,则也是闰年。
 */
package com.demo3;
import java.util.Scanner;

public class Practice1 {
    public static void main(String[] args){
        System.out.println("请输入年份");
        int year;   //定义输入的年份名字为“year”
        Scanner scanner = new Scanner(System.in);
        year = scanner.nextInt();
        if(year <0||year>3000){
            System.out.println("年份有误,程序退出!");
            System.exit(0);
        } else if ((year%4==0)&&(year%100!=0)||(year%400==0)) {
            System.out.println(year+" is bissextitle");
        }else {System.out.println(year+" is not bissextitle");}
    }

}

2、给定一个百分制的分数,输出相应的等级。

        90分以上        A级

        80~89          B级

        70~79          C级

        60~69          D级

        60分以下        E级

/**
 * 给定一个百分制的分数,输出相应的等级。
 *         90分以上        A级
 *         80~89          B级
 *         70~79          C级
 *         60~69          D级
 *         60分以下        E级
 */

package com.demo3;

import java.util.Scanner;

public class Practice2 {
    public static void main(String[] args){
        System.out.println("请输入一个分数:");
        //定义输入的分数为“mark”,且分数会有小数
        double mark;
        Scanner scanner = new Scanner(System.in);
        mark = scanner.nextDouble();

        //判断是否有输入错误。
        if(mark<0||mark>100){
            System.out.println("分数输入有误!");
            System.exit(0);
        }

        /*判断分数的等级
        90分以上者A级, 80~89分者 B级,70~79分者 C级, 60~69者 D级,60分以下 E级 */
        if(mark>=90){
            System.out.println("this mark is grade A");
        } else if (mark>=80) {
            System.out.println("this mark is grade B");
        } else if (mark>=70) {
            System.out.println("this mark is grade C");
        } else if (mark>=60) {
            System.out.println("this mark is grade D");
        }else {
            System.out.println("this mark is grade E");
        }

    }
}

3、编写程序求 1+3+5+7+……+99 的和值。

/**
 * 编写程序求 1+3+5+7+……+99 的和值
 */
package com.demo3;

public class Practice3 {
    public static void main(String[] args){
        int number = 1; //初始值1,以后再+2递增上去
        int sum1 = 0,sum2=0,sum3=0;
        //1+2+3+4+...+100的值
        for(int i=1;i<=100;i++){
            sum1 = sum1+i;
        }
        System.out.println("1+2+3+4+...+100值为:"+sum1);
        for(int j=1;j<100;j+=2){
            sum2 = sum2+j;
        }
        System.out.println("1+3+5+7+...+99值为:"+sum2);
        for(int t=2;t<=100;t+=2){
            sum3 = sum3+t;
        }
        System.out.println("2+4+6+8+...+100值为:"+sum3);
    }
}

4、利用for循环打印 9*9  表

1*1=1

1*2=2  2*2=4

1*3=3  2*3=6  3*3=9

1*4=4  2*4=8  3*4=12  4*4=16

1*5=5  2*5=10  3*5=15  4*5=20  5*5=25

1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36

1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49

1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64

1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

/**
 * 利用for循环打印 9*9  表
 */
package com.demo3;

public class Practice4 {
    public static void main(String[] args){
        System.out.println();
        for(int i=1;i<10;i++){
            for(int j=1;j<10;j++){
                if(j>i)
                    break;
                System.out.print(" "+j+"*"+i+"="+i*j);
            }
            System.out.println();
        }
    }
}

5、输出所有的水仙花数

所谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身,

   例如: 153 = 1*1*1 + 3*3*3 + 5*5*5

/**
 * 输出所有的水仙花数,所谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身,
 *    例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
 */
package com.demo3;

public class Practice5 {
    public static void main(String[] args){
        System.out.println("以下是所有的水仙花数:");
        int number = 100; //由于水仙花是三位数所以由100起算
        int i,j,k; //i j k分别为三位数的百位 十位 个位
        for(int sum;number<1000;number++){
            i=number/100;
            j=(number-i*100)/10;
            k=number-i*100-j*10;
            sum = i*i*i+j*j*j+k*k*k;
            if(sum==number){
                System.out.println(number+"是一个水仙花数");
            }
        }
    }
}

6、求  a+aa+aaa+.......+aaaaaaaaa=?

      其中a为1至9之中的一个数,项数也要可以指定。

/**
 * 求  a+aa+aaa+.......+aaaaaaaaa=?
 *       其中a为1至9之中的一个数,项数也要可以指定。
 */
package com.demo3;

import java.util.Scanner;

public class Practice6 {
    public static void main(String[] args){
        int a; //定义输入的数字
        int cnt; //定义最后的一项有多少个数字
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个1~9的值进行相加:");
        a=scanner.nextInt();
        System.out.println("请问要相加多少项:");
        cnt= scanner.nextInt();
        int sum = 0;
        int a1 = a;//用来保存a1的初始值
        for(int i=1;i<=cnt;i++){
            sum = sum+a;
            a=a*10+a1; //这表示a的下一项
            //每次 a 的下一项都等于前一项*10,再加上刚输入时的 a ;注意,这时的 a 已经变化了。
        }
        System.out.println("此时的值为:"+sum);
    }
}

7、求 2/1+3/2+5/3+8/5+13/8.....前20项之和?

/**
 * 求 2/1+3/2+5/3+8/5+13/8.....前20项之和?
 */
package com.demo3;

public class Practice7 {
    public static void main(String[] args){
        double sum=0;
        double fenzi =2.0,fenmu=1.0; // 初始的分子 (fenZi)=2,分母(fenMu)=1
        for(int i=1;i<=20;i++){
            sum = sum+fenzi/fenmu;
            fenmu = fenzi; //下一项的分母 = 上一项的分子
            fenzi=fenzi+fenmu; //下一项的分子 = 上一项的分子加分母
        }
        System.out.println("2/1+3/2+5/3+8/5+13/8.....前20项之和:"+sum);
    }
}

8、利用程序输出如下图形:

   *

   * * *

   * * * * *

   * * * * * * *

   * * * * *

   * * *

   *

/**
 * 利用程序输出如下图形:
 *    *
 *    * * *
 *    * * * * *
 *    * * * * * * *
 *    * * * * *
 *    * * *
 *    *
 */


package com.demo3;

public class Practice8 {
    public static void main(String[] args){
        for(int i=1;i<=13;i+=2){
            for(int j=1;j<=i&&i+j<=14;j++){
                System.out.print("* ");
            }
            System.out.println();//换行
        }

    }
}

9、计算圆周率

PI=4-4/3+4/5-4/7.......

  打印出第一个大于 3.1415小于 3.1416的值

/**
 * 计算圆周率
 *   PI=4-4/3+4/5-4/7.......
 *   打印出第一个大于 3.1415小于 3.1416的值
 */

package com.demo3;

public class Practice9 {
    public static void main(String[] args){
        double pi = 0; //初始定义值
        double fenzi = 4; //分子为4
        double fenmu = 1; //第一个4,可看作分母为1 的分式,以后的分母每次递增2
        for (int i=0;i<=1000000000;i++){   运行太久,可以减少循环次数会快很多,只是精确度小些
            pi = pi+fenzi/fenmu;
            fenzi =-1*fenzi; //每项分子的变化是+4,-4,+4,-4 ....
            fenmu = fenmu+2; //分母的变化是1,3,5,7, ....   每项递加2
        }
        System.out.println(pi);
    }
}

此输出结果并不精确,圆周率为无限不循环小数;

10、输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值

1  1  2  3  5  8  13  21  34

  规律:一个数等于前两个数之和

//计算斐波那契数列(Fibonacci)的第n个值

11.求1-1/3+1/5-1/7+1/9......的值。

  a,求出前50项和值。

  b,求出最后一项绝对值小于1e-5的和值。

/**
 * 求 1-1/3+1/5-1/7+1/9......的值。
 *   a,求出前50项和值。
 *   b,求出最后一项绝对值小于1e-5的和值。
 */

package com.demo3;

public class Practice11 {
    public static void main(String[] args){
        double sum = 0;
        double fenzi=1.0;
        double fenmu=1.0;
        for(int i=1;i<=50;i++){
            sum = sum+fenzi/fenmu;
            fenmu = fenmu+2;
            fenzi = -1*fenzi;
        }
        System.out.println("1-1/3+1/5-1/7+1/9......前50项的和为:"+sum);
    }

}

12、在屏幕上打印出n行的金字塔图案,如,若n=5,则图案如下:

        *

       ***

      *****

     *******

    *********

13、歌德巴赫猜想,任何一个大于六的偶数可以拆分成两个质数的和

  打印出所有的可能

/**
 * //任何一个大于六的偶数可以拆分成两个质数的和
 * //打印出所有的可能
 */
package com.demo3;

import java.util.Scanner;

public class practice13 {
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int m = scanner.nextInt();
        if(m%2!=0||m<6){
            System.out.println("数字非大于6的偶数!");
        }else {
            for (int i=2;i<m;i++){
                for(int j=m;j>i;j--){
                    if(sushu(i)&&sushu(j)){
                        if(i+j==m){
                            System.out.println(m+"="+i+"+"+j);
                        }
                    }

                }            }
        }
    }

    public static boolean sushu(int x) {
        for (int i=2;i<x;i++){
            if(x%i==0){
                return false;
            }
        }
        return true;
    }

}

数组

14、定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。

/**
 * 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,
 * 最小值,平均值,和值,并输出出来。
 */
package com.demo3;

public class Practice14 {
    public static void main(String[] args){
        int[] arrayNumber;
        arrayNumber = new int[10];
        System.out.println("以下是随机的10个整数:");
        //随机填入10个数字
        for (int i=0;i<arrayNumber.length;i++){
            arrayNumber[i]=(int)(100*Math.random());
            System.out.print(arrayNumber[i]+" ");
        }
        System.out.println();
        int min=arrayNumber[0];
        int max=arrayNumber[0];
        int sum=0;
        //max min 疑点
        for(int i =0;i<arrayNumber.length;i++){
            if (max<arrayNumber[i]){
                max=arrayNumber[i];} //求最大值;
            if(min>arrayNumber[i]){
                min=arrayNumber[i]; //求最小值
            }
            sum = sum+arrayNumber[i];
        }
        System.out.println("其中max="+max+" min="+min+" sum="+sum+" avg="+sum/10.0);
    }
}

15、

定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置,

即,a[0]=a[1],a[1]=a[2],…最后一个元素的值是原来第一个元素的值,然后输出这个数组。

/**
 * 定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置,
 * 即,a[0]=a[1],a[1]=a[2],…最后一个元素的值是原来第一个元素的值,然后输出这个数组。
 */
package com.demo3;

import java.util.Arrays;

public class Practice15 {
    public static void main(String[] args){
        int[] arrayNumber;
        arrayNumber = new int[10];
        //循环迭代
        for(int i =0;i<10;i++){
            arrayNumber[i]=i+1;
            System.out.print(arrayNumber[i]+" ");
        }
        System.out.println();
        System.out.println(Arrays.toString(arrayNumber));
        
        int temp = arrayNumber[0];
        for(int i =0;i<arrayNumber.length-1;i++){
            arrayNumber[i] = arrayNumber[i+1];
        }
        arrayNumber[arrayNumber.length-1]=temp;
        System.out.println(Arrays.toString(arrayNumber));
    }
}

16、

定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数,将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。

16.1、承上题,将这40个成绩按照从高到低的顺序输出出来。

/**
 * 定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数,
 * 将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。
 * 承上题,将这40个成绩按照从高到低的顺序输出出来。
 */
package com.demo3;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

public class Practice16 {
    public static void main(String[] args){
        int[] arrayNumber;
        arrayNumber = new int[40];
        System.out.println("以下是40个同学的随机成绩:");
        for(int i=0;i<arrayNumber.length;i++){
            //arrayNumber[i]=(int)(100*Math.random());
            arrayNumber[i]=new Random().nextInt(100); //另一种随机取数的方式
            System.out.print(arrayNumber[i]+" ");
        }
        System.out.println();
        double sum=0,avg=0;
        for(int i=0;i<arrayNumber.length;i++){
            sum=sum+arrayNumber[i];
        }
        avg=sum/arrayNumber.length;

        int cnt=0;
        for(int i=0;i<arrayNumber.length;i++){
            if(arrayNumber[i]<avg){
                cnt=cnt+1;
            }
        }
        System.out.println("成绩低于平均分的学员的人数:"+cnt);

        //冒泡排序: 从序列的一端开始向另一端冒泡,可以从左往右冒泡,也可以从右往左冒泡,依次比较相邻的两个数的大小(比大还是比小看要求)。
        for(int i=0;i<arrayNumber.length-1;i++){
            for (int j=0;j<arrayNumber.length-1-i;j++){
                if(arrayNumber[j]<arrayNumber[j+1]){
                    int temp=arrayNumber[j];
                    arrayNumber[j]=arrayNumber[j+1];
                    arrayNumber[j+1]=temp;
                }
            }
        }
        System.out.println("冒泡排序结果:"+Arrays.toString(arrayNumber));

        //选择排序:首先,找到数组中最小(最大)的元素,拎出来,将它和数组的第一个元素交换位置,
        // 第二步,在剩下的元素中继续寻找最小(最大)的元素,拎出来,和数组的第二个元素交换位置,如此循环,知道整个数组排序完成。

        //标记第一个为待比较的数
        //然后从后面遍历与第一个数比较
        //如果小,就交换最小值
        //保存最小元素的下标
        //找到最小值后,将最小的值放到第一的位置,进行下一遍循环
        for(int i=0;i<arrayNumber.length-1;i++){
            int index =i;
            for(int j=i+1;j<arrayNumber.length;j++){
                if(arrayNumber[j]>arrayNumber[index]){
                        index=j;
                }
            }
            int temp = arrayNumber[index];
            arrayNumber[index]=arrayNumber[i];
            arrayNumber[i]=temp;
        }
        System.out.println("选择排序结果:"+Arrays.toString(arrayNumber));
    }
}

17、编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值为5,4,3,2,1。

/**
 * 编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值为5,4,3,2,1。
 */
package com.demo3;

import java.util.Arrays;
import java.util.Random;

public class Practice17 {
    public static void main(String[] args){
        //随机生成一组数据
        int[] arrayNumber;
        arrayNumber = new int[10];
        for(int i=0;i<arrayNumber.length;i++){
            //arrayNumber[i]=new Random().nextInt(10); //会出现重复数据
            arrayNumber[i]=(int)(100*Math.random());
        }
        System.out.print("原始数组数据:"+Arrays.toString(arrayNumber));
        System.out.println();

        //元素倒排不一定是从小到大变成从大到小,而是位置的置换
        for (int i=0;i<arrayNumber.length/2;i++){
            int temp=arrayNumber[i];
            arrayNumber[i]=arrayNumber[arrayNumber.length-i-1];
            arrayNumber[arrayNumber.length-i-1]=temp;
        }
        System.out.println("数组元素倒排后的数据:"+Arrays.toString(arrayNumber));
    }
}

18、要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。

/**
 * 要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。
 * 再定义一个int型数组b,包含10个元素。
 * 统计a数组中的元素对10求余等于0的个数,保存到b[0]中;
 * 对10求余等于1的个数,保存到b[1]中,
 * 对10求余等于2的个数,保存到b[0]中,……依此类推。
 */
package com.demo3;

import java.util.Arrays;
import java.util.Random;

public class Practice18 {
    public static void main(String[] args){
        int[] a;
        int[] b;
        a=new int[100];
        b=new int[10];
        //取a数组100个随机的4位数;
        for (int i=0;i<a.length;i++){
            a[i]=(int)(10000* Math.random());
        }
        System.out.println("a数组:"+Arrays.toString(a));

        统计 a 数组中的元素对 10 求余的各个的数目
        int k,cnt;
        for(int j=0;j<b.length;j++){
            for (k=0,cnt=0;k<a.length;k++){
                if((a[k]%10)==j){
                    cnt = cnt+1;
                }
                b[j]=cnt;
            }
            System.out.printf("b[%d]=%d \n",j,b[j]);
        }
    }
}

19、定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;

这5门课 按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。

   (1)循环给二维数组的每一个元素赋0~100之间的随机整数。

   (2)按照列表的方式输出这些学员的每门课程的成绩。

   (3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。

   (4)要求编写程序求所有学员的某门课程的平均分。

/**
 * 定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课
 *    按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。
 *    (1)循环给二维数组的每一个元素赋0~100之间的随机整数。
 *    (2)按照列表的方式输出这些学员的每门课程的成绩。
 *    (3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。
 *    (4)要求编写程序求所有学员的某门课程的平均分。
 */
package com.demo3;

import java.util.Random;

public class Practice19 {
    public static void main(String[] args){
        Random rd = new Random();
        int[][] stu=new int[20][5];
        int[] ssum = new int[20];//每个学员的总分,学员有20个
        int[] cavg = new int[5]; //每门课程的平均分,课程共有5门
        int a=0;
        System.out.println("学号"+"\t\t"+"core C++"+"\t"+"coreJava"+"\t"
                +"Servlet"+"\t\t"+"JSP"+"\t\t\t"+"EJB"+"\t\t\t"+"总成绩");//输出课程目录

        for(int i=0;i<stu.length;i++){
            System.out.print(i+1+"\t\t");//输出学生学号
            for(int j=0;j<stu[i].length;j++){
                stu[i][j]=rd.nextInt(50)+50;   //随机赋值 +50保证数据不至于太低
                System.out.print(stu[i][j]+"\t\t\t");
                ssum[i]=ssum[i]+stu[i][j]; //求和:求一个学生的总成绩
                cavg[j]=cavg[j]+stu[i][j]; //求单科成绩的全班同学总分
            }
            a=a+ssum[i]; //总成绩求和
            System.out.print(" ");
            System.out.println(ssum[i]);
        }
        System.out.print("平均分"+"\t");
        for (int i = 0; i < cavg.length; i++) {
            System.out.print(cavg[i]/20.0+"\t\t");
        }
        System.out.print(a/20.0);
    }
}

20、判断随机整数是否是素数

产生100个0-999之间的随机整数,然后判断这100个随机整数哪些是素数,哪些不是?

/**
 * 判断随机整数是否是素数
 * 产生100个0-999之间的随机整数,然后判断这100个随机整数哪些是素数,哪些不是?
 */
package com.demo3;

import java.util.Arrays;

public class Practice20 {
    public static void main(String[] avgs){
        int[] arrayNumber;
        arrayNumber = new int[100];
        for(int i=0;i<arrayNumber.length;i++){
            arrayNumber[i]=(int)(1000*Math.random());//产生100个0-999的随机数
        }
        System.out.println(Arrays.toString(arrayNumber));

        StringBuilder primeBuilder = new StringBuilder();
        StringBuilder notPrimeBuilder = new StringBuilder();
        for(int i : arrayNumber) {
            if(isPrime(i)) {
                primeBuilder.append(i + ",");
            } else {
                notPrimeBuilder.append(i + ",");
            }
        }
        System.out.println("素数有:" + primeBuilder.toString());
        System.out.println("非素数有:" + notPrimeBuilder.toString());
    }

    //判断是否为素数
    public static boolean isPrime(int num) {
        for (int i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                //System.out.println(num + "第一个被" + i + "整除!");
                return false;
            }
        }
        return true;
    }
}

21、某公司的雇员分为以下若干类:

某公司的雇员分为以下若干类:

Employee:这是所有员工总的父类,属性:员工的姓名和生日月份。

方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,

则公司会额外奖励100元。

SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪

HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160

小时的部分按照1.5倍工资发放

属性:每小时的工资、每月工作的小时数

SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定

属性:月销售额、提成率

BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,

工资由底薪加上销售提成部分     属性:底薪。

/**

 * 在原有的雇员练习上修改代码

 * 公司会给SalaryEmployee每月另外发放2000元加班费,给

 * BasePlusSalesEmployee发放1000元加班费

 * 改写原有代码,加入以上的逻辑

 * 并写一个方法,打印出本月公司总共发放了多少加班费

 * @author Administrator

 *

 */

package com.demo3;

/**
 * 某公司的雇员分为以下若干类:
 * Employee:这是所有员工总的父类,属性:员工的姓名和生日月份。
 * 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,
 * 则公司会额外奖励100元。
 * SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪
 * HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160
 * 小时的部分按照1.5倍工资发放
 * 属性:每小时的工资、每月工作的小时数
 * SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定
 * 属性:月销售额、提成率
 * BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,
 * 工资由底薪加上销售提成部分     属性:底薪。
 */

/**
 * 在原有的雇员练习上修改代码
 * 公司会给SalariedEmployee每月另外发放2000元加班费,给BasePlusSalesEmployee发放1000元加班费
 * 改写原有代码,加入以上的逻辑
 * 并写一个方法,打印出本月公司总共发放了多少加班费
 * @author Administrator
 *
 */
//package com.demo3;

public class Practice21_1 {
    public static void main(String[] args){

        Employee[] employee = new Employee[10];
        employee[0]=new Employee("昭君",2);
        employee[1]=new SalariedEmployee("貂蝉",3,4500.00);
        employee[2]=new HourlyEmployee("赵云",3,200,15);
        employee[3]=new SalesEmployee("吕布",5,400000,0.05);
        employee[4]=new BasePlusSalesEmployee("刘备",8,400000,0.01,5000);
        employee[5]=new SalariedEmployee("小乔",6,8800.00);
        employee[6]=new SalariedEmployee("大乔",2,6500.00);
        employee[7]=new SalariedEmployee("周瑜",4,5500.00);
        employee[8]=new BasePlusSalesEmployee("张飞",8,900000,0.01,5000);
        employee[9]=new BasePlusSalesEmployee("关羽",8,700000,0.01,5000);
        int month = 2;//设置本月为2月
        System.out.println("三国集团"+month+"月的工资表为:");
        for (int i=0;i<employee.length;i++){
            System.out.println(employee[i].getName()+":"+employee[i].getSalary(month));
        }

        //统计加班费:
        //instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
        int result = 0;
        int result1=0;
        int result2=0;
        for(int i=0;i<employee.length;i++){
            if(employee[i] instanceof SalariedEmployee){
                SalariedEmployee s = (SalariedEmployee)employee[i];
                result1 = result1+s.getAddtinoalSalary();
            }
            if(employee[i] instanceof BasePlusSalesEmployee){
                BasePlusSalesEmployee b = (BasePlusSalesEmployee)employee[i];
                result2 = result2+b.getAddtinoalSalary();
            }
            //result = result1+result2;
        }
        result = result1+result2;
        System.out.println("加班费:"+result);

    }
}

//Employee:这是所有员工总的父类,属性:员工的姓名和生日月份。
// 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
 class Employee{
    private String name;
    private  int birth;
    public Employee(String name,int birth){
        this.name = name;
        this.birth = birth;
    }

    public String getName(){
        return name;
    }

    public double getSalary(int month){
        if(month==birth){
            return 100;
        }
        return 0;
    }


}

//SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪
 class SalariedEmployee extends Employee{
    private double salary;

    public SalariedEmployee(String name,int birth,double salary){
        super(name, birth);
        this.salary=salary;
    }

    public int getAddtinoalSalary(){
        return 2000;
    }
    public double getSalary(int month){

        return salary+super.getSalary(month)+getAddtinoalSalary();
    }

}

//HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放
//  属性:每小时的工资、每月工作的小时数
 class HourlyEmployee extends Employee{
    public double hourSalary;
    public int hour;

    public HourlyEmployee(String name,int birth,int hour,double hourSalary){
        super(name, birth);
        this.hour = hour;
        this.hourSalary = hourSalary;
    }

    public double getSalary(int month){
        if (hour<=160){
            return hourSalary*hour+super.getSalary(month);
        } else {
            return 160*hourSalary+(hour-160)*hourSalary*1.5+super.getSalary(month);
        }
    }
}

//SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定
// 属性:月销售额、提成率
 class SalesEmployee extends Employee{
    public double sales;
    public double pre;
    public SalesEmployee(String name,int birth,double sales,double pre){
        super(name, birth);
        this.sales = sales;
        this.pre = pre;
    }
    public double getSalary(int month){
        return sales*pre+super.getSalary(month);
    }
}

//BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,
//工资由底薪加上销售提成部分     属性:底薪。
 class BasePlusSalesEmployee extends SalesEmployee{
    private double baseSalary;

    public BasePlusSalesEmployee(String name, int birth, double sales, double pre, double baseSalary) {
        super(name, birth, sales, pre);
        this.baseSalary = baseSalary;
    }
    public int getAddtinoalSalary(){
        return 1000;
    }

    public double getSalary(int month) {
        return baseSalary +sales*pre+ super.getSalary(month)+getAddtinoalSalary();
    }
}

经典算法:

1. 某学校为学生分配宿舍,每6个人一间房(不考虑性别差异),问需要多少房?

答案:  (x+5)/6

注意理解int类型数值。

2、让数值在 0~9 之间循环。

/**
 * 让数值在 0~9 之间循环。
 */
package com.demo3;

public class Practice22 {
    public static void main(String[] args){
        int i=0;
        while(true){
            i=(i+1)%10;
            System.out.println(i);
        }
    }
}

1、写一个数组类(放对象):

     功能包括:添加(添加不限制多少项)、修改、插入、删除、查询

2、作业 10-08

1. 随机产生 20 个整数(10以内的),放入一个ArrayList中, 用迭代器遍历这个ArrayList

2. 并删除其中为 5 的数

3. 再产生 3 个整数,插入到位置 4 处

4. 把所有值为 1 的数都变成 10

3、产生 3000 个 10 以内的数,放入 hashSet 遍历它,打印每一个值

/***
 * 1. 产生 3000 个 10 以内的数,放入 hashSet
 * 2. 遍历它,打印每一个值
 */
package com.demo3;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;

public class Practice24 {
    public static void main(String[] args){
        Random r = new Random();
        HashSet hs1 = new HashSet();
        for(int i=0; i<3000; i++){
            hs1.add(r.nextInt(10));
        }
        //由于 HashSet 不能重复,所以只有10个数在里面,按哈希排序
        Iterator it1 = hs1.iterator();
        while(it1.hasNext()) {
            System.out.print(it1.next() + " ");
        }

    }
}

/***
 * 1. 产生 3000 个 10 以内的数,放入 hashSet
 * 2. 遍历它,打印每一个值
 */

package com.demo3;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;

public class Practice24_1 {
    public static void main(String[] args) {
        int[] arrayNumber;
        arrayNumber = new int[3000];
        for (int i = 0; i < arrayNumber.length; i++) {
            arrayNumber[i] = (int) (10 * Math.random());
        }
        System.out.println("3000个10以内的随机数为:");
        System.out.println(Arrays.toString(arrayNumber));
        //放入hashSet中
        //由于 HashSet 不能重复,所以只有10个数在里面,按哈希排序
        HashSet hs1 = new HashSet();
        for (int i=0;i<arrayNumber.length;i++){
            hs1.add(arrayNumber[i]);
            //System.out.println(hs1);
        }
        Iterator it1 = hs1.iterator();
        while(it1.hasNext()) {
            System.out.print(it1.next() + " ");
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值