java经典程序100例-.pdf
java 经典程序 100 例1,编写程序,判断给定的某个年份是否是闰年。闰年的判断规则如下:(1)若某个年份能被4 整除但不能被100 整除,则是闰年。(2)若某个年份能被400 整除,则也是闰年。import java.util.Scanner;class Bissextile public static void main(String arge)System.out.print(请输入年份);int year;/定义输入的年份名字为“year”Scanner scanner=new Scanner(System.in);year=scanner.nextInt();if(year3000)System.out.println(年份有误,程序退出!);System.exit(0);if(year%4=0)&(year%100!=0)|(year%400=0)System.out.println(year+is bissextile);else System.out.println(year+is not bissextile);2,给定一个百分制的分数,输出相应的等级。90 分以上A 级8089 B 级7079 C 级6069 D 级60 分以下E 级import java.util.Scanner;class Mark public static void main(String args)System.out.println(请输入一个分数);/定义输入的分数为“mark”,且分数会有小数double mark;Scanner scanner=new Scanner(System.in);mark=scanner.nextDouble();/判断是否有输入错误。if(mark100)System.out.println(输入有误!);System.exit(0);/*判断分数的等级90 分以上者A 级,8089 分者B 级,7079 分者C 级,6069 者 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 的和值。class he public static void main(String args)int number=1;/初始值 1,以后再+2 递增上去int sum=0;for(;number 100;number+=2)sum+=number;System.out.println(1+3+5+7+99=+sum);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/循环嵌套,打印九九乘法表public class NineNine public static void main(Stringargs)System.out.println();for(int j=1;j10;j+)for(int k=1;k10;k+)/老师的做法,判断语句里的kj)break;/此处用continue 也可以,只是效率低一点System.out.print(+k+X+j+=+j*k);System.out.println();6、输出所有的水仙花数,把谓水仙花数是指一个数3 位数,其各各位数字立方和等于其本身,例如:153=1*1*1+3*3*3+5*5*5 class DafodilNumber public static void main(String args)System.out.println(以下是所有的水仙花数);int number=100;/由于水仙花数是三位数,故由100 开始算起int i,j,k;/i j k 分别为 number 的百位、十位、个位for(int sum;number1000;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+is a dafodil number!);7、求a+aa+aaa+.+aaaaaaaaa=?其中 a 为 1 至 9 之中的一个数,项数也要可以指定。import java.util.Scanner;class Multinomial public static void main(String args)int a;/定义输入的a int howMany;/定义最后的一项有多少个数字Scanner scanner=new Scanner(System.in);System.out.println(请输入一个19 的 a 值);a=scanner.nextInt();System.out.println(请问要相加多少项?);howMany=scanner.nextInt();int sum=0;int a1=a;/用来保存a 的初始值for(int i=1;i=howMany;i+)sum+=a;a=10*a+a1;/这表示 a 的下一项/每次a 的下一项都等于前一项*10,再加上刚输入时的a;注意,这时的a 已经变化了。System.out.println(sum=+sum);8、求2/1+3/2+5/3+8/5+13/8.前 20 项之和?class Sum public static void main(Sting args)double sum=0;double fenZi=2.0,fenMu=1.0;/初始的分子(fenZi)2,分母(fenMu)1 for(int i=1;i=20;i+)sum+=fenZi/fenMu;fenMu=fenZi;/下一项的分母 上一项的分子fenZi+=fenMu;/下一项的分子 上一项的分子加分母 System.out.println(sum=sum);9、利用程序输出如下图形:*class Asterisk 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();/换行 11、计算圆周率PI 44/3+4/5-4/7.打印出第一个大于3.1415 小于3.1416 的值class Pi 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+=(fenZi/fenMu);fenZi*=-1.0;/每项分子的变化是+4,4,+4,4.fenMu+=2.0;/分母的变化是1,3,5,7,.每项递加2 System.out.println(pi);输出结果为pi=3.1415926525880504,应该不精确12、输入一个数据n,计算斐波那契数列(Fibonacci)的第 n个值1 1 2 3 5 8 13 21 34 规律:一个数等于前两个数之和/计算斐波那契数列(Fibonacci)的第 n 个值public class Fibonacci public static void main(String args)int n=Integer.parseInt(args0);int n1=1;/第一个数int n2=1;/第二个数int sum=0;/和if(n=0)System.out.println(参数错误!);return;if(n=2)sum=1;else for(int i=3;i=n;i+)sum=n1+n2;n1=n2;n2=sum;System.out.println(sum);/计算斐波那契数列(Fibonacci)的第 n 个值/并把整个数列打印出来public class FibonacciPrint public static void main(String args)int n=Integer.parseInt(args0);FibonacciPrint t=new FibonacciPrint();for(int i=1;i=n;i+)t.print(i);public void print(int n)int n1=1;/第一个数int n2=1;/第二个数int sum=0;/和if(n=0)System.out.println(参数错误!);return;if(n=2)sum=1;else for(int i=3;i=n;i+)sum=n1+n2;n1=n2;n2=sum;System.out.println(sum);13、求 1-1/3+1/5-1/7+1/9.的值。a,求出前 50 项和值。b,求出最后一项绝对值小于1e-5 的和值。15、在屏幕上打印出n 行的金字塔图案,如,若n=5,则图案如下:*/打印金字塔图案public class PrintStar public static void main(String args)int col=Integer.parseInt(args0);for(int i=1;i=col;i+)/i表示行数/打印空格for(int k=0;kcol-i;k+)System.out.print();/打印星星for(int m=0;m2*i-1;m+)System.out.print(*);System.out.println();16、歌德巴赫猜想,任何一个大于六的偶数可以拆分成两个质数的和打印出所有的可能/任何一个大于六的偶数可以拆分成两个质数的和/打印出所有的可能public class Gedebahe public static void main(String args)int num=Integer.parseInt(args0);if(num=6)System.out.println(参数错误!);return;if(num%2!=0)System.out.println(参数错误!);return;Gedebahe g=new Gedebahe();/1 不是质数,2 是偶数,因此从 3 开始循环for(int i=3;i=num/2;i+)if(i%2=0)/如果为偶数,退出本次循环continue;/当 i 与 num-i 都为质数时,满足条件,打印if(g.isPrime(i)&g.isPrime(num-i)System.out.println(i+(num-i)+=+num);第 4 章 数组1.定义一个int 型的一维数组,包含10 个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。class ArrayNumber public static void main(String args)int arrayNumber;arrayNumber=new int10;System.out.println(以下是随机的10 个整数:);/填入随机的10 个整数for(int i=0;iarrayNumber.length;i+)arrayNumberi=(int)(100*Math.random();System.out.print(arrayNumberi+);System.out.println();int max=arrayNumber0;int min=arrayNumber0;int sum=0;for(int i=0;iarrayNumber.length;i+)if(max arrayNumberi)min=arrayNumberi;/求最小值sum+=arrayNumberi;System.out.println(其中Max=+max+,Min=+min+,Sum=+sum+,Avg=+sum/10.0);2.定义一个int 型的一维数组,包含10 个元素,分别赋值为110,然后将数组中的元素都向前移一个位置,即,a0=a1,a1=a2,最后一个元素的值是原来第一个元素的值,然后输出这个数组。3.定义一个int 型的一维数组,包含40 个元素,用来存储每个学员的成绩,循环产生40 个0100 之间的随机整数,将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。4.(选做)承上题,将这40 个成绩按照从高到低的顺序输出出来。5,(选做)编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值为 5,4,3,2,1。6,要求定义一个int 型数组 a,包含 100 个元素,保存 100 个随机的4 位数。再定义一个int 型数组 b,包含 10 个元素。统计a 数组中的元素对10 求余等于0 的个数,保存到 b0中;对 10 求余等于 1 的个数,保存到b1中,依此类推。class Remain public static void main(String args)int a=new int100;/保存 100 个随机 4 位数到a 中for(int i=0;i a.length;i+)ai=(int)(1000*Math.random();/统计a 数组中的元素对10 求余的各个的数目int b=new int10;int k,sum;for(int j=0;j b.length;j+)for(k=0,sum=0;k 1.0E-4|N%2=0|N0)System.out.println(输入出错,格局只能是正奇数。请重新输入);else break;/老师的九宫格填写方法int result=new intNN;/定义保存九宫格的数组int row=0;/行 初始位置int col=N/2;/列 初始位置,因为列由 0 开始,故N/2 是中间位置for(int i=1;i=N*N;i+)result rowcol=i;row-;col+;if(row=N)col-;row+=2;/行列都越界else if(row=N)col=0;/列越界else if(resultrowcol!=0)col-;row+=2;/有冲突/打印出九宫格for(int i=0;iN;i+)for(int j=0;jN;j+)System.out.print(resultij+t);System.out.println();/我个人的填格方式int result2=new intNN;/为免冲突,重新new 一个数组result2N/2N/2=(N*N+1)/2;/先把中间值赋予中间位置row=0;/定义行及列的初始赋值位置。之前赋值的for 对两个值有影响,故需重新定位col=N/2;for(int i=1;i=N*N/2;i+)result2rowcol=i;/下面这句是把跟i 对应的值放到格局对应的位置上result2N-row-1N-col-1=N*N+1-i;row-;col+;if(row=N)col=0;/列越界else if(result2rowcol!=0)col-;row+=2;/有冲突/这方法不可能出现行列两边都越界的情况,详情需要数学论证 System.out.println();/再次打印出九宫格,以对比验证for(int i=0;iN;i+)for(int j=0;jN;j+)System.out.print(result2ij+t);System.out.println();9,求一个 3*3 矩阵对角线元素之和10,打印杨辉三角11.约梭芬杀人法把犯人围成一圈,每次从固定位置开始算起,杀掉第7 个人,直到剩下最后一个。11_2、用数组实现约瑟夫出圈问题。n 个人排成一圈,从第一个人开始报数,从1 开始报,报到 m 的人出圈,剩下的人继续开始从1 报数,直到所有的人都出圈为止。对于给定的n,m,求出所有人的出圈顺序。12.判断随机整数是否是素数产生 100 个 0-999 之间的随机整数,然后判断这100 个随机整数哪些是素数,哪些不是?public class PrimeTest public static void main(String args)for(int i=0;i100;i+)int num=(int)(Math.random()*1000);PrimeTest t=new PrimeTest();if(t.isPrime(num)System.out.println(num+是素数!);else System.out.println(num+不是素数!);System.out.println();public 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;冒泡排序法:/按从大到小的排序int tmp=a0;for(int i=0;i a.length;i+)for(int j=0;j a.length-i-1;j+)if(aj aj+1)tmp=aj;aj=aj+1;aj+1=tmp;day06 练习某公司的雇员分为以下若干类:Employee:这是所有员工总的父类,属性:员工的姓名和生日月份。方法:getSalary(int month)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。SalariedEmployee:Employee 的子类,拿固定工资的员工。属性:月薪HourlyEmployee:Employee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放属性:每小时的工资、每月工作的小时数SalesEmployee:Employee 的子类,销售人员,工资由月销售额和提成率决定属性:月销售额、提成率BasePlusSalesEmployee:SalesEmployee 的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分属性:底薪。public class TestEmployee public static void main(Stringargs)Employee es=new Employee5;es0=new Employee(赵君,2);es1=new SalariedEmployee(宋婕,1,8000);es2=new HourlyEmployee(王超,5,10,300);es3=new SalesEmployee(秋娥,2,200000,0.05);es4=new BaseSalarySalesEmployee(郭镫鸿,1,1000000,0.1,10000);int month=2;/本月为 2 月System.out.println(宇宙集团+month+月工资表:);for(int i=0;ies.length;i+)System.out.println(esi.getName()+:+esi.getSalary(month);class Employee private String name;private int birth;public String getName()return name;public Employee(String name,int birth)this.name=name;this.birth=birth;public double getSalary(int month)if(month=birth)return 100;return 0;class SalariedEmployee extends Employee private double salary;public SalariedEmployee(String name,int birth,double salary)super(name,birth);this.salary=salary;public double getSalary(int month)return salary+super.getSalary(month);class HourlyEmployee extends Employee private double hourSalary;private int hour;public HourlyEmployee(String name,int birth,double hourSalary,int hour)super(name,birth);this.hourSalary=hourSalary;this.hour=hour;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);class SalesEmployee extends Employee private double sales;private 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);class BaseSalarySalesEmployee extends SalesEmployee private double baseSalary;public BaseSalarySalesEmployee(String name,int birth,double sales,double pre,double baseSalary)super(name,birth,sales,pre);this.baseSalary=baseSalary;public double getSalary(int month)return baseSalary+super.getSalary(month);/*在原有的雇员练习上修改代码*公司会给SalaryEmployee 每月另外发放2000 元加班费,给*BasePlusSalesEmployee 发放 1000 元加班费*改写原有代码,加入以上的逻辑*并写一个方法,打印出本月公司总共发放了多少加班费*author Administrator*/public class EmployeeTest /*param args*/public static void main(String args)Employee e=new Employee4;e0=new SalariedEmployee(魏威,10,5000);e1=new HourlyEmployee(段利峰,8,80,242);e2=new SalesEmployee(林龙,11,300000,0.1);e3=new BasedPlusSalesEmployee(华溪,1,100000,0.15,1500);for(int i=0;ie.length;i+)System.out.println(ei.getName()+:+ei.getSalary(11);/统计加班费int result=0;/for(int i=0;ie.length;i+)/if(ei instanceof SalariedEmployee)/SalariedEmployee s=(SalariedEmployee)ei;/result+=s.getAddtionalSalary();/if(ei instanceof BasedPlusSalesEmployee)/BasedPlusSalesEmployee b=(BasedPlusSalesEmployee)ei;/result+=b.getAddtionalSalary();/for(int i=0;ie.length;i+)result+=ei.getAddtionalSalary();System.out.println(加班费:+result);interface AddtionalSalary int getAddtionalSalary();class Employee implements AddtionalSalary private String name;/员工姓名private int birth;/员工生日月份public Employee(String name,int birth)this.name=name;this.birth=birth;public int getSalary(int month)int result=0;if(month=birth)result=100;return result;public String getName()return name;public int getAddtionalSalary()return 0;class SalariedEmployee extends Employee private int salaryPerMonth;public SalariedEmployee(String name,int birth,int salaryPerMonth)super(name,birth);this.salaryPerMonth=salaryPerMonth;public int getSalary(int month)return this.salaryPerMonth+super.getSalary(month)+this.getAddtionalSalary();public int getAddtionalSalary()return 2000;class HourlyEmployee extends Employee private int salaryPerHour;private int hoursPerMonth;public HourlyEmployee(String name,int birth,int salaryPerHour,int hoursPerMonth)super(name,birth);this.salaryPerHour=salaryPerHour;this.hoursPerMonth=hoursPerMonth;public int getSalary(int month)int result=0;if(this.hoursPerMonth=160)result=hoursPerMonth*salaryPerHour;else result=160*salaryPerHour+(int)(hoursPerMonth-160)*1.5*salaryPerHour);return result+super.getSalary(month);class SalesEmployee extends Employee private int sales;private double rate;public SalesEmployee(String name,int birth,int sales,double rate)super(name,birth);this.sales=sales;this.rate=rate;public int getSalary(int month)return(int)(sales*rate)+super.getSalary(month);class BasedPlusSalesEmployee extends SalesEmployee private int basedSalary;public BasedPlusSalesEmployee(String name,int birth,int sales,double rate,int basedSalary)super(name,birth,sales,rate);this.basedSalary=basedSalary;public int getSalary(int month)return this.basedSalary+super.getSalary(month)+this.getAddtionalSalary();public int getAddtionalSalary()return 1000;经典算法:1.某学校为学生分配宿舍,每6 个人一间房(不考虑性别差异),问需要多少房?答案:(x+5)/6 注意理解int 类型数值。2.让数值在0 9 之间循环。public class test public static void main(String args)int i=0;while(true)i=(i+1)%10;System.out.println(i);作业:1.写一个数组类(放对象):功能包括:添加(添加不限制多少项)、修改、插入、删除、查询class MyArray private Object os=new Object10;public void add(Object o);public void set(int index,Object o);public void insert(int index,Objecto);public void remove(int index);public void remove(Object o);public Object get(int index);public class TestMyArray public static void main(Stringargs)MyArray ma=new MyArray();ma.add(aaa);ma.add(bbb);ma.add(ccc);Object o=ma.get(1);Iterator it=ma.iterator();while(it.hasNext()Object o1=it.next();System.out.println(o1);作业10-08 1.随机产生20 个整数(10 以内的),放入一个ArrayList 中,用迭代器遍历这个ArrayList 2.并删除其中为5 的数3.再产生3 个整数,插入到位置4 处4.把所有值为1 的数都变成10 import java.util.ArrayList;class ArrayList private Object os=new Object20;public class TestArray public static void main(Stringargs)ArrayList a=new ArrayList();ma.add(aaa);ma.add(bbb);ma.add(ccc);Object o=ma.get(1);Iterator it=ma.iterator();while(it.hasNext()Object o1=it.next();System.out.println(o1);1.产生3000 个 10 以内的数,放入hashSet 2.遍历它,打印每一个值import java.util.HashSet;import java.util.Iterator;import java.util.Random;public class TestHashSet public static void main(String args)Random r=new Random();HashSet hs1=new HashSet();for(int i=0;i id)return 1;else if(t1.getId()id)return-1;return 0;class TreeSet class Test public static void main(String args)String s1=new String(aaa);String s2=new String(bbb);String s3=new String(aaa);System.out.println(s1=s3);System.out.println(s1.equals(s3);HashSet hs=new HashSet();hs.add(s1);hs.add(s2);hs.add(s3);Iterator it=hs.iterator();while(it.hasNext()System.out.println(it.next();System.out.printf(%xn,s1.hashCode();System.out.printf(%xn,s2.hashCode();System.out.printf(%xn,s3.hashCode();1.在 Map 中,以 name 作 Key,以 Student 类 作 Velue,写一个HashMap import java.util.*;class Student int id;String name;int age;public Student()public Student(int id,String name,int age)this.id=id;this.name=name;this.age=age;public int getId()return id;public void setId(int id)this.id=id;public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;class TestHashMap public static void main(String args)HashMap h