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+9
continue;
}
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);
}
else
System.out.println(sum);
}
public static int fact(int n) {
if(n == 0)
return 1;
else
return 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;
else
return 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;
else
return 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;
else
return 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+"是完数");
else
continue;
}
}
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;
else
return 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);
}
}
运行截图: