public static void main(String[] args) throws IOException{ long time = ();;
}
}
运行结果:
;
public class bufferedWriter { public static void main(String[] args) throws IOException{ long time = ();;
}
}
运行结果:
有用时可知: BufferedWriter比FileWriter写入的速度快, 当需要写入大量内容,前者效率高。
5.生成一html文件,使其能显示2的幂次(0~9)的表格如下:
Power of 2 Value 0 1 1 2 … … ;
public class test6_5{ public static void main(String[] args) throws IOException{ BufferedWriter fuck =new BufferedWriter( new
FileWriter(\));
(\); ();
(\align=center>Value\);
for (int i=0;i<=9;i++){ (\+i+\+(i, 2)+\);
} (\);
();
();
}
}
运行结果:
6.用记事本程序创建一篇包含几十个英语单词的小文章,要求从屏幕输出每一个单词。 ;
public class test6_6 { public static void main(String[] args)throws IOException { FileReader fr=new FileReader(\); int s;
while((s=())!=-1){
if(s>='a'&& s<='z'|| s>='A' && s<='Z')
else
\);
} ();
}
}
运行结果:
7.从键盘敲入一系列字母,将其存储到文件中,对其进行升序排序后,存储到另一个文件,并显示在屏幕上。 ;
import class test6_7 {
建一个学生类(包括姓名、年龄、班级、密码),创建若干该类的对象并保存在文件中(密码不保存),从文件读取对象后显示在屏幕上。 ;
public class tset6_8 {
public static void main(String[] args) throws IOException,ClassNotFoundException{ Student student[]={ new Student(\苍井空
\,19,101,\),
new Student(\吉沢明\,19,103,\), new Student(\武藤兰\,20,104,\),
new Student(\我爱女优
\,21,105,\)};
ame);
\我的年龄:\+student[i].age);
\我的班级:\+student[i].grade); \我的密码:\+student[i].secret); }
else{
\第\+(i+1)+\个女学生名字:\+student[i].name);
\第\+(i+1)+\个女学生年龄:\+student[i].age);
\第\+(i+1)+\个女学生班级:\+student[i].grade); \第\+(i+1)+\个女学生密码:\+student[i].secret);
} }
} }
9.对例6—14中的压缩程序段进行修改,是压缩流经过缓冲类。比较两种方法在对大的文件进行压缩时的效率。 ;
import class test6_9f{
public static void main(String[] args) throws IOException {
long time = ();
FileInputStream in = new FileInputStream(\); GZIPOutputStream out = new GZIPOutputStream( new FileOutputStream(\));
\ to \); int c;
while((c = ()) != -1) (c); Reading; } }
运行结果:
;
import class test6_9b{
public static void main(String[] args) throws IOException { BufferedInputStream in = new BufferedInputStream(new FileInputStream(\));
GZIPOutputStream out = new GZIPOutputStream( new BufferedOutputStream(
new =FileName;
FileOutputStream(\)));
\ to \); int c; long time = (); Reading; } } 运行结果:
以上2个类的运行用时比较,可见对大文件进行压缩,经过缓冲流的效率要高得多。
10.一家杂货店的店主,需要查询、输入、修改任何一件商品的品名、价格、库存量信息。请用随机存取文件满足其要求,可以更新、查询信息。每件商品的标志为其记录号。 ength>8) (),0, , 0,8);ength);ength>8) (),0, , 0,8); else
(),0,,0,().length);
} public double getPrice() {
return Price; } public void setPrice(double price) {
= price; }
public int getNumber() {
return Number; }
public void setNumber(int number) { = number; }
public int getCount() { return Count;
}
public void setCount(int count) { = count; } }
;
public class Work{ String FileName;
public Work(String FileName){ }
ength>8) (),0,borrow,0,8); else
(),0,borrow,0,().length); for(int i=0;i<8;i++)
(borrow[i]); ();
}
组的声明与数组元素的创建有什么关系
答:声明数组仅仅是代表试图创建数组,不分配任何存储空间,声明是为创建做“铺垫”。
类的对象与数组有什么关系什么时候适合使用数组,什么时候适合使用Vector
答:vector是一个能够存放任意对象类型的动态数组,容量能自动扩充,而数组存储固定且类型相同的对象;对于存储固定类型相同的对象使用数组,对于存储不同类型或者动态调整数组大小的情况使用Vector。
3.与顺序查找相比,二分查找有什么优势使用二分查找的条件 答:对于大数据量中进行查找时二分查找比顺序查找效率高得多;条件是已排序的数组。
4.试举出三种常见的排序算法,并简单说明其排序思路。 答:①选择排序:基本思想是站在未排序列中选一个最小元素,作为已排序子序列,然后再重复地从未排序子序列中选取一个最小元素,把它加到已经排序的序列中,作为已排序子序列的最后一个元素,直到把未排序列中的元素处理完为止。
②插入排序:是将待排序的数据按一定的规则逐一插入到已排序序列中的合适位置处,直到将全部数据都插入为止。
③二分查找:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
5.声明一个类People,成员变量有姓名、出生日期、性别、身高、体重等;生成10个People类对象,并放在一个以为数组中,编写方法按身高进行排序。
1989年8月13日1958年8月29日1963年2月17日1769年8月15日1983年11月11日etHeight() } } \按身高从小到大排序后的结果如下:\); for(int i=0;i<;i++) \); } } 运行结果: 6.声明一个类,此类使用私有的ArrayList来存储对象。使用一个Class类的引用得到第一个对象的类型之后,只允许用户插入这种类型的对象。 ; } else{ \只允许插入\+getClassType()+\类的对象.\); } } public ArrayList getMan() { return man; } public Class getClassType() { return classType; } public Fuck(){} } 出一个二维数组的鞍点,即该位置上的元素在所在行上最大,在所在列上最小。(也可能没有鞍点) ength; j++) { Array[i][j] = (); if(j==series-1) { max = Array[i][0]; for (int z = 1; z < series; z++) if (Array[i][z] > max) { max = Array[i][z]; R[i] = z; } } } for (int j = 0; j < Array[0].length; j++) { max = Array[0][j]; for (int z = 1; z < row ; z++) if (Array[z][j] < max) { max = Array[z][j]; S[j] = z; } } for(int i=0;i<;i++) { if(S[R[i]]==i) { \鞍点:\+\+i+\+R[i]+ \+Array[i][R[i]]+\); T=true; } } if(T==false) \没有鞍点\); } } 运行结果: 8. 声明一个矩阵类Matrix,其成员变量是一个二维数组,数组元素类型为int,设计下面的方法,并声明测试类对这些方法进行测试。(1)构造方法。 Matrix() ength; j++) + \); } } public void transpose() {ength; i++) { for (int j = 0; j < ; j++) + \); } } public boolean isTriangular() {ength; j++) { if ((i > j) && (array[i][j] != 0)) { flag = false; } } } return flag; } public boolean isSymmetry() { ength; j++) { if (array[i][j] == array[j][i]) { Symmetry = false; } } } return Symmetry; } public void add(Matrix b) { ength; j++) { [i][j] = array[i][j] + [i][j]; } } } } 程和线程有何区 别,Java是如何实现多线程的。 答:区别:一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 Java程序一般是 继承Thread 类 或者实现 Runnable接口,从而实现多线程。 2.简述线程的生命周期,重点注意线程阻塞的几种情况,以及如何重回就绪状态。 答:线程的声明周期:新建-就绪-(阻塞)-运行--死亡 线程阻塞的情况:休眠、进入对象wait池等待、进入对象lock池等待; 休眠时间到回到就绪状态;在wait池中获得notify()进入lock池,然后获得锁棋标进入就绪状态。 3.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000毫秒以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。 (注:两个类,相同一个测试类)