├── README.md ├── Exercise011 ├── Requirement └── Number.java ├── Exercise012 ├── Requirement └── Bonus.java ├── 单例模式 └── src │ ├── Car3.java │ ├── Car2.java │ ├── Car1.java │ └── Car.java ├── Exercise022 └── src │ └── Recorsion.java ├── Exercise038 └── src │ └── Exercise038.java ├── Exercise023 └── src │ └── Age.java ├── Exercise040 └── src │ └── Exercise040.java ├── Exercise032 └── src │ └── Number.java ├── Exercise013 └── PerfectSquire.java ├── Exercise020 └── src │ └── Summation.java ├── Exercise031 └── src │ └── Exercise.java ├── Exercise021 └── src │ └── Summation.java ├── Exercise024 └── src │ └── Number.java ├── Exercise25 └── src │ └── Number.java ├── Exercise039 └── src │ └── Exercise039.java ├── Exercise034 └── src │ └── Number.java ├── Exercise035 └── src │ └── Exercise.java ├── Exercise018 └── src │ └── PingPongBall.java ├── Exrrcise36 └── src │ └── Exercise.java ├── Exercise016 └── src │ └── MultiplicationTable.java ├── Exercise028 └── src │ └── Number.java ├── Exercise033 └── src │ └── Main.java ├── Exercise027 └── src │ └── PrimeNumber.java ├── Exercise015 └── src │ └── Arrange.java ├── Exercise037 └── src │ └── exercise.java ├── Exercise019 └── src │ └── PrintRhombus.java ├── Exercise029 └── src │ └── Summation.java ├── Exercise017 └── src │ └── Monkey.java ├── Exercise30 └── src │ └── InsectNumber.java ├── Exercise014 ├── Date.java └── DateNew.java └── Exercise026 └── src └── Week.java /README.md: -------------------------------------------------------------------------------- 1 | # Exercise 2 | 50 道 JAVA 基础编程练习题 3 | -------------------------------------------------------------------------------- /Exercise011/Requirement: -------------------------------------------------------------------------------- 1 | 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2 | 3 | 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 4 | -------------------------------------------------------------------------------- /Exercise012/Requirement: -------------------------------------------------------------------------------- 1 | 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 2 | 3 | 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 4 | -------------------------------------------------------------------------------- /单例模式/src/Car3.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/8/20. 3 | */ 4 | /* 5 | 饱汉式的优化,效率略低。 6 | */ 7 | public class Car3 { 8 | private Car3(){} 9 | 10 | private static Car3 car; 11 | 12 | public static synchronized Car3 getCar(){ 13 | if(car == null) { 14 | car = new Car3(); 15 | } 16 | return car; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /单例模式/src/Car2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/8/20. 3 | */ 4 | /* 5 | 饱汉式:优点是会节约内存,但是当多线程访问时会出现多个实例。 6 | */ 7 | public class Car2 { 8 | private Car2(){} 9 | 10 | private static Car2 car; 11 | 12 | public static Car2 getCar() 13 | { 14 | if(car == null) 15 | { 16 | car = new Car2(); 17 | } 18 | return car; 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /单例模式/src/Car1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/8/20. 3 | */ 4 | /* 5 | 饿汉式: 6 | 7 | 优点是:不存在多线程同步问题,避免了synchronized所造成的性能问题; 8 | 9 | 缺点是:当类被加载的时候,静态变量被创建并分配内存空间,对象便一直占着这段内存。 10 | 当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。 11 | */ 12 | public class Car1 { 13 | private Car1(){} 14 | 15 | private static final Car1 car = new Car1(); 16 | 17 | public static Car1 getCar() 18 | { 19 | return car; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Exercise022/src/Recorsion.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/8/22. 3 | */ 4 | /* 5 | 题目:利用递归方法求5!。 6 | 7 | 程序分析:递归公式:fn=fn_1*4! 8 | */ 9 | public class Recorsion { 10 | public static void main(String[] args) { 11 | int n = 5; 12 | System.out.println(n+"!="+formula(n)); 13 | } 14 | 15 | private static int formula(int a ) 16 | { 17 | if(a==1) 18 | { 19 | return 1; 20 | } 21 | else 22 | { 23 | return formula(a-1)*a; 24 | } 25 | } 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /Exercise038/src/Exercise038.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /** 4 | * Created by apple on 2017/10/5. 5 | */ 6 | /* 7 | 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 8 | */ 9 | public class Exercise038 10 | { 11 | public static void main(String[] args) { 12 | System.out.println("Please input the character string:"); 13 | Scanner scan = new Scanner(System.in); 14 | String s = scan.next(); 15 | scan.close(); 16 | char[] a = s.toCharArray(); 17 | System.out.println("The length is: " + a.length); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /单例模式/src/Car.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/8/20. 3 | */ 4 | /* 5 | 单例模式的最佳方案。内存占用低,效率高,线程安全. 6 | */ 7 | public class Car { 8 | private Car(){} 9 | 10 | private static volatile Car car; 11 | 12 | public static Car getCar() 13 | { 14 | if(car==null) 15 | { 16 | synchronized (Car.class) 17 | { 18 | if(car == null) 19 | { 20 | car = new Car(); 21 | } 22 | } 23 | } 24 | return car; 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /Exercise023/src/Age.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/8/22. 3 | */ 4 | /* 5 | 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。 6 | 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 7 | 8 | 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推, 9 | 推到第一人(10岁),再往回推。 10 | */ 11 | public class Age { 12 | public static void main(String[] args) { 13 | System.out.println(age(5,2)); 14 | } 15 | 16 | private static int age(int m,int n) 17 | { 18 | if(m==1) 19 | return 10; 20 | else 21 | return age(m-1,n)+n; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Exercise040/src/Exercise040.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/10/6. 3 | */ 4 | /* 5 | 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了 6 | 一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子 7 | 都是这样做的,问海滩上原来最少有多少个桃子? 8 | */ 9 | public class Exercise040 { 10 | public static void main(String[] args) { 11 | int a = peach(0); 12 | System.out.println("Peach: "+ a); 13 | } 14 | 15 | private static int peach(int n) 16 | { 17 | if(n==5) 18 | return 1; 19 | else 20 | return peach(n+1)*5+1; 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /Exercise032/src/Number.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /** 4 | * Created by apple on 2017/9/9. 5 | */ 6 | /* 7 | 题目:取一个整数a从右端开始的4~7位。 8 | */ 9 | public class Number { 10 | public static void main(String[] args) { 11 | System.out.println("Please input a number longer than 7 digits."); 12 | Scanner s = new Scanner(System.in); 13 | long a = s.nextLong(); 14 | operation(a); 15 | } 16 | 17 | private static void operation(long a) 18 | { 19 | long i = a/1000; 20 | long j = a/10000000; 21 | long c = i-j*10000; 22 | System.out.println(c); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Exercise013/PerfectSquire.java: -------------------------------------------------------------------------------- 1 | /* 2 | 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 3 | */ 4 | /** 5 | * Created by apple on 2017/8/17. 6 | */ 7 | public class PerfectSquire { 8 | public static void main(String[] args) { 9 | perfectSquire(10000); 10 | } 11 | 12 | private static void perfectSquire(int n) 13 | { 14 | int a = 0; 15 | for (int i=0;ia[x]) 24 | { 25 | x = i; 26 | } 27 | } 28 | int temp1 = a[x]; 29 | a[x] = a[0]; 30 | a[0] = temp1; 31 | for(int i=0;i=a.length-m) 24 | { 25 | c[i-a.length+m] = a[i]; 26 | } 27 | } 28 | for (int i=0;i=m) 35 | { 36 | a[i] = b[i-m]; 37 | } 38 | } 39 | for (int i=0;ia[j+1]) 34 | { 35 | int t = a[j]; 36 | a[j] = a[j+1]; 37 | a[j+1] = t; 38 | } 39 | } 40 | } 41 | for (int i=0;i<10;i++) 42 | System.out.print(a[i]+" "); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Exercise033/src/Main.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/9/17. 3 | */ 4 | /* 5 | 题目:打印出杨辉三角形 6 | 7 | 程序分析: 8 | 9 | 1 10 | 11 | 1 1 12 | 13 | 1 2 1 14 | 15 | 1 3 3 1 16 | 17 | 1 4 6 4 1 18 | 19 | 1 5 10 10 5 1 20 | 21 | */ 22 | public class Main { 23 | public static void main(String[] args) { 24 | printNumber(20); 25 | } 26 | 27 | private static void printNumber(int x) { 28 | int[][] a = new int[x][2*x+1]; 29 | 30 | a[0][x] = 1; 31 | 32 | for (int i=1;iy则将x与y的值进行交换,然后再用x与z进行比较, 7 | 如果x>z则将x与z的值进行交换,这样能使x最小。 8 | */ 9 | /** 10 | * Created by apple on 2017/8/19. 11 | */ 12 | public class Arrange { 13 | public static void main(String[] args) { 14 | System.out.println("Please input three number:X,Y,Z."); 15 | Scanner n = new Scanner(System.in); 16 | System.out.print("X: "); 17 | int x = n.nextInt(); 18 | System.out.print("Y: "); 19 | int y = n.nextInt(); 20 | System.out.print("Z: "); 21 | int z = n.nextInt(); 22 | compare(x,y,z); 23 | } 24 | 25 | private static void compare(int x,int y,int z) 26 | { 27 | int i; 28 | if(x>y) 29 | { 30 | i = x; 31 | x = y; 32 | y = i; 33 | } 34 | if(y>z) 35 | { 36 | i = y; 37 | y = z; 38 | z = i; 39 | } 40 | if(x>y) 41 | { 42 | i = x; 43 | x = y; 44 | y = i; 45 | } 46 | System.out.println(x+" "+y+" "+z); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Exercise037/src/exercise.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by apple on 2017/9/22. 3 | */ 4 | /* 5 | 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 6 | */ 7 | public class exercise { 8 | public static void main(String[] args) { 9 | int a= weedOut(100); 10 | System.out.println(a); 11 | } 12 | 13 | private static int weedOut(int n) 14 | { 15 | int[] a = new int[n]; 16 | for(int i=0;i4-i&&j<4+i) 29 | { 30 | System.out.print("*"); 31 | } 32 | else 33 | { 34 | System.out.print(" "); 35 | } 36 | } 37 | System.out.println(); 38 | } 39 | 40 | for(int i=0;i<4;i++) 41 | { 42 | for(int j=0;j<8;j++) 43 | { 44 | if(j>i&&j<8-i) 45 | { 46 | System.out.print("*"); 47 | } 48 | else 49 | { 50 | System.out.print(" "); 51 | } 52 | } 53 | System.out.println(); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Exercise029/src/Summation.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /** 4 | * Created by apple on 2017/8/25. 5 | */ 6 | /* 7 | 题目:求一个3*3矩阵对角线元素之和 8 | 9 | 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 10 | */ 11 | public class Summation { 12 | public static void main(String[] args) { 13 | int[][] a = new int[3][3]; 14 | Scanner s = new Scanner(System.in); 15 | System.out.println("Please input ten numbers"); 16 | for (int i=0;i<3;i++) 17 | { 18 | for (int j=0;j<3;j++) 19 | { 20 | a[i][j] = s.nextInt(); 21 | if(i==3&&j==3) 22 | { 23 | break; 24 | } 25 | } 26 | } 27 | matrix(a); 28 | } 29 | 30 | private static void matrix(int a[][]) 31 | { 32 | int sum1 = 0; 33 | int sum2 = 0; 34 | for(int i=0;ib) { 35 | c[i] = b; 36 | for (int j = 0; j < i; j++) { 37 | c[j] = a[j]; 38 | } 39 | for (int k = i; k < a.length-1; k++) { 40 | c[k + 1] = a[k]; 41 | } 42 | break; 43 | } 44 | } 45 | return c; 46 | } 47 | 48 | private static int[] insect2(int a[],int b) 49 | { 50 | int m = a.length; 51 | for(int i=0;ib) { 54 | int temp; 55 | temp = a[i]; 56 | a[i] = b; 57 | for (int j= a.length-1; j>i+1; j--) { 58 | a[j] =a[j-1]; 59 | } 60 | a[i+1] = temp; 61 | break; 62 | } 63 | } 64 | return a; 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /Exercise012/Bonus.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /* 4 | 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 5 | 6 | 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 7 | */ 8 | /** 9 | * Created by apple on 2017/8/17. 10 | */ 11 | public class Bonus { 12 | public static void main(String[] args) { 13 | long a; 14 | System.out.println("Please input the profit"); 15 | Scanner n = new Scanner(System.in); 16 | a = n.nextLong(); 17 | bonus(a); 18 | } 19 | 20 | private static void bonus(long profit) 21 | { 22 | long m = 0; 23 | long n = profit; 24 | 25 | if(profit>1000000){ 26 | 27 | profit = n-1000000; 28 | 29 | n = 1000000; 30 | 31 | m = (long) (m + profit*0.01); 32 | 33 | } 34 | 35 | if(profit>600000){ 36 | 37 | profit = n-600000; 38 | 39 | n = 600000; 40 | 41 | m = (long) (m + profit*0.015); 42 | 43 | } 44 | 45 | if(profit>400000){ 46 | 47 | profit = n-400000; 48 | 49 | n = 400000; 50 | 51 | m = (long) (m + profit*0.03); 52 | 53 | } 54 | 55 | if(profit>200000){ 56 | 57 | profit = n-200000; 58 | 59 | n = 200000; 60 | 61 | m = (long) (m + profit*0.05); 62 | 63 | } 64 | 65 | if(profit>100000){ 66 | 67 | profit = n-100000; 68 | 69 | n = 100000; 70 | 71 | m = (long) (m + profit*0.075); 72 | 73 | } 74 | 75 | m = (long) (m + n*0.1); 76 | 77 | System.out.println("Bonus: "+m); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /Exercise014/Date.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /* 4 | 题目:输入某年某月某日,判断这一天是这一年的第几天? 5 | 6 | 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天. 7 | 特殊情况:闰年且输入月份大于3时需考虑多加一天。 8 | */ 9 | /** 10 | * Created by apple on 2017/8/18. 11 | */ 12 | public class Date { 13 | public static void main(String[] args) { 14 | System.out.println("Please input the year, month and day."); 15 | Scanner scan = new Scanner(System.in); 16 | int year = scan.nextInt(); 17 | int month = scan.nextInt(); 18 | int day = scan.nextInt(); 19 | day(year,month,day); 20 | } 21 | 22 | private static void day(int year,int month,int day) 23 | { 24 | int date = 0; 25 | if(year%4==0&&month>2) 26 | { 27 | date = date+1; 28 | } 29 | switch (month)//31 28 31 30 31 30 31 31 30 31 30 31 30 | { 31 | case 1: 32 | date = date + day; 33 | break; 34 | case 2: 35 | date = date + 31 + day; 36 | break; 37 | case 3: 38 | date = date + 59 + day; 39 | break; 40 | case 4: 41 | date = date + 90 + day; 42 | break; 43 | case 5: 44 | date = date + 120 + day; 45 | break; 46 | case 6: 47 | date = date + 151 + day; 48 | break; 49 | case 7: 50 | date = date + 181 + day; 51 | break; 52 | case 8: 53 | date = date + 212 + day; 54 | break; 55 | case 9: 56 | date = date + 243 + day; 57 | break; 58 | case 10: 59 | date = date + 273 + day; 60 | break; 61 | case 11: 62 | date = date + 304 + day; 63 | break; 64 | case 12: 65 | date = date + 334 + day; 66 | break; 67 | } 68 | System.out.println("Date: " + date); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /Exercise026/src/Week.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /** 4 | * Created by apple on 2017/8/24. 5 | */ 6 | /* 7 | 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 8 | 9 | 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 10 | Monday 11 | Tuesday 12 | Wednesday 13 | Thursday 14 | Friday 15 | Saturday 16 | Sunday 17 | */ 18 | public class Week { 19 | public static void main(String[] args) { 20 | Scanner s = new Scanner(System.in); 21 | System.out.println("Please input the first letter"); 22 | String m = s.next(); 23 | switch(m) { 24 | case "m": 25 | System.out.println("Monday"); 26 | break; 27 | case "w": 28 | System.out.println("Wednesday"); 29 | break; 30 | case "f": 31 | System.out.println("Friday"); 32 | break; 33 | case "t": 34 | System.out.println("Please input the second number"); 35 | String n = s.next(); 36 | switch (n) 37 | { 38 | case "u": 39 | System.out.println("Tuesday"); 40 | break; 41 | case "h": 42 | System.out.println("Thursday"); 43 | break; 44 | default: 45 | System.out.println("Input error"); 46 | } 47 | break; 48 | case "s": 49 | System.out.println("Please input the second number"); 50 | String o = s.next(); 51 | switch (o) 52 | { 53 | case "a": 54 | System.out.println("Saturday"); 55 | break; 56 | case "u": 57 | System.out.println("Sunday"); 58 | break; 59 | default: 60 | System.out.println("Input error"); 61 | } 62 | break; 63 | default: 64 | System.out.println("Input error"); 65 | break; 66 | } 67 | } 68 | 69 | 70 | } 71 | -------------------------------------------------------------------------------- /Exercise014/DateNew.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | /* 4 | 题目:输入某年某月某日,判断这一天是这一年的第几天? 5 | 6 | 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天. 7 | 特殊情况:闰年且输入月份大于3时需考虑多加一天。 8 | */ 9 | /** 10 | * Created by apple on 2017/8/18. 11 | */ 12 | public class Date { 13 | public static void main(String[] args) { 14 | System.out.println("Please input the year, month and day."); 15 | Scanner scan = new Scanner(System.in); 16 | int year = scan.nextInt(); 17 | int month = scan.nextInt(); 18 | int day = scan.nextInt(); 19 | day(year,month,day); 20 | date(year,month,day); 21 | } 22 | 23 | private static void day(int year,int month,int day) 24 | { 25 | int date = 0; 26 | if(year%4==0&&month>2) 27 | { 28 | date = date+1; 29 | } 30 | switch (month)//31 28 31 30 31 30 31 31 30 31 30 31 31 | { 32 | case 1: 33 | date = date + day; 34 | break; 35 | case 2: 36 | date = date + 31 + day; 37 | break; 38 | case 3: 39 | date = date + 59 + day; 40 | break; 41 | case 4: 42 | date = date + 90 + day; 43 | break; 44 | case 5: 45 | date = date + 120 + day; 46 | break; 47 | case 6: 48 | date = date + 151 + day; 49 | break; 50 | case 7: 51 | date = date + 181 + day; 52 | break; 53 | case 8: 54 | date = date + 212 + day; 55 | break; 56 | case 9: 57 | date = date + 243 + day; 58 | break; 59 | case 10: 60 | date = date + 273 + day; 61 | break; 62 | case 11: 63 | date = date + 304 + day; 64 | break; 65 | case 12: 66 | date = date + 334 + day; 67 | break; 68 | } 69 | System.out.println("Date: " + date); 70 | } 71 | 72 | private static void date(int year,int month,int day) 73 | { 74 | int date = 0; 75 | if(year%4==0&&month>2) 76 | { 77 | date = date+1; 78 | } 79 | int[] monthDate = new int[]{0,31,28,31,30,31,30,31,31,30,31,30}; 80 | for(int i=0;i