20165312-第4周-课上内容补做以及知识点总结
1、课上内容补做
- 教材代码完成情况测试p45
这题很快就做完了,然后忘记提交了。。就开始做递归。想起来的时候已经过了时间。
public class Example3_7 {public static void main(String args[]) {int sum=0,i,j;for(i=1;i<=10;i++) {if(i%2==0) { //计算1+3+5+7+9continue;}sum=sum+i;}System.out.println("sun="+sum);for(j=2;j<=5312;j++) {for(i=2;i<=j/2;i++) { if(j%i==0)break;}if(i>j/2) {System.out.println(""+j+"是素数");}}}
}
运行截图:
- 递归与循环
课堂上的代码出现了一个细小的错误,导致无论输入什么数字,都会退出。出现问题的地方:
for(int i=1;i<args.length;i++) {tmp[i] = Integer.parseInt(args[i]);
}
i从1开始,就导致是从第二个数字开始转化成int型,所以无论输入什么,都会退出。
正确代码:
public class CLSumRecursion {public static void main(String args[]) {int sum = 0;if(args.length < 1) {System.out.println("Usage:java CLSumRecursion num1 num2 ...");System.exit(0);}int tmp[] = new int[args.length];for(int i=0;i<args.length;i++) {tmp[i] = Integer.parseInt(args[i]);}if(tmp[0]<=0) {System.out.println("Please check your input!");System.exit(0);}else {for(int j=1;j<=tmp[0];j++) {sum += fact(j);}}if(sum<=0) {System.out.println("Please check your input!");System.exit(0);}elseSystem.out.println(sum);}public static int fact(int n) {if(n == 0)return 1;elsereturn n*fact(n-1);}
}
运行截图:
- JDB
- jdb CLSumRecursion 3
- jdb CLSumRecursion 1
- jdb CLSumRecursion 2
- jdb CLSumRecursion 3
2.知识点总结
- 参考Integer类中的方法把字符串转为整数
public static void main(String [] args) {int [] tmp = new int [args.length];for(int i=0; i<args.length; i++) {tmp[i] = Integer.parseInt(args[i]);}
}
运行时为java 文件名 int 型数据
jdb调试时 jdb 文件名 int型数据
3.第二章编程题目
- 编写一个程序,给出汉字“你”,“我”,“他”在Unicode表中的位置
public class exam2_1 {public static void main(String args[]) {char a = '你';char b = '我';char c = '他';System.out.println("汉字:"+a+"的位置:"+(int)a);System.out.println("汉字:"+b+"的位置:"+(int)b);System.out.println("汉字:"+c+"的位置:"+(int)c);}
}
- 编写一个程序,输出全部的希腊字母
public class exam2_2{public static void main(String[] args) {for (int j = 913; j < 930; j++) { //j代表每个字母的ASCII代码System.out.print((char)j+" "); //将ASCII代码转换成字符就是每个字母了}for (int j = 932; j < 938; j++) { //中间空了一个System.out.print((char)j+" ");}for (int j = 945; j < 970; j++) { //大小写中间空了好几个,都跳过了System.out.print((char)j+" ");}}
}
4.第三章编程题目
- 编写应用程序求1!+2!+……+10!
public class exam3_1 {public static void main(String args[]) {int sum = 0;int n = 10;for(int i = 1;i<=n;i++) {sum = sum+fact(i);}System.out.println(sum);}public static int fact(int i) {if(i == 0)return 1;elsereturn i*fact(i-1);}
}
运行截图:
- 编写一个程序求100以内的素数
public class exam3_2 {public static void main(String args[]) {int i,j;for(i=2;i<=100;i++) {for(j=2;j<=i/2;j++) {if(i%j==0)break;}if(j>i/2)System.out.println(" "+i+"是素数");}}
}
运行截图:
- 分别用do-while和for循环计算1+1/2!+1/3!+……的前20项和
//for循环语句
public class exam3_3_1 {public static void main(String args[]) {double sum = 0;for(int i=1;i<=20;i++) {sum = sum+1.0/fact(i);}System.out.println(sum);}public static int fact(int n) {if(n==0)return 1;elsereturn n*fact(n-1);}
}
运行截图:
//do-while
public class exam3_3_2 {public static void main(String args[]) {double sum = 0;int i = 1;do {sum=sum+1.0/fact(i);i++;}while(i<=20);System.out.println(sum);}public static int fact(int n) {if(n==0)return 1;elsereturn n*fact(n-1);}
}
运行截图:
- 一个数如果恰好等于它的因子之和,这个数称为完数。编写程序求1000以内的所有完数
public class exam3_4 {public static void main(String args[]) {int i;for(i=1;i<=1000;i++) {if(wanshu(i)==1)System.out.println(i+"是完数");elsecontinue;}}public static int wanshu(int i) {int sum = 0;for(int j=1;j<i;j++) {if(i%j==0)sum=sum+j;}if(sum==i)return 1;elsereturn 0;}
}
运行截图:
- 编写一个程序,使用for循环语句计算8+88+888+……前10项之和
public class exam3_5 {public static void main(String args[]) {long i=1,sum=0,a=8,item=a;for(i=1;i<=10;i++){sum=sum+item;item=item*10+a;}System.out.println(sum);}
}
运行截图:
- 编写一个程序,输出满足1+2+3+……+n<8888的最大正整数n
public class exam3_6 {public static void main(String args[]) {int sum = 0;int i = 1;while(sum<8888){sum=sum+i;i++;}System.out.println(i-1);}
}
运行截图:
参考资料:2016-2017-2 《Java 程序设计》课堂实践项目