实验一:
1.请先阅读下面的程序,确定它的输出结果。再将程序上机运行,验证自己分析的输出结果是否正确。
class Yuan
{ int r; String name; static int z= 5;
Yuan(int r){ this.r=r; }
int a(){ return z*r*r; }
int p(){ return 5*z*r; }
void value (){ name="china"; }
}
class testOverride extends Yuan
{ int h; String name;
testOverride(int r,int h1) { super(r); h=h1; }
int a(){ value(); return 2*super.a()+p()*h; }
void value()
{ super.value();
name="America";
System.out.println("\""+this.name+"\"");
System.out.println(super.name);
}
public static void main(String args[])
{ Yuan y= new Yuan(4);
Yuan yz= new testOverride(5,2);
System.out.println(y.a());
System.out.println(yz.p());
System.out.println(yz.a());
}
}
输出结果:
80
125
"America"
china
500
实验二:
2.请先阅读下面的程序,确定它的输出结果。再将程序上机运行,验证自己分析的输出结果是否正确。
public class TestTransOfValue
{public static void main(String args[])
{ double val;
StringBuffer sb1, sb2;
String sb3;
char s[]={'a','p','p','l','e'};
val = 5.8;
sb1 = new StringBuffer("apples");
sb2=new StringBuffer("pears");
sb3 = new String("pear");
modify(val, sb1, sb2,sb3,s);
System.out.println(val);
System.out.println(sb1);
System.out.println(sb2);
System.out.println(sb3);
System.out.println(s);
}
public static void modify(double a, StringBuffer r1,
StringBuffer r2,String r3,char s[] )
{ a = 6.8;
r1.append(" taste good");
r2=null;
r3="banana";
s[2]='R'; }
}
输出结果:
5.8
apples taste good
pears
pear
apRle
3.编写一个程序,其中设计一个矩阵类Matrix,最后计算:
要求Matrix类满足:
1)Matrix的属性有:
m,n:int型,矩阵的行、列数;
ma:int型两维数组,放置矩阵的数据。
2)Matrix的方法有:
Matrix (int m , int n ):构造方法,设置矩阵的行数和列数;
cheng(Matrix a):将当前矩阵与形参矩阵相乘,最后返回乘的结果(Matrix对象); void print():输出矩阵。
代码如下:
import java.util.Scanner;
import java.io.*;
class Matrix{
int m,n;
int ma[][];
Matrix() {
System.out.println("请输入行数和列数:");
Scanner reader=new Scanner(System.in);
this.m=reader.nextInt();
this.n=reader.nextInt();
this.ma=new int [this.m][this.n];
System.out.println("请输入矩阵:");
for(int i=0;i<this.m;++i) {
for(int j=0;j<this.n;++j) {
this.ma[i][j]=reader.nextInt();
}
}
}
Matrix(int m,int n){
this.m=m;
this.n=n;
}
Matrix cheng(Matrix B) {
int nB=B.ma[0].length;
Matrix ans =new Matrix(m,nB);
ans.ma=new int[m][nB];
for(int i=0;i<m;++i) {
for(int j=0;j<nB;++j) {
for(int k=0;k<n;++k) {
ans.ma[i][j]+=ma[i][k]*B.ma[k][j];
}
}
}
return ans;
}
static void print(Matrix ans){
System.out.println("矩阵相乘结果如下:");
for(int i=0;i<ans.m;++i) {
for(int j=0;j<ans.n;++j){
System.out.print(ans.ma[i][j]);
System.out.print(" ");
}
System.out.println();
}
}
public static void main(String[] args){
Matrix a=new Matrix();
Matrix b=new Matrix();
print(a.cheng(b));
}
}
运行界面截图
4.请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。(注意重点理解:内部类、对象内部类、静态内部类)
public class Outer
{ public Outer(){System.out.println("OuterClass Object!");}
private class Inner1
{ private Inner1(String s){ System.out.println(s);} }
static class Inner2
{ Inner2(String s){ System.out.println(s);} }
public static void main(String[] args)
{ Outer ob= new T();
Outer.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");
Inner2 ib2=new Inner2("InnerClass2 Object!");
}
}
请再尝试将:
Outer.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");
改为:
ob.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");
看有什么变化。
输出结果:
OuterClass Object!
InnerClass1 Object!
InnerClass2 Object!
改变之后:
报错:Cannot resolve symbol 'Inner1'(无法解析符号'Inner1')