课堂教学教案教师姓名: ***** 课程名称:Java程序设计授课时数:2 第2次课附录22.1Java开发环境●Java虚拟机执行Java程序动态性异常处理多线程●JDKJDK的安装与设置1. 安装JDK2. 设置环境变量:设置Path和Classpath两个环境变量●Java源程序结构➢Package && import➢public class 或interface➢class && interface●MyEclipse集成开发环境JAVA集成开发工具(将课本第十章介绍的Eclipse开发环境的使用提前介绍,详细内容参照PPT10●JAVA虚拟机执行JAVA程序的流程2.2 Java语言的特点●simple 简单●object-oriented 纯面向对象●distributed 分布式●interpreted 解释型●robust 健壮性●secure 安全性●architecture-neutral 结构中立●portable 可移植性●high-performance 高性能●multi-threaded 多线程●dynamic 动态2.3 Java程序的几种类型⏹Application❖“Java应用程序”是可以独立运行的Java程序。
❖由Java解释器控制执行。
⏹Applet❖“Java小程序”不能独立运行,而是被嵌入到Web页中。
❖由Java兼容浏览器控制执行。
2.4 Java应用程序编译(字符界面)⏹ 1. Application❖例1 显示字符串的Application应用程序⏹ 2.Applet❖例12 显示字符串的Applet应用程序编程题:10.分别用for,while,do-while三种循环语句计算一个正数的阶乘(1)for(i=1,i<=10,i++){int Sum=1;Sum=Sum*i;}(2)int i=1;while(i<=10){int Sum=1;Sum=Sum*i;i++;}int i=Sum=1;do{Sum=Sum*i;i++;}while(i<=10);11.输出以下数字的形式;(1)0000011101220123〖解答〗采用二重循环的程序如下。
public class Phalanx{public static void main(String args[]){int n=4; //阶数for (int i=0;i<n;i++){for (int j=0;j<n;j++)System.out.print(" "+((i<j)?i:j));System.out.println();}}}(2)输出下列形式的数字三角阵(当n=4时)。
11 2 11 2 3 2 11 2 3 4 3 2 1〖解答〗采用二重循环的程序如下。
public class Tower{ public static void main(String args[]){ int n=4; //行数for (int i=1;i<=n;i++){ for (int j=1;j<=n-i;j++) //前导空格System.out.print(" ");for (int j=1;j<=i;j++)System.out.print(" "+j);for (int j=i-1;j>0;j--)System.out.print(" "+j);System.out.println();}}}12.下列程序希望用for语句求出1~n累加和并显示,请问程序有错误吗?错在哪里?输出结果i和s的值分别是多少?int i=1,n=10,s=0;for(i=1,i<=n,i++);s+=i;System.out.pointln(“Sum=1+……+”+n+”=”+s);有错误,正确的如下int i=1,n=10,s=0;for(i=1,i<=n,i++)s+=i;System.out.pointln(“Sum=1+……+”+n+”=”+s);13.编程验证哥德巴赫猜想。
哥德巴赫猜想:(1)任何大于2的偶数都可以表示为2个素数之和,如16=3+13,16=5+11(2)任何大于5的奇数都可以表示为3个素数之和,如11=2+2+7,11=3+3+5〖解答〗程序如下。
public class Goldbach{ static final int MAX=30; //数据范围static int[] prime=null; //存放素数的一维数组static int number; //素数个数,即数组的实际元素个数public Goldbach(int n) //输出n的哥德巴赫算式{ if (prime==null)init();if (n%2==0) //偶数{ int i=0;while (i<number && prime[i]<=n/2){ if (isPrime(n-prime[i]))System.out.print(n+"="+prime[i]+"+"+(n-prime[i])+" ");i++; } }else //奇数{ int i=0;while (i<number && prime[i]<=n/3){ int j=i; //如果j=0,则会出现重复的算式while (j<number && prime[j]<=n/3){if (isPrime(n-prime[i]-prime[j]))System.out.print(n+"="+prime[i]+"+"+prime[j]+"+" +(n-prime[i]-prime[j])+" ");j++;} i++; } }System.out.println();}public static void init() //初始化数组,筛选法求素数{ prime = new int[30];prime[0]=2; //已知的最小素数number=1; //素数个数int i=1; //下一个素数应存放的数组下标位置int k=3; //从最小奇数开始测试,所有偶数不需测试do{int j=0;while ((j<number) && (k % prime[j]!=0)) //用已知素数prime[j]测试kj++;if (j==number) //k是素数{ prime[i]=k; //将k添加到数组prime中i++;number++; }k+=2; //测试下一个奇数是否是素数} while(k<MAX);output();}public static void output() //输出素数{ System.out.println("All primes in 2~"+MAX+" are: ");for (int i=0;i<number;i++){ System.out.print(" "+prime[i]);if ((i+1)%10==0)System.out.println(); //每行写10个数}System.out.println("\nnumber="+number);}public static boolean isPrime(int k) //判断k是否为素数,即在prime中查找k值{ boolean yes=false;int i=0;while (!yes && i<=number && prime[i]<=k)if (prime[i]==k)yes=true;else i++;return yes;}public static void main(String args[]){ for(int i=4;i<Goldbach.MAX;i+=2)new Goldbach(i);for(int i=7;i<Goldbach.MAX;i+=2)new Goldbach(i);} }程序运行结果如下:All primes in 2~30 are:2357111317192329number=10偶数4=2+26=3+38=3+510=3+7 10=5+512=5+714=3+11 14=7+716=3+13 16=5+1118=5+13 18=7+1120=3+17 20=7+1322=3+19 22=5+17 22=11+1124=5+19 24=7+17 24=11+1326=3+23 26=7+19 26=13+1328=5+23 28=11+17奇数7=2+2+39=2+2+5 9=3+3+311=2+2+7 11=3+3+513=3+3+715=2+2+11 15=3+5+7 15=5+5+517=2+2+13 17=3+3+11 17=5+5+719=3+3+13 19=3+5+1121=2+2+17 21=3+5+13 21=3+7+11 21=5+5+11 21=7+7+723=2+2+19 23=3+3+17 23=3+7+13 23=5+5+13 23=5+7+1125=3+3+19 25=3+5+17 25=5+7+13 25=7+7+1127=2+2+23 27=3+5+19 27=3+7+17 27=5+5+17 27=7+7+1329=3+3+23 29=3+7+19 29=5+5+19 29=5+7+17不能有重复表达式,例如19=3+3+13 19=3+5+11 19=5+3+1121=2+2+17 21=3+5+13 21=3+7+11 21=5+3+13 21=5+5+11 21=7+3+11 21=7+7+714.Java的数组比C++的数组有哪些优越之处?【答】Java语言不支持C++的指针类型,对数组的操作只能按照数组方式,不能使用指针。
Java的数组都是动态数组,并且是引用数据类型,提高了安全性和简单性。
另外,Java语言具有资源回收机制,能够自动收回不再使用的资源,一般情况下程序不需要归还数组所占的内存空间。
15.作为引用数据类型,数组变量与基本数据类型的变量使用时有哪些区别?【答】数组变量与基本数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间的赋值方式也不同。