booleanisT=true;
for(intm=2;m
if(i%m==0){
isT=false;
}
}
if(number%i==0&&isT){
prime=prime+i+",";
}
}
returnprime;
}
publicstaticvoidmain(String[]args){
System.out.println("用户指定30的所有素数因子为:
"+isPrime(30));
}
}
2.编写一个Java程序,接受用户输入的一个1――12之间的整数(如果输入的数据不满足这个条件,则要求用户重新输入),利用switch语句输出对应的月份的天数。
packagetest;
importjava.io.*;
publicclassTest{
publicstaticvoidmain(String[]args){
System.out.print("请输入一个1-12之间的数字:
");
intnum=0;
try{
BufferedReaderbr=newBufferedReader(
newInputStreamReader(System.in));
num=Integer.parseInt(br.readLine());
}
catch(java.lang.NumberFormatExceptionnfe){
System.out.println("输入的不是数字!
");
}
catch(Exceptionex){
ex.printStackTrace();
}
if(num<0||num>12){
System.out.println("对不起你输入的不合法,请重新输入:
");
}
switch(num){
case1:
System.out.println(num+"月份有"+31+"天");
break;
case2:
System.out.println(num+"月份有"+29+"天");
break;
case3:
System.out.println(num+"月份有"+31+"天");
break;
case4:
System.out.println(num+"月份有"+30+"天");
break;
case5:
System.out.println(num+"月份有"+31+"天");
break;
case6:
System.out.println(num+"月份有"+30+"天");
break;
case7:
System.out.println(num+"月份有"+31+"天");
break;
case8:
System.out.println(num+"月份有"+31+"天");
break;
case9:
System.out.println(num+"月份有"+30+"天");
break;
case10:
System.out.println(num+"月份有"+31+"天");
break;
case11:
System.out.println(num+"月份有"+30+"天");
break;
case12:
System.out.println(num+"月份有"+31+"天");
break;
}
}
}
3.Java对标识符命名有什么规定,下面这些标识符哪些是对的?
哪些是错的,错在哪里?
(1)MyGame
(2)_isHers(3)2JavaProgram(4)Java-Visual-Machine(5)_$abc
答:
Java对标识符的定义有以下规定:
(1)标识符可以由字母、数字和两个特殊字符下划线(_)、美元符号($)组合而成。
(2)标识符必须以字母、下划线或美元符号开头。
(3)标识符中区分大小写字母。
(4)应该使标识符能一定程度上反映它所表示的变量、常量、对象或类的意义。
(1)正确的:
(1)、MyGame
(2)、_isHers(5)_$abc
错误的:
(3)2JavaProgram,不能以数字开头、(4)Java-Visual-Machine,标识符中不能使用符号“—”。
第四章
1.有哪些访问控制符?
哪些可以用于修饰类,哪些用来修饰域和方法,试述不同访问控制符的作用。
答:
类的访问控制符有一个:
public
域和方法的访问控制符有四个:
public,private,protected,privateprotected,另外还有一种没有定义专门访问控制符的缺省情况
●public:
不同包之间可用public类;主类必须是public类
●缺省访问控制符:
该类只能被同一个包内的类访问,又称包访问性
●private:
域和方法只能被该类自身访问
●protected:
域和方法能被三种类访问:
自身,同一包中的其他类,其它包中的该类的子类
privateprotected:
域和方法能被二种类访问:
自身,该类的所有子类(同一包或其它包)
2.改写本节例子UsePhoneCard成为图形界面的Applet程序,接受用户输入的卡号,密码,金额和接入号码,创建PhoneCard类的对象并输出这张电话卡的有关信息。
publicclassUsePhoneCard
{
publicstaticvoidmain(Stringargs[])
{
PhoneCardmyCard=newPhoneCard(12345678,1234,50.0,"300");
System.out.println(myCard.toString());
}
}
classPhoneCard
{
longcardNumber;
privateintpassword;
doublebalance;
StringconnectNumber;
booleanconnected;
PhoneCard(longcn,intpw,doubleb,Strings)
{
cardNumber=cn;
password=pw;
if(b>0)
balance=b;
else
System.exit
(1);
connectNumber=s;
connected=false;
}
booleanperformConnection(longcn,intpw)
{
if(cn==cardNumber&&pw==password)
{
connected=true;
returntrue;
}
else
{
connected=false;
returnfalse;
}
}
doublegetBalance()
{
if(connected)
returnbalance;
else
return-1;
}
voidperformDial()
{
if(connected)
balance-=0.5;
}
publicStringtoString()
{
Strings="ConnectedPhoneNumber:
"+connectNumber+
"\nCardNumber:
"+cardNumber+
"\nCardPassword:
"+password+
"\nThebalance:
"+balance;
if(connected)
return(s+"\nThephoneisconnected");
else
return(s+"\nThephoneisdisconnected");
}
}
第五章
习题:
1.什么是多态,多态有哪些方式?
答:
多态性:
有封装性和继承所引出来的面向对象程序设计的另一特性
方法覆盖实现多态,方法重载实现多态,对象引用的多态
多态方式:
●子类对父类方法的覆盖
●利用重载在同一个类中定义多个同名的不同方法
2.什么是接口?
答:
接口是用来组织应用中的各类并调用它们的相互关系的一种结构,是实现类间多重继承功能的结构
将完成特定功能的若干属性组织成相对独立的属性集合,该属性集合就是接口,接口是用来实现类间多重继承的功能的,接口定义的仅仅是实现某一特定功能 的一组功能的对外接口和规范,而并没有真正实现这个功能,真正实现在继承这个接口的各个类中完成,因而通常把接口功能的继承称为“实现”。
3.根据下面的要求编程实现复数类ComplexNumber
(1)复数类ComplexNumber的属性
m_dRealPart:
实部,代表复数的实数部分
m_dImaginPart:
虚部,代表复数的虚数部分
(2) 复数类ComplexNumber的方法
ComplexNumber() 构造函数,将实部,虚部都置为0
ComplexNumber(doubler,doubleI) 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
GetRealPart() 获取实部
GetImaginaryPart() 获取虚部
SetRealPart(doubled) 设置实部
SetImaginaryPart(doubled) 设置虚部
ComplexAdd(ComplexNumberc) 复数相加
ComplexAdd(doublec) 复数相加
ComplexMinus(ComplexNumberc) 复数相减
ComplexMinus(doublec) 复数相减
ComplexMulti(ComplexNumberc) 复数相乘
ComplexMulti(doublec) 复数相乘
ToString() 把当前复数对象的实部,虚部组合成a+bi的字符串形式
答:
classComplexNumber
{
doublem_dRealPart;
doublem_dImaginPart;
ComplexNumber()
{
m_dRealPart=0;
m_dImaginPart=0;
}
ComplexNumber(doubler,doublei)
{
m_dRealPart=r;
m_dImaginPart=i;
}
doublegetRealPart()
{
returnm_dRealPart;
}
doublegetImaginaryPart()
{
returnm_dImaginPart;
}
voidsetRealPart(doubled)
{
m_dRealPart=d;
}
voidsetImaginaryPart(doubled)
{
m_dImaginPart=d;
}
ComplexNubercomplexAdd(ComplexNuberc)
{
c.m_dRealPart+=m_dRealPart;
c.m_dImaginPart+=m_dImaginPart;
returnc;
}
ComplexNubercomplexAdd(doublec)
{
m_dRealPart+=c;
returnthis;
}
ComplexNubercomplexMinus(ComplexNuberc)
{
c.m_dRealPart-=m_dRealPart;
c.m_dImaginPart-=m_dImaginPart;
returnc;
}
ComplexNubercomplexMinus(doublec)
{
m_dRealPart-=c;
returnthis;
}
ComplexNubercomplexMulti(ComplexNuberc)
{
c.m_dRealPart=c.m_dRealPart*this.m_dRealPart-c.m_dImaginPart*this.m_dImaginPart;
c.m_dImaginPart=this.m_dImaginPart*c.m_dRealPart+this.m_dRealPart*c.m_dImaginPart;
returnc;
}
ComplexNubercomplexMulti(doublec)
{
m_dRealPart=c.m_dRealPart*this.m_dRealPart;
m_dImaginPart=this.m_dRealPart*c.m_dImaginPart;
returnthis;
}
voidtoString()
{
return(m_dRealPart+”+”+m_dImaginPart+”i”);
}
}
第六章
1.编写一个程序,要求能完成排序和查找,分别使用链表,数组和二叉树等数据结构,比较各种方法的优缺点。
答:
根放在0位置,以后假定当前位置是i,那么左子结点在2i+1,右子结点在2i+2。
比如根的左子结点在1,右子结点在2。
结点1的左子结点在3,右子结点在4。
定义一种空值表示没有子结点,比如empty。
假定一个结点由3个成员组成:
value,left,right
数组假定是全局的,如果不是可以作为参数传送。
递归实现比较简单:
voidbtree2array(node,index)
{
if(node==NULL)
array[index]=empty;
array[index]=node->value;
btree2array(node->left,index*2+1);
btree2array(node->right,index*2+2);
}
开始调用:
btree2array(root,0);