编程题
1、编程序,输入a,b,c,求方程 a+bx+c=0 的解。
package 一元二次方程2;
import java。util。Scanner;
public class 一元二次方程2 {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
double d=0;
int i=0;
double a=0;
double b=0;
double c=0;
double dis=0;
do{
i++;
if(i>1){
System。out。println("数值错误,请重新输入:”);
}
System.out.println("请输入a的值:”);
a=reader.nextInt();
System。out。println(”请输入b的值:");
b=reader.nextInt();
System。out。println("请输入c的值:");
c=reader。nextInt();
double dis2=b*b—4*a*c;
d=dis2;
dis=Math。sqrt(b*b—4*a*c);
}while(d<0);
double x1=(-1*b+dis)/(2*a);
double x2=(-1*b-dis)/(2*a);
System.out。println(x1);
System.out。println(x2);
}
}
2、编程计算: 1*2*3+3*4*5+…+99*100*101 的值。
package 作业618;
public class 作业618 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=50;i++){
int a=(2*i-1)*(2*i)*(2*i+1);
sum=sum+a;
}System。out.println(sum);
}
}
3、求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 。
package 水仙花数;
public class 水仙花数 {
public static void main(String[] args) {
for(int i=100;i〈1000;i++){
int y=i%10;
int x=i/10%10;
int z=i/10/10%10;
int sum=x*x*x+y*y*y+z*z*z;
if(sum==i){
System.out。println(i+”是水仙花数");
}
}
}
}
4、求下列式子的值,y=1—2+3-4+···+99—100并将结果输出,格式为1-2+3—4+···+99-100=表达式的值.
package 作业620;
import java.lang。StringBuffer;
public class 作业620 {
public static void main(String[] args) {
StringBuffer a=new StringBuffer();
a。append(1);
int sum=0;
int j=0;
for(int i=1;i〈=100;i++){
int b=0;
if(i%2==0){
b=—1*i;
a。append(b);
}else{
b=i;
if(j>0) a.append(”+”+b);
}
sum=sum+b;
j++;
}
String c=a。toString();
System。out。println(c+"="+sum);
}
}
5、请编制程序判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。
package 作业621;
import java.util.Scanner;
public class 作业621 {
public static void main(String[] args) {
System.out.println("请输入一个正整数:");
Scanner reader=new Scanner(System.in);
int a=reader.nextInt();
int b=a%5;
int c=a%7;
if(b==0&&c==0){
System。out.println(”YES");
}else{
System.out。println(”NO");
}
}
}
6、按以下要求编写程序
(1) 编写Animal接口,接口中声明run() 方法
(2) 定义Bird类和Fish类实现Animal接口
(3) 编写Bird类和Fish类的测试程序,并调用其中的run()方法
package 作业6231;
public class 作业623 {
public static void main(String[] args) {
Bird a=new Bird();
a.run();
Fish b=new Fish();
b.run();
}
}
interface Animal{
public void run();
}
class Bird implements Animal{
public void run(){
System.out.println(”Bird方法实现了Animal接口”);
}
}
class Fish implements Animal{
public void run(){
System。out.println(”Fish方法实现了Animal接口");
}
}
7、按以下要求编写程序
(1) 创建一个Rectangle类,添加width和height两个成员变量
(2) 在Rectangle中添加两种方法分别计算矩形的周长和面积
(3) 编程利用Rectangle输出一个矩形的周长和面积
package 作业6232;
public class Rectangle {
double width;
double height;
public static void main(String[] args) {
Rectangle mj=new Rectangle();
mj。mianji(2.5,3);
mj。zhouchang(4,5);
}
void mianji(double a,double b){
double c=a*b;
System.out。println(c);
}
void zhouchang(double a,double b){
double d=2*(a+b);
System。out.println();
}
}
8、对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为‘A’,80-分为‘B’,70—79分为‘C’,60-69分为‘D’,60分以下为‘E' 。
package 作业6233;
import java.util.Scanner;
public class 选择1 {
public static void main(String[] args) {
Scanner reader=new Scanner(System。in);
System。out.println("请输入成绩:");
double a=reader.nextDouble();
if(a>=90&&a〈=100){
System.out。println("A”);
}
else if(a<90&&a>=80){
System。out.println(”B");
}
else if(a<80&&a〉=70){
System。out。println("C”);
}
if(a<70&&a>=60){
System。out.println(”D");
}
if(a<60){
System。out。println("E”);
}
else{
System.out。println("输入的成绩错误");
}
}
}
9、设n为自然数,n!=1*2*3*···*n 称为n的阶乘,并规定0!=1。试编制程序计算2!,4!,6!和10!,并将结果输出到屏幕上.
package 阶乘1;
public class tre {
public static void main(String[] args) {
jiecheng a=new jiecheng();
a。xuhh(2);
a。xuhh(4);
a。xuhh(6);
a。xuhh(10);
}
}
class jiecheng{
int i;
void xuhh(int a){
int n=a;
int t=1;
for(i=1;i〈=n;i++){
t=t*i;
}
System。out。println(t);
}
}
10、(2。7)试编码定义一个公有类 pubtest,它含有两个浮点类型变量fvar1和 fvar2,还有一个整数类型的变量 ivar1, pubtest类中有一个方法 sumFI,它将fvar1 与ivar1 的值相加,结果放在 fvar2 中。
package 作业6281;
public class pubtest {
public static void main(String[] args) {
pubtest sum=new pubtest();
sum。sumFI(12。3f, 12);
}
float fvar1;
float fvar2;
int ivar1;
void sumFI(float a,int b){
fvar1=a;
ivar1=b;
fvar2=fvar1+ivar1;
System。out。println(fvar2);
}
}
11、(3.4)使用java.lang。Math类,生成100个0~99之间的随机整数,找出它们之中的最大者及最小者,并统计大于50的整数个数。
提示:
Math类支持random方法:
Public static synchronized double random( )
该方法返回一个0。0~1。0之间的小数,如果要得到其他范围的数,需要进行相应的转换.例如想得到一个0~99之间的整数,可以使用下列语句:
Int num=(int)(100*Math。random( ));
package 作业11;
import java。lang。Math;
public class 作业6282 {
public static void main(String[] args) {
int a[]=new int[100];
int g=0;//计数器
int min=0;//最小值标记
int max=0;//最大值标记
for(int i=0;i<100;i++){//用for循环来得到100个数
a[i]=(int)(100*Math。random());
if(a[i]〉50)
g++;
}
for(int j=0;j if(a[min]>a[j]){ min=j; } if(a[max]〈a[j]){ max=j; } } System.out.println(a[min]); System.out。println(a[max]); System.out.println(”大于50的正整数个数为”+g); } } 12、(4。3)选择一组等长的英文单词,例如,一组4个字母组成的单词: Work back come deal desk book java tool face 一组5个字母组成的单词: Watch match noise risky stock 试定义一个字符串数组,数组中每一个元素存储一个英文单词,元素个数根据选择的英语单词长度而定。再按照电话机表盘定义数字与字母的对应关系。如数字2对应a或b或c,数字5对应j或k或l.现编制一个程序,要求将用户输入的数字串转换成相应的字符串(注意一个数字串对应多个字符串),将这些字符串与数组中存储的英文单词逐个比较,如果某一字符串与英文单词匹配成功,则在屏幕上输出数字串及对应的单词,如果都不匹配,则在屏幕上输出一条信息“没有匹配的单词”.(下面代码复制粘贴时注意注释部分换行报错) package 作业12; import java。util.Scanner; public class 作业6283 { public static void main(String[] args) { String dt[]={”work”,”back","come",”deal”,"desk”,"book”,"java",”tool”,”face"}; Scanner reader=new Scanner(System。in); System.out。println("请输入一个四位数:"); int x=reader.nextInt(); longth a=new longth();//用自定义的类longth建立对象a int i=a.changdu(x);//用a对下面方法的调用 int temp=x;//将x的数值赋给temp,后面随着求x各个位数上的数使得x值发生了变化,所以在后面用到数值x初始值的地方即可以用temp来代替 StringBuffer []sz=new StringBuffer[i];//建立每个元素存储内容可以改变的字符串型数组sz,它的长度i就是调用方法所得的值 String str[]=new String[i];//建立一个长度为i的数组,为了后面将StringBuffer型数组转变成String型数组后存入其内部 int ARRAY[]=new int[4];//建立数组ARRAY来存储x每个位上的数 String basicChar=”abc*def*ghi*jkl*mno*pqrs*tuv*wxyz”; //字符串存储电话号码盘上的字母 String[] sourceStrArray = basicChar.split(”\\\\*”);//以*为分界线将字符串分割成数组 for(int T=0;T } int aaa=sz.length; for(int j=4,h=0;h<4;j—-,h++){ //这个最大的for循环是为了求得每个位上的数 int t=(int)Math.pow(10,j-1); ARRAY[h]=x/t; x=x%t; if(ARRAY[h]>=2&&ARRAY[h]<=6||ARRAY[h]==8){//结合前面,aaa的作用是起到了计数器的作用,它的值随着每一次的 aaa=aaa/3; //大for循环执行而除以3或者4,当电话盘号码对应3个字母时除以3,对应 } //4个时除以4, else if(ARRAY[h]==7||ARRAY[h]==9){//再结合这里,以9675数字为例,该数字共需要144个长度的数组来保存, //第一次求得ARRAY[0]为9,所以执行144除以4 aaa=aaa/4; }else{ System.out。println(”没有匹配的单词"); break; } for(int A=0,B=0,bbb=1;A〈sz。length;A++){ if(ARRAY[h]〉=2&&ARRAY[h]〈=6||ARRAY[h]==8){ if(A==aaa*bbb){ B++; bbb++; } int C=B%3; sz[A].append(sourceStrArray[ARRAY[h]-2]。charAt(C)); } else if(ARRAY[h]==7||ARRAY[h]==9){ if(A==aaa*bbb){ //在第一次执行内for循环时,当A小于144/4时,由于B==0,所以前144/4个元素的 B++; //第一个字母都是存储的9所对应的电话号码盘的第一个字母p,当A=144/4之后,B加了1 bbb++; //所以第二组144/4个元素存储的是9所对应电话号码盘的第二个元素q,同理,第三组144/4 } //个元素存储的是第三个字母r,最后一组144/4个元素对应的是第四个字母s int D=B%4; //第二次执行大for循环时,aaa的初始值发生了变化,每组元素的个数变成了144/4/3个 //,给每组元素的第二个字母赋值。第三次执行大for循环,每组元素个数变成144/4/3/4个 sz[A]。append(sourceStrArray[ARRAY[h]—2]。charAt(D));//依次类推,最后给每个元素存储了四个字母 } } } loop:for(int jq=0;jq〈sz.length;jq++){ str[jq]=sz[jq].toString();//将StringBuffer类型转变为String类型 for(int bq=0;bq<9;bq++){ if(str[jq].equals(dt[bq])){//相等则按要求输出,跳出两个循环 System.out。println(temp); System。out.println(dt[bq]); break loop; } } if(jq==sz。length-1){//不想等按要求输出 System.out。println("没有匹配的单词"); } } } } class longth{//建立这个类的目的是要建立一个方法来查清一共需要多少个元素来存储输入数字串所对应的字母串 int changdu(int x){ int t=1; int[]b = {0,0,0,0}; for(int a=0;a<4;a++){ b[a]=x%10; x=x/10; } for(int c=0;c<4;c++){ if(b[c]〉=2&&b[c]〈=6||b[c]==8){ t=t*3; } else if(b[c]==7||b[c]==9){ t=t*4; } } return t; } } 13、(12.10)图书馆用一个文本文件booklist.txt记录图书的书目,其中包括book1,book2,···,book10。现在又采购了一批新书,请利用本章中的内容编写一个程序,将新书的书目增加到原来的文本文件中。 (被注释掉部分是为了验证对象已被写入文件中,不需要出现在代码中,在运行本程序时一定要先在d盘建立名为“java流练习"的文件,而且由于未找到方法读取booklist1。txt中已经提前存入的十本书的信息) package 作业133; import java。io.*; public class 作业763 { public static void main(String[] args) throws Exception { T t1=new T(); t1.author="巴尔扎克"; t1。bookcode=”book11”; t1。bookname=”《高老头》”; T t2=new T(); t2。author=”巴尔扎克”; t2.bookcode=”book12”; t2.bookname="《欧也妮·葛朗台》"; T t3=new T(); t3。author="大仲马"; t3。bookcode=”book13”; t3。bookname=”《山恩仇记》"; T t4=new T(); t4.author="司汤达”; t4。bookcode="book14"; t4.bookname=”《红与黑》"; FileOutputStream out; out=new FileOutputStream(”F:\\\\java流练习\\\\bookList1。txt”); ObjectOutputStream oos=new ObjectOutputStream(out); oos。writeObject(t1); oos.writeObject(t2); oos。writeObject(t3); oos。writeObject(t4); oos。flush(); oos.close(); // ObjectInputStream ois=new ObjectInputStream(new FileInputStream("F:\\\\java流练习\\\\bookList1.txt”)); // T t5=(T)ois.readObject(); // T t6=(T)ois.readObject(); // T t7=(T)ois.readObject(); // T t8=(T)ois。readObject(); // System.out。println(t5。author+t5。bookcode+t5。bookname); // System.out。println(t6.author+t6。bookcode+t6。bookname); // System。out.println(t7.author+t7。bookcode+t7。bookname); // System.out。println(t8。author+t8。bookcode+t8。bookname); } }class T implements Serializable{ String bookname; String author; String bookcode; } 思考题 1、使用StringBuffer类与String类进行字符串连接时有何区别? String类进行字符串连接时会创建一个新的字符串对象,再将字符串常量指向这个新的字符串。 StringBuffer类进行字符串连接时会在原来的字符串后面加上新的字符串。 2、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 能作用在byte上,在jdk7。0之前,是不可以作用在long和String上.在jdk7.0之后,可以作用在long和String上。 3、abstract class和interface有什么区别? 见第24题 4、什么是Overload和Override,它们有什么区别? 方法的重写:Override 方法的重载:Overload 见第20题 5、error和exception有什么区别? Error类描述内部错误,它由系统保留,程序不能抛出这种类型的对象,Error类的对象不可捕获、不可恢复,出错时所能做的事情就是系统通知用户并终止程序。而Exception类则可供程序使用,即可捕获,可恢复。 6、(1.1)Java语言是由哪个公司推出的?简述Java语言的特点. Sun Microsystem 公司 简单性 面向对象 分布性 健壮性 安全性 体系结构中立 可移植性 解释型语言 高效性 多线程机制 动态性 7、(1。2)什么是Java虚拟机?它包指哪几部分? Java 虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是 Java语言的运行环境。 Java 虚拟机由五个部分组成:一组 指令集、一组 寄存器、一个 栈、一个无用单元收集堆(Garbage-collected—heap)、一个方法区域. 8、(l.3)简述JVM的工作机制. (未验证)第一步先加载class文件,整个过程分为装载,连接,初始化三部分。 第二部分是分配内存区域,涉及到的区域有pc寄存器,JVM栈,堆,方法区域,运行时常量池,本地方法堆栈。 第三部分是执行JVM垃圾回收。GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停. 9、(2.3)请叙述标识符的定义规则。 Java语言规定标识符由字母、数字、下划线、美元符号组成,且第一个字符不能是数字。 10、(2。4)Java有哪些基本数据类型,它们分别用什么符号来表示,各自的取值范围是多大?试着对每种数据类型定义一个变量,并给它赋一个值。 Java有四类八种基本数据类型。 属于整型的是字节型(byte),基本型(int),短整型(short),长整型(long) 属于实型的是单精度(float),双精度(double)。 字符型用char来表示 布尔型用boolean来表示 boolean是只可以取两个值,一个是true,一个是false. boolean a=true; char从unicode字符集中取值。 char b=’3’; byte可以取—128到127之间的任意整数 byte c=126; short可以取-32768到32767之间的任意整数 short d=4527; int可以取-2^31到2^31-1之间的任意整数 int e=163; long可以取值-2^63到2^63—1之间的任意整数 long f=965302l; float和double根据IEEE754-1985标准, Float取值1。2E(-38)到3.4E381(未验证) Double取值2。2E(-308)到1.8E3082(未验证) float g=88.362f; double h=23。4e3; 11、(2。5)什么是类?什么是面向对象的程序设计方法? 类是对某种具有共同特征的一类对象的定义,即类定义了一类对象的类型,属于该类型的所有对象都具有相同的变量和方法. 面向对象程序设计(OOP)是一种程序设计范型,同时也是一种程序开发的方法.面向对象程序设计可以看作一种在程序中包含各种而又互相调用的对象的思想.面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。 12、(5.1)详细说明类是如何定义的,解释类的特性及它的几个要素。 声明一个类需要四个部分,第一是用类修饰符来修饰类名。第二是说明一个类的父类。第三是说明一个类所实现的接口.第四是类体 类的三大特性是:类的继承、类的封装、类的多态 类的构成要素有成员方法和成员变量和类声明。(未验证) 13、(5.3)什么是抽象类?它如何定义? 抽象类是没有具体对象的概念类,这样的类要在class关键字前用修饰符abstract加以修饰. 14、(6.1)什么是异常?解释抛出捕获的含义。 异常指的是程序执行时出现的意外情况,是不可以预测的。(未验证) Java应用程序在运行时如果出现了一个可识别的错误,就会产生一个与该错误相对应的异常类的对象。这个对象包含了异常的类型和错误出现时所处的状态信息,该异常对象首先被交给java虚拟机,由虚拟机来寻找具体的异常处理者.在java中把产生异常对象并将其交给java虚拟机的过程称为抛出对象。 当一个异常被抛出时会有一个专门的语句来识别这个被抛出的对象,这个过程被称为异常的捕获。 15、(6.2)java是如何处理异常的? Java采用的try—catch语句来捕获和处理异常对象.一旦一个异常对象被抛出之后,用户程序就会发生程序的跳转至与这个异常对象匹配的异常处理语句块,来对异常进行处理。 16、(6.3)在什么情况下执行try语句中finally后面的代码段?在什么情况下不执行?试举例说明。 有三种执行情况,课本2页最后及265页开始 Finally语句是一种强制的,无条件执行的语句,无论程序是否出现异常,也不管try中包含何种语句,必须要执行finally中包含的语句。 举例在课本266页上方 17、(6。4)你能说出java中常见的几个异常么?他们表示什么意思?在什么情况下引起这些异常? NullPointerException:零指针异常,引用了一个空对象的属性或方法 ArrayIndexOutOfBoundsException:数组下标越界异常,数组访问越界 ClassCastException:类型转化异常,一个错误的类型转换 ArithmeticException:算数异常,算数方面引起的异常,比如用整数去整除0 18、(7。4)java中提供了几种布局管理器?简述它们之间的区别。 课本第159页最后布局管理器部分 19、(7.5)Frame和Panel默认的布局管理器分别是什么类型? Frame默认的布局管理器是BorderLayout Panel默认的布局管理器是FlowLayout 20、什么叫做方法重载?什么叫做方法重写?它们之间的区别是什么?关键字this和关键字super在成员方法中的特殊作用是什么? 重载是指在同一个类中定义多个同名的方法,这些方法同名的原因是具有相同的功能,且目的相同,但在实现该功能的具体方式和细节方面则有所不同,因此需要定义不同的实现方法.根据参数的个数类型顺序来区分不同的方法 方法重写又称方法覆盖。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 覆盖发生在父类和子类之间,两者的方法名,返回类型,参数列表完全相同 重载发生在同一个类中,java虚拟机不允许方法名相同的两个方法的参数列表也是相同的。 super:在子类中使用super来引用基类的成分(成员变量和成员方法都可以) this:this是使用该方法对象的引用,可以用它来区别成员变量和形式参数.可以用this调用自身的其它方法。也可以把this当成一个变量,它的值是当前对象的引用。 21、(11.4)什么叫做静态方法和静态变量,它们同普通的成员方法和成员变量之间有何区别? 静态方法就是类方法用static修饰,它与普通的成员方法3个区别为p74标号2下面 静态变量即是类成员变量,区别在71页第二段文字 22、(11。5)什么是抽象类?什么是抽象方法?它们有什么特点和用处? 抽象类是没有具体对象的概念类,这样的类要在class关键字前用修饰符abstract加以修饰。 以abstract修饰的位于抽象类或接口中的方法。 抽象类的特点:抽象类不能创建对象,抽象类的子类仍然可以是抽象类.继承该抽象类的类如果要创建对象,那就必须为该抽象类中的所有抽象方法提供方法定义。 抽象类的用处:将所有子类的公共属性抽取出来,在描述具体的对象时仅仅需要添加不同的属性,使得在分析和设计软件时,概念层次分明、简洁精炼,对软件的描述符合人类的思维习惯。而且由于抽象类是它所有子类的公共集合。所以可以充分利用这些公共属性来提高开发和维护程序的效率. 抽象方法的特点:只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。 抽象方法的用处:可以隐藏具体的细节信息。 23、(11。6)什么是终极类。终极方法和终极变量?定义终极类型的目的是什么? 用final关键字修饰的类被称为终极类。 由final修饰符修饰的类方法是最终方法。 final标记的变量(成员变量或局部变量)即为终极变量. 目的是不再让别的类来继承它,也就是说这个类不会有子类。 24、(11.7)什么是接口?接口的作用是什么?它与抽象类有何区别? 接口是由常量和抽象方法组成的特殊类. 接口的主要作用是可以帮助实现类似于类的多重继承的功能。 区别在p125页5。5.2上面三条, 第四条:抽象类里面的抽象方法的访问控制符可用public之外的,而接口内部抽象类的访问控制符只能是public。 25、(11.8)java中访问控制权限分为几种?它们所对应的表示关键字分别是什么?意义如何? 四种,在p66页表4。1下载本文