Java 程序设计 第一章 Java 程序是由什么组成的?一个程序中必须有 public 类吗?Java 源文件的命名规则是怎样 的? 答:一个 Java 源程序是由若干个类组成。一个 Java 程序不一定需要有 public 类:如果 源文件中有多个类时,则只能有一个类是 public 类;如果源文件中只有一个类,则不将该类 写成 public 也将默认它为主类。源文件命名时要求源文件主名应与主类(即用 public 修饰的 类)的类名相同,扩展名为.java。如果没有定义 public 类,则可以任何一个类名为主文件名, 当然这是不主张的,因为它将无法进行被继承使用。另外,对 Applet 小应用程序来说,其 主类必须为 public,否则虽然在一些编译编译平台下可以通过(在 BlueJ 下无法通过)但运 行时无法显示结果。 2、怎样区分应用程序和小应用程序?应用程序的主类和小应用程序的主类必须用 public 修 饰吗? 答:Java Application 是完整的程序,需要独立的解释器来解释运行;而 Java Applet 则是 嵌在 HTML 编写的 Web 页面中的非独立运行程序,由 Web 浏览器内部包含的 Java 解释器 来解释运行。 在源程序代码中两者的主要区别是:任何一个 Java Application 应用程序必须有且只有 一个 main 方法,它是整个程序的入口方法;任何一个 Applet 小应用程序要求程序中有且必 须有一个类是系统类 Applet 的子类,即该类头部分以 extends Applet 结尾。 应用程序的主类当源文件中只有一个类时不必用 public 修饰,但当有多于一个类时则主 类必须用 public 修饰。小应用程序的主类在任何时候都需要用 public 来修饰。 3、开发与运行 Java 程序需要经过哪些主要步骤和过程? 答:主要有三个步骤 (1)、用文字编辑器 notepad(或在 Jcreator,Gel, BuleJ,Eclipse, Jbuilder 等)编写源文件; (2)、使用 Java 编译器(如 Javac.exe)将.java 源文件编译成字节码文件.class; (3)、运行 Java 程序:对应用程序应通过 Java 解释器(如 java.exe)来运行,而对小应用程 序应通过支持 Java 标准的浏览器(如 Microsoft Explorer)来解释运行。 4、安装 JDK 之后如何设置 JDK 系统的 PATH,CLASSPATH?他们的作用是什么? 答、更新系统 PATH 的方法随 Windows 版本不同而不同。对于 Windows 95/98,可以将 下列项目作为 C:\autoexec.bat 文件的最后一行: SET PATH = C:\j2sdk1.4.2\bin;%PATH% 当程序需要第三方的类库支持, 而且比较常用, 就可以采用此种方法.比如常用的数据 库 驱 动 程 序 , 写 servlet 需 要 的 servlet 包 等 等 . 设 置 方 法 就 是 在 环 境 变 量 中 加 入 CLASSPATH. 然后就可以直接编译运行了.Java 运行环境从 CLASSPATH 环境变量中寻找要 执行的用户项目(三方的类库)。可以按如下的方式设置 SET CLASSPATH=.;C:\J2SDK1.4.2\jre\lib\jaws.jar;%CLASSPATH% 通常我们要从当前目录中寻找用户类,因为开发的程序相关的类放在这里,. 表示当前 工作目录. 5、Java 语言特点是什么? 答:Java 是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的 性能很优异的多线程的动态的语言。 6、简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向过程的编 程语言各两种。 解:面向过程问题求解利用计算机能够理解的离散逻辑来描述和表达所求解的问题本身 以及具体问题解决的过程,它的核心是算法和数据结构,面向对象的问题求解则利用符合人 们日常思维习惯的方式去模拟所求解的问题,模拟它的构成、特征和各种动态行为,从而得 到问题的解答。它的核心是类、对象和设计模式。 常见的面向过程的编程语言有 BASIC,FORTRAN,Pascal, C 等。常见的面向对象的编 程语言有 Smalltalk-80,Object Pascal, C++, Java 等。 第一章 习题及思考题 1. 试分析基本数据类型和引用数据类型的基本特点? 答:Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。 引用类型都是用类或对象实现的 2. 请使用异或运算符^, 实现两个整数的交换。 答:int x=5,y=19; x=x^y; y=y^x; x=x^y; 3. 下列哪个是合法的标识符:( )。 A、a=b B、_Hello C、2nd D、Chong qing 答:B 4. 下列哪些是合法的标识符()。 A、new B、class C、int D、const2 答:D 5. 如果定义有变量double d1, d2=4.0则下列说法正确的是: A、变量d1,d2均初始化为4.0 B、变量d1没有初始化,d2初始化为4.0 C、变量d1,d2均未初始化 D、变量d2没有初始化,d1初始化为4.0 答:B 6. 判断题:所有的变量在使用前都必须进行初始化。( ) 答:正确。 7. 内部数据类型byte的取值范围是:( ) A、0~65, 535 B、(-128)~127 C、(-32,768)~32,767 D、(-256)~255 答:B 8. 下列哪些是不能通过编译的语句:( ) A、int i = 32; B、float f = 45.0; C、double d = 45.0; D、char a=‘c’; 答: B 9. 判断题:Java中数据类型的长度与具体使用的机器相关。( ) 答:错误。 10. 如果定义有double x;float y;int m,则表达式x*y-m的类型为( ): A、double B、float C、int D、short 答:A 11. 如果定义有short s;byte b;char c,则表达式s*b+c的类型为( ): A、char B、short C、int D、byte 答:C 12. 已知int i= 2147483647; ++i; 则i的值等于多少( ) A -2147483648 B 2147483647 C 2147483648 答:A 13. 已知byte i= 127; ++i; 则i的值等于多少( ) A -128 B 127 C 128 答:A 14. 已知byte i= 127; i=i+1;这两行语句能否编译成功?( ) 答:编译不成功。 15. 执行以下程序段int a=5,b; b=++a*3后b的值为:( ) A、17 B、18 C、16 D、15 答: B 16. 如果x=3,y=5,则表达式x|y的值为:( ) A、15 B、8 C、1 D、7 答:D 17. 如果int a=3,b=2,则执行a*=b+8后a的值为:( ) A、20 B、14 C、30 D、16 答:C 18. 若所用变量都已正确定义,以下选项中,非法的表达式是:( ) A、a!=4||b==1 B、'a'%3 C、'a'=1/2 D、'A'+32 答:C 19. 设有定义语句int a[]={1,1,2}; 则以下对此语句的叙述错误的是( )。 A、定义了一个名为a的一维数组 B、a数组有3个元素 C、a数组的下标为1~3 D、数组中的每个元素是整型 答:C 20. 以下数组初始化形式正确的是:( ) A、int t1[][]={{1,2},{3,4},{5,6}} B、int t2[][]={1,2,3,4,5,6} C、int t3[3][2]={1,2,3,4,5,6} D、int t4[][];t4={1,2,3,4,5,6} 答:A 第二章 习题及思考题 1、编写一个程序,用选择法对数组a[]={20,10,55,40,30,70,60,80,90,100}进行从大到小 的排序 解: public class ArraySort{ public static void main(String args[]){ int array[]={20,10,55,40,30,70,60,80,90,100}; int i,j,k,t; int m=array.length; for(i=0;i=0?disc:-disc; p2=Math.sqrt(absdisc)/(2.0*a); if(disc<0.0) { System.out.println("Complex roots:"+p1+"+or-"+p2+"i"); } else { x1=p1+p2; x2=p1-p2; System.out.println("First Real roots:"+x1); System.out.println("Second real roots:"+x2); } } } // endfor } } 5、求前40个Fibonacci数列。 Fibonacci数列:1,1,2,3,5,8,13,21,34,… 从数列看到:F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n≥3) 解: public class Fibonacci { public static void main(String args[]) { long f1,f2; int i; f1=1; f2=1; System.out.println (f1+" for (i=3;i<=20;i++) { f1=f1+f2; f2=f1+f2; System.out.println (f1+" } } } "+f2); "+f2); 6、已知公鸡5元1只,母鸡3元一只,小鸡1元3只,要求用100元刚好买100只鸡,问有多少种 采购方案。 解:public class Loop_Loop3_20 { public static void main(String args[]) { int I,J,K; System.out.println(" I J K "); for (I=0;I<=20;I++ ) // I 为公鸡数 { for ( J=0;J<=33;J++) // J 为母鸡公鸡数 { K=100-I-J; // K 为小鸡数 if (5*I+3*J+K/3.0==100) System.out.println(" "+I+" "+J+" "+K); } } }} 7、判断一个字符串是否是回文,例如“rotor“反转之后还是”rotor“,所以是回文。需 查阅String类的一些方法。 解: public class Rotor { public static void main(String args[]) { String str="rotor",sub1; int i=0,n; boolean yes=true; if (args.length>0) str=args[0]; System.out.println("str="+str); n=str.length(); char ch1,ch2; String temp=""; for (i=0;i