Java基础测试题大全,如果能做出来完,就说明你的Java基础学的相当的不错了!

/*★★★★★

====第一题====================================

简述ArrayList、Vector、LinkedList之间的区别?

Collection和Map之间的区别?HashSet和TreeSet之间的区别?

Collection和Collections的区别?

HashTable和HashMap之间的区别?

然后编程向HashSet中保存自定义的类(Student),并取出打印。

*/


/*★

====第二题====================================

自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,

让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,

能够在读取的每行前面都加上有行号和冒号。

提示:(MyBufferedReader,MyLineNumberReader)

*/


/*★★★

====第三题====================================

拷贝一个带内容的文件夹。

1.copyDir方法,需要两个参数,被拷贝的文件夹source,想拷到哪去的文件夹target

2.在target下创建一个同名文件夹。

3.遍历source下面的所有文件,存在两种情况

4.如果是文件夹,递归,将当前遍历的文件夹作为source,将target + source.getName作为新的target

5.如果是标准文件。调用自定义的copyFile方法,用文件流包装一下来进行拷贝

*/





/*★★★★

====第四题====================================

编写一个程序,当用户输入一个目录时,

该程序能列出该目录下的所有子目录和文件。将目录和文件的绝对路径输出打印

思路:

1,获取用户输入的目录,封装成文件对象。

a.获取输入可以有两种形式,一种通过System.in。另一种通过给主函数传值的形式。

b.把输入的字符串封装成File对象。对其进行判断。该文件夹是否存在。

2,通过递归的形式列出目录所有文件夹和文件

a.定义一个功能方法,遍历该文件夹对象,如果遍历到的File对象是文件夹就再次调用该功能方法(递归);

*/





/*★★★★★

====第五题====================================

有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,

输入学生姓名和成绩,从键盘输入以上数据(包括姓名,三门课成绩),

按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。

思路:

1,获取键盘录入;

a,System.in,为了更好读取键盘录入信息。一行一行的读会更方便,那么将其包装。

b,BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

2,将获取的键盘录入封装成学生对象(首先要对学生类进行描述。)

a,读到一行数据,通过该数据的规则(“,”)对数据进行切割。变成字符串数组。并把数组中的学生信息,作为参数,

封装成学生对象。

3,将封装好的学生对象存入集合中

(why?因为要对这些对象中的信息进行操作,用哪个集合呢?既然要排序。而且是存入单个对象。TreeSet,定义比较器。)

a.建立TreeSet集合,定一个比较器对象传给集合的构造函数。同过集合的add方法,将学生对象存入。

4,对已有元素的TreeSet集合,进行迭代。将其中的学生信息通过流写入到一个文件中。

a.通过Iterator迭代器,迭代该集合。取出学生对象中要用的信息。作为字符串,用字符流对象(FileWriter)

将其写入到一个文件中。


*/


/*★★★★★

====第六题====================================

取出D:盘下全部的.java文件的文件路径保存在java.txt文件中


思路:

1.通过递归的方式遍历d:盘.判断文件的扩展名是否是以.java结尾.

2,把符合条件的File对象都存入到集合中.

3,遍历该集合.通过输出流把文件对象的getAbsolutePath写入到java.txt文件中.

(不存入集合直接写是可以的,但最好临时存储一下.这样就可以对所有的.java文件进行更多的其他操作.)

*/



/*★★★

====第七题====================================

计算字符串中子串出现的位置,

例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数

思路:

1,既然是操作字符串就要先想到String类中是否提供相关方法.

2,可以先通过indexOf索引子串第一次出现的位置.第二次在索引的时候,就应该从第一次出现的位置+子串的长度后在从剩下的字符串中查找还有没有该子串.那么需要定义一个变量将剩下的字符串记录一下.

3,该过程既然重复.就需要循环来做.循环条件即为:当indexOf索引返回-1时.停止循环.

*/



/*★★★★

====第八题====================================

取出一个文本文件中所有的email地址,并存放到集合中。


思路:

1,通过字符流(FileReader)来读取一个文件。比较高效的方式是一行一行读。

就通过BufferedReader的readLine方法。

2,通过正则规则来对一行文本进行规则的取出。

a,先把规则封装成对象。Pattern.compile(reg)返回一个正则对象。

让该对象与该行字符串建立联系。调用该对象的一个matcher方法。将所要匹配的字符串传给matcher方法。

该方法返回一个匹配器对象。该对象可以通过find()找到所匹配的内容,在通过group方法取出该内容。

3,将匹配的内容存入集合(建立用hashset,因为可以保证email的唯一性。)。

*/





/*★★

====第九题====================================

通过键盘录入的方式,进行猜数字的游戏。

要求:输入一个1~100之间的数字,

与预先给定数字不同,要给出大或者小的提示。


思路:

1,先产生一个随机数.

2,通过System.in读取一行数据内容.并转换成int的值.

3.建立


*/




/*★

====第十题====================================

假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:

姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个

奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方

法进行属性访问。


思路:

员工分普通员工和经理。

1,首先将两个共性的东西向上抽取。(姓名,age,id,工资。有一个工作方法。)

因为普通和经理工作内容不同。需要这两个子类自己去实现。那么该方法是抽象的。(好处,普通和经理只要是员工就必须工作,强制性。)

2,在定义经理类,除了拿到父类中共性的东西,他还有特性的东西。(奖金)

*/





/*★★★

====第十一题==================================

字符串由多个数字和空格组成“20 8 0 -1 32 14”,

将字符串中的数字按数值大小升序排列,获取排序后的字符串。


思路:

1,将给定字符串按照规则(空格)进行切割变成字符串数组.

2,将字符串数组中的元素转成int型的值存入int数组中.

3,对数组进行排序.

4,将数组在变成字符串.

a.整型数组变成字符串可以同临时定义一个容器(StringBuffer),

对元素进行存储.

b.在将StringBuffer.toString变成字符串.

*/





/*★★★★

====第十二题==================================

写一个程序,允许用户依次输入多个姓名和住址,

并能将用户的输入保存到文件中。

用户输入 ”quit” 表示输入完毕,程序退出。

*/





/*★★

====第十三题==================================

找出一个整数数组{2,4,1,4,3,2,4,3,2}出现次数最多的数。

//找字符串中出现过多少个字符,统计每个字符出现的次数,并且把字符按照次数升序排列。

*/





/*★★★★

====第十四题==================================

给定两个字符串,比较两个字符串中最大相同的子串.

*/




/*★★★

====第十五题==================================

编写一个程序,记录该程序运行次数。运行满足30次,就提示用户“软件试用期限已到”;

*/





/*★★★

====第十六题==================================

已知文件a.txt文件中的内容为“bcdeadferwplkou”,

请编写程序读取该文件内容,并按照自然顺序排序后输出到b.txt文件中。

即b.txt中的文件内容应为“abcd…………..”这样的顺序。

思路:

1,将该文件读取将数据取出,变成字符串

a.因为是文本文件。可以直接用字符流(FileReader)

b.为了提高效率,并方便获取数据。对其进行包装(BufferedReader)使用readLine方法一行一行读。

2,把字符串变成字符数组,对该数组进行排序。

a.通过字符创的toCharArray方法,将字符串变成字符数组。

b.自定义排序功能函数(冒泡,选择都可以)对字符数组进行排序。

3,把排序后的数组变成字符串,并通过流将字符串写入b.txt文件中。

a.通过String类的构造函数将字符数组变成字符串。

b.通过FileWriter把字符串写入到b.txt文件中。

*/





/*★★★

====第十七题==================================

客户端向服务端上传图片。将客户端封装成线程。

*/





/*★★★★

====第十八题==================================

在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。

但对应的字节数不同,一个汉字占两个字节。

定义一个方法,按照最大的字节数来取子串。

如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,

那么半个就要舍弃。如果去四个字节就是“ab你”,取五个字节还是“ab你”.


思路:

首先要知道汉字是由连个字节所组成。而且这两个都是负数。

1,先将该字符串变成字节数组(getBytes)

2,通过要截取的长度位。来判断该位置是正数还是负数。

只要为负数。就往回判断前一个字节是正还是负。以此类推。

定义一个计数器,记录负数出现的次数。如果该数为偶数。那么就将要去长度的字节数。转成字符串(说明没有半个汉字存在。)

如果是奇数。就将最后一个字节舍弃。在转成字符串。

*/





/*★★

====第十九题==================================

利用LinkedList去实现一个队列的效果.

自定该功能类.(队列的特点是元素先进先出,去查看LinkList中的方法)

*/

class DuiLie<T>

{

private LinkedList<T> ll;

DuiLie()

{

ll = new LinkedList<T>();

}

public void myAdd(T t)

{

ll.addFirst(t);

}

public T myGet()

{

return ll.removeLast();

}

public boolean isNull()

{

return ll.isEmpty();

}

}


class TD

{

public static  void main(String[] args)

{

DuiLie dl = new DuiLie();

dl.myAdd("hahah");

dl.myAdd("kkkk");

dl.myAdd("qqq");

while(dl.isNull())

{

System.out.println(dl.myGet());

}

}

}

/*★★★

====第二十题==================================



将一个图片切割成多个文件。在将多个文件合并成该图片



1,通过字节流读取该图片。定义一个缓冲区数组该数组的大小 是要生成的切割后的文件大小。

通过输出流将该数组中的数据,写到一个文件中(文件名要有规律。1.haha  2.haha...)

(可以通过一个自定义配置文件保存原文件的基本属性信息。如:源文件的名字 已经切割出来的碎片文件的个数。方便合并。)


2,合并,首先要知道碎片文件的目录,列出该目录当前的所有.haha文件。(遍历时可以通过配置文件中的信息确定循环的次数。)

并按照顺序把每一个碎片文件用流读取。(一个文件对应一个流。)

将这些流存入集合。(why?因为要通过序列流进行合并。(SequenceInputStream)该流会接受一个Enumeration)


3,读取序列流中的数据,并把该数据都写入到一个(图片)文件中。

*/






/*★★

====第二十一题==================================

编写一个方法。去除Vector集合中的重复元素。

思路:

1,自定义一个Vector集合。对原有的Vector集合进行迭代。

把迭代出来的元素存入到新集合中。在存的时候进行判断新的集合中是否有该元素。‘

如果有,就不要进行存储。

迭代完成 。新的Vector集合中就不存在重复元素了。

*/





/*★★★★★

====第二十二题==================================

取出一个字符串中字母出现的次数。如:"abcdekka27qoq"  a(2)b(1)k(2)...

思路:

1,先将字符串转换成字符数组。

2,定义一个计数器,记录每一个字母出现的次数。

3,将字母作为key。该字母出现的次数作为value。将两者存入map集合中。

(为什么要用map集合呢?因为字母有很多,数据多了就要想到用容器多存入。方便操作。而每一个字母都有对应的次数。正好有映射关系。而map集合正好符合这个特点。map集合可以同时存入两个对象。key会保证唯一性。只要不断改变该key对应的值就可以了。)

4,在遍历字符数组进行存储的时候要判断,该字母是否已经存在于map集合。如果已存在。就取出它所对应的次数,并++.在次存入到集合中。

5,遍历该集合就可以得到结果。


(注意,如果只取字母的话,要进行字符'a'-'z'的判断。其他字符比如数字或者符号就没有必要存入map集合了。)

*/