if((i+1)%10!
=0)
System.out.print(""+n[i]+"");
elseSystem.out.println(n[i]);
}
}
}
3)随机生成两个矩阵,然后将两个矩阵相乘。
矩阵乘法:
设A=[aij]m×n,B=[bij]n×s;其中,m×n中m表示a行数,n表示列数;n×s中n表示b行数,s表示列数;
那么,A×B的积为:
C=[cij]m×s
其中,Cij=ai1b1j+ai2b2j+……+ainbnj
(i=1,2,……,m;j=1,2,……,s)
例如,C11=a11b11+a12b21+……+a1nbn1
又例如,C12=a11b12+a12b22+……+a1nbn2
C21=a21b11+a22b21+……+a2nbn1
如果改为从0开始计数,那么:
C00=a00b00+a01b10+……+a0nbn0
C01=a00b01+a01b11+……+a0nbn1
C10=a10b00+a11b10+……+a1nbn0
首先看懂上面算法,再思考程序应当如何设计,之后上机操作,最后看懂程序设计方法。
publicclassa1
{
publicstaticvoidmain(Stringargs[])
{
inta[][]=newint[3][4];//动态初始化一个二维数组
intb[][]=newint[4][3];//动态初始化一个二维数组
intc[][]=newint[3][3];//动态初始化一个二维数组
for(inti=0;i<3;i++)
for(intj=0;j<4;j++){//随机生成矩阵数据
a[i][j]=(int)(Math.random()*90)+10;
}
for(inti=0;i<4;i++)
for(intj=0;j<3;j++){
b[i][j]=(int)(Math.random()*90)+10;
}
System.out.println("第一个矩阵数据:
");
for(inti=0;i<3;i++){
for(intj=0;j<4;j++)
System.out.print(""+a[i][j]+"");
System.out.println("");
}
System.out.println("第二个矩阵数据:
");
for(inti=0;i<4;i++){
for(intj=0;j<3;j++)
System.out.print(""+b[i][j]+"");
System.out.println("");
}
for(inti1=0;i1<3;i1++)//0到m-1;
for(intj=0;j<3;j++){//0到s-1;
c[i1][j]=0;//计算乘积
for(intk=0;k<4;k++)c[i1][j]=c[i1][j]+a[i1][k]*b[k][j];
}
System.out.println("二个矩阵之积:
");//显示结果
for(inti1=0;i1<3;i1++){
for(intj=0;j<3;j++)System.out.print(""+c[i1][j]+"");
System.out.println("");
}
}
}
4)创建杨辉三角形。
分析:
杨辉三角形中的各行是二项式(a+b)n展开式中各项的系数。
注意到
注意到第一列全1
如果用i表示行,j表示列,那么每行从第2列起有:
aij=a(i-1)(j-1)+a(i-1)j
importjava.util.Scanner;
publicclassEx3_5{
publicstaticvoidmain(String[]args){
int[][]a=newint[9][9];//假设打印9行,各元素自动初始化为0
a[0][0]=1;//最上面第一个数
for(inti=1;i<9;i++){//从第2行开始递推
a[i][0]=1;//第i行的数据个数等于i
for(intj=1;j
}
for(inti=0;i<9;i++){
for(intj=0;j
System.out.println("");
}
}
}
5)将上面程序改由递归求解,分析递归的可能性及程序实现方法
importjava.util.Scanner;
publicclassEx3_5_1{//非主方法必须声明静态
staticlongc(intn,intk){
if(k<=0||k>=n)return1;
return(c(n-1,k)+c(n-1,k-1));
}
publicstaticvoidmain(String[]args){//主方法,可以不加publicstatic
for(inti=0;i<=9;i++){
for(intj=0;j<=i;j++)System.out.print(c(i,j)+"\t");
System.out.print("\n");
}}}
6)将上题中方法c设计为内部类的方法
publicclassEx3_5_4{//主类
staticclassc0{//类Ex3_5_4的内部类,加static
staticlongc0(intn,intk){//构造方法,也可改为非构造方法
if(k<=0||k>=n)return1;
return(c0(n-1,k)+c0(n-1,k-1));
}
}
publicstaticvoidmain(String[]args){
for(inti=0;i<=9;i++){
for(intj=0;j<=i;j++)System.out.print(c0.c0(i,j)+"\t");
System.out.print("\n");//上面引用c0(i,j)要求c0(i,j)为静态
}
}
}
//将方法c改为内部类c0的方法c0(静态方法),类c0的前面也要加static。
编译时生成Ex3_5_1$c0.class。
7)将内部类改为外部类
classc0_1{//外部类,不加static
staticlongc0_1(intn,intk){
if(k<=0||k>=n)return1;
return(c0_1(n-1,k)+c0_1(n-1,k-1));
}
}
publicclassEx3_5_5{//主类
publicstaticvoidmain(String[]args){
for(inti=0;i<=9;i++){
for(intj=0;j<=i;j++)System.out.print(c0_1.c0_1(i,j)+"\t");
System.out.print("\n");//上面引用c0(i,j)要求c0(i,j)为静态
}
}
}
//将内部类c0改外部类c0_1,方法c0_1设计为静态方法。
8)同一目录下建二个类文件,调用静态方法(类方法)递归。
源程序文件Ex3_5_2.java:
publicclassEx3_5_2{
publicstaticvoidmain(String[]args){
for(inti=0;i<=9;i++){
for(intj=0;j<=i;j++)System.out.print(c.c(i,j)+"\t");
System.out.print("\n");//上面引用c(i,j)要求c(i,j)为静态
}}}
源程序文件c.java
classc{
staticlongc(intn,intk){
if(k<=0||k>=n)return1;
return(c(n-1,k)+c(n-1,k-1));
}}
对Ex3_5_1.java编译,生成Ex3_5_1.class和c.class二个类文件
9)实例化
classcClass{
longc1(intn,intk){
if(k<=0||k>=n)return1;
return(c1(n-1,k)+c1(n-1,k-1));
}}
publicclassEx3_5_3{
publicstaticvoidmain(String[]args){
cClasscObject=newcClass();//实例化:
建立类cClass的对象
for(inti=0;i<=9;i++){
for(intj=0;j<=i;j++)System.out.print(cObject.c1(i,j)+"\t");
System.out.print(“\n”);//上面引用c(i,j)不再要求c(i,j)为静态
}}}
10)改为接口实现
interfacecface{//定义接口
longc(intn,intk);
//方法不许实现,即不能有方法体,用分号结束
}
publicclassEx3_5_6implementscface{//调用接口
//必须实现接口中所有方法,且方法的名字、类型、参数个数及类型必须与接口中的完全一致
publiclongc(intn,intk){//不要忘了public
if(k<=0||k>=n)return1;
return(c(n-1,k)+c(n-1,k-1));
}
publicstaticvoidmain(String[]args){
for(inti=0;i<=9;i++){
for(intj=0;j<=i;j++)
System.out.print(c.c(i,j)+"\t");
//上面引用接口中c(n,k)要求c(n,k)为public
System.out.print("\n");
}}}
比较以上各题,全面了解面向对象的程序设计主要的语言元素,学习各概念的意义、应用方法,特别注意其区别与设计要点。
11)画出实验当天所在月的日历表。
importjava.util.Calendar;
publicclassEx4_27{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
System.out.println("日一二三四五六");
Calendarcalendar=Calendar.getInstance();
intm=9;
calendar.set(2012,m-1,1);//设置日历表起始年月日的值
//在表中该日期算作该月1日在列出日历
intday_of_week=calendar.get(Calendar.DAY_OF_WEEK)-1;
System.out.print(day_of_week);//该日期是星期几?
Stringa[]=newString[day_of_week+31];
for(inti=0;ia[i]="*";
}
for(inti=day_of_week,n=1;iif(n<=9)
a[i]=String.valueOf(n)+"";
else
a[i]=String.valueOf(n);
n++;
}
for(inti=0;iif(i%7==0)
System.out.println("");
System.out.print(""+a[i]);
}
}
}
//返回当前时间小时数:
calendar.get(Calendar.HOUR_OF_DAY)
//例如显示当前小时数语句:
System.out.println(calendar.