Java笔试题共23题(附答案)_第1页
Java笔试题共23题(附答案)_第2页
Java笔试题共23题(附答案)_第3页
Java笔试题共23题(附答案)_第4页
Java笔试题共23题(附答案)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

里面有解题思路一样的没有全部解答 仅仅将题目列出 稍微改变即可得出结果 笔试题重点 1 复制文件 2 多线程 3 集合 4 反射 1 Collection 集合体系图 Collection List 元素有序 可重复 ArrayList 底层数据结构是数组 查询快 增删慢 线程不安全 效率 高 Vector 底层数据结构是数组 查询快 增删慢 线程 安全 效 率低 LinkedList 底层数据结构是链表 查询慢 增删快 线程不安全 效率高 Set 元素无序 唯一 HashSet TreeSet 遍历集合的两种方式 1 通过获取键的集合 遍历键的集合 通过键获取值 2 通过键值对集合 遍历键值对对象 分别取得键值 import java util HashMap import java util Set import java util Map Entry import java util Map class ForMap public static void main String args 创建一个 map 对象 HashMap map new HashMap 向 map 中添加元素 map put A 101 map put B 102 map put C 103 map put D 104 获取键的集合 Set set map keySet 循环遍历键集合 for String str set 通过键获取值 System out println str map get str System out println 获取 map 的键值对集合 Set Entry mset map entrySet 循环遍历键值对集合 for Entry me mset 用键值对对象分别获取键和值 System out println me getKey me getValue System out println 2 题目 1 创建 ArrayList 对象 添加 5 个元素 使用 Iterator 遍历输出 题目 2 两个集合 a b c d e 和 d e f g h 把这两个集合去除重复项合并成一个 思路 这道题主要是考察集合的知识的 可以用 ArrayList 解决问题 1 先创建这两个集合 2 向这两个集合分别添加元素 3 用第二个集合的调用 iterator 方法获取 Iterator 对象 4 遍历第二个集合 并用第一个集合判断是否包含第一个 集合的元素 如果不包含就向集合一添加元素 5 打印集合 1 就是想要的结果 导包 import java util List import java util ArrayList import java util Iterator class Test public static void main String args 创建集合 1 List list1 new ArrayList 向集合 1 添加元素 list1 add a list1 add b list1 add c list1 add d list1 add e 创建集合 2 List list2 new ArrayList 向集合 2 添加元素 list2 add d list2 add e list2 add f list2 add g list2 add h 获取集合 2 的迭代器 Iterator it list2 iterator 遍历集合 2 while it hasNext String str String it next 如果不包含就向集合 1 添加此元素 if list1 contains str list1 add str System out println list1 3 题目 已知文件 a txt 文件中的内容为 bcdeadferwplkou 请编写程序读取该文件内容 并按照自然排序顺序后输出到 b txt 文件中 即 b txt 文件内容应为 abc 这样的顺序 思路 1 先将 a txt 文件内容读取出来并存到字符数组中 2 用 Arrays sort 字符数组 将这个字符数组排序 3 将字符数组输出到 b txt 文件中 import java io IOException import java io File import java io BufferedReader import java io BufferedWriter import java io FileReader import java io FileWriter import java util Arrays class ReadFileAndSortString public static void main String args throws IOException 封装数据源及目的地 File File a new File a txt File b new File b txt 高效字符输入流得到数据源 BufferedReader br new BufferedReader new FileReader a 高效字符输出流得到目的地 BufferedWriter bw new BufferedWriter new FileWriter b String line null 循环读取文件 while line br readLine null 得到读取一行字符串的长度 int len line length char chrs new char len 转换成字符数组 chrs line toCharArray 通过 Arrays 的 sort 方法排序 Arrays sort chrs System out println 字符串 new String chrs 写到文件中 bw write chrs bw newLine 刷新缓冲区 bw flush 关闭资源 br close bw close System out println 复制成功 4 题目 编写一个程序 将指定目录下所有 java 文件拷贝到另一个目录中 并将扩展名改为 txt 思路 1 用 File 对象封装目录 2 通过 listFiles 方法获取该目录下所有的文件或者文件夹的 File 对象数组 3 遍历这个 File 数组 得到每一个 File 对象 4 判断该 File 对象是否是文件 a 如果是文件 b 继续判断是否以 java 结尾 是 先改名后复制文件 否 不复制 导包 import java io IOException import java io File import java io BufferedInputStream import java io BufferedOutputStream import java io FileInputStream import java io FileOutputStream class Test public static void main String args throws IOException 用 File 对象封装目录 File srcfile new File D demos 用 File 对象封装目录 File destFile new File D copyTo 调用复制的方法 copyFile srcfile destFile 复制方法 public static void copyFile File srcFile File destFile throws IOException 通过 listFiles 方法获取该目录下所有的文件或者文件夹的 File 对象数组 File fileArray srcFile listFiles 遍历这个 File 数组 得到每一个 File 对象 for File file fileArray 判断该 File 对象是否是文件 if file isFile 如果不是以 java 为后缀的不复制 执行下次循环 if file getName endsWith java continue 新文件 File 对象 复制前改名 File newFile new File destFile file getName replace java txt 用高效的字节输入流封装数据源 BufferedInputStream bis new BufferedInputStream new FileInputStream file 用高效的字节输出流封装目的地 BufferedOutputStream bos new BufferedOutputStream new FileOutputStream newFile byte bys new byte 1024 int len 0 判断是否读到文件结尾 while len bis read bys 1 将数据写到文件中 bos write bys 0 len 刷新缓存流 bos flush 关闭流对象 bis close bos close 5 题目 1 将项目路径下 java all 目录下所有的 java 文件复制到项目路径下 Java jad 文件夹下 并将文件名从原来的 java 修改成 jad 题目 2 编写一个程序 把一个目录里边的所有带 java 文件拷贝到另一个目录中 拷贝成功后 把后缀名是 java 的文件改为 txt 文件 注意事项 是先拷贝 拷贝成功后才可以改后缀名的 将以下代码改改路径和扩展名即可 思路 1 用 File 对象封装目录 2 通过 listFiles 方法获取该目录下所有的文件或者文件夹的 File 对象数组 3 遍历这个 File 数组 得到每一个 File 对象 4 判断该 File 对象是否是文件 a 如果是文件 b 继续判断是否以 java 结尾 是 复制文件 在复制完成后改名 否 不复制 导包 import java io IOException import java io File import java io BufferedInputStream import java io BufferedOutputStream import java io FileInputStream import java io FileOutputStream class FileCopySingleFolderByByte public static void main String args throws IOException 用 File 对象封装目录 File srcfile new File D demos 用 File 对象封装目录 File destFile new File D copyTo 调用复制的方法 copyFile srcfile destFile 复制方法 public static void copyFile File srcFile File destFile throws IOException 通过 listFiles 方法获取该目录下所有的文件或者文件夹的 File 对象数组 File fileArray srcFile listFiles 遍历这个 File 数组 得到每一个 File 对象 for File file fileArray 判断该 File 对象是否是文件 if file isFile 如果不是以 java 为后缀的不复制 执行下次循环 if file getName endsWith java continue 新文件 File newFile new File destFile file getName 用高效的字节输入流封装数据源 BufferedInputStream bis new BufferedInputStream new FileInputStream file 用高效的字节输出流封装目的地 BufferedOutputStream bos new BufferedOutputStream new FileOutputStream newFile byte bys new byte 1024 int len 0 判断是否读到文件结尾 while len bis read bys 1 将数据写到文件中 bos write bys 0 len 刷新缓存流 bos flush 关闭流对象 bis close bos close 得到新文件名 String newName newFile getName replace java txt 根据新文件名创建新文件对象 File tempFile new File destFile newName 改名 newFile renameTo tempFile 6 题目 统计一个文件夹下的 txt 文件个数 包括所有子文件夹内 并将它们全部复制到 D 盘任意目录下 思路 提示 用高效字节流可以用来复制任意类型文件 1 定义一个统计变量 2 用 File 对象封装目录 3 通过 listFiles 方法获取该目录下所有的文件或者文件夹的 File 对象数组 4 遍历这个 File 数组 得到每一个 File 对象 5 判断该 File 对象是否是文件夹 a 如果是文件夹回到第 3 步 b 继续判断是否以 txt 结尾 是 复制文件并将统计文件变量加 1 否 不复制 导包 import java io IOException import java io File import java io BufferedInputStream import java io BufferedOutputStream import java io FileInputStream import java io FileOutputStream class FileCopyMultiFolderByByte 用来统计复制文件的总个数 public static int count 0 public static void main String args throws IOException 用 File 对象封装目录 File srcfile new File D demos 用 File 对象封装目录 File destFile new File D copyTo 调用复制的方法 copyFolder srcfile destFile System out println 文件复制完毕 共复制文件 count 个 复制方法 public static void copyFolder File srcFile File destFile throws IOException 通过 listFiles 方法获取该目录下所有的文件或者文件夹的 File 对象数组 File fileArray srcFile listFiles 遍历这个 File 数组 得到每一个 File 对象 for File file fileArray 判断该 File 对象是否是文件夹 if file isDirectory 多级目录递归 copyFolder file destFile else 文件 File newFile new File destFile file getName copyFile file newFile 复制文件并计数的方法 public static void copyFile File srcFile File newFile throws IOException 如果不是以 txt 为后缀的不复制 跳出循环 if srcFile getName endsWith txt continue 统计文件个数的变量加 1 count 用高效的字节输入流封装数据源 BufferedInputStream bis new BufferedInputStream new FileInputStream srcFile 用高效的字节输出流封装目的地 BufferedOutputStream bos new BufferedOutputStream new FileOutputStream newFile byte bys new byte 1024 int len 0 判断是否读到文件结尾 while len bis read bys 1 将数据写到文件中 bos write bys 0 len 刷新缓存流 bos flush 关闭流对象 bis close bos close 7 题目 创建多线程的方式有几种 请代码实现 解答 一共两种 1 通过实现 Runnable 接口 重写 run 方法 2 通过继承 THread 类 重写 run 方法 class ThreadTest public static void main String args 创建 RunnableImpl 类对象 RunnableImpl ri new RunnableImpl 创建 Thread 类的对象 并把 ri 作为参数传递 Thread t1 new Thread ri 给线程设置名字 t1 setName Runnable 线程 启动线程 t1 start 创建 ThreadImpl 类对象 ThreadImpl ti new ThreadImpl ti setName Thread 线程 启动线程 ti start 1 通过实现 Runnable 接口 重写 run 方法 class RunnableImpl implements Runnable Override public void run System out println Thread currentThread getName 正在执行任务 2 通过继承 THread 类 重写 run 方法 class ThreadImpl extends Thread Override public void run System out println getName 正在执行任务 8 题目 定义一个类实现 Runnable 接口 卖票 100 张 四个线程 输出格式为 窗口 1 还剩 10 张票 指定窗口 3 卖第 10 张票 思路 1 定义一个资源类实现 Runnable 接口 2 资源类重写 run 方法 并加锁卖票 3 在测试类中创建线程并启动 class SellTicket public static void main String args 创建一个资源对象 Tickets ticket new Tickets 创建线程对象并传入资源对象 Thread t1 new Thread ticket Thread t2 new Thread ticket Thread t3 new Thread ticket Thread t4 new Thread ticket 设置线程名称 t1 setName 窗口 1 t2 setName 窗口 2 t3 setName 窗口 3 t4 setName 窗口 4 启动线程 t1 start t2 start t3 start t4 start class Tickets implements Runnable private int ticket 100 Override public void run while true 加锁 synchronized this 剩余票数不大于 0 就退出循环 if ticket 0 try Thread sleep 100 catch InterruptedException e e printStackTrace 让窗口 3 卖第十张票 if ticket 10 if Thread currentThread getName equals 窗口 3 continue System out println Thread currentThread getName 还剩 ticket 张票 else break 9 写一个线程类 MyThread 该线程实现了 Runnable 接口 写一个 main 方法 用 for 循环创建 5 个线程对象 需求如下 利用线程类的构造函数输出 创建线程 4 备注 当创建一个线程的时候 标记为 1 再次创建一个线程的时候 标记为 2 所以输出的 创建线程 4 就是创建的第四个线程 在 run 方法中输出 线程 X 计数 Y 当执行次数达到 6 次的时候 退出 备注 其中 线程 X 为第 X 个线程 计数 Y 为该线程的 run 方法执行了多少次 class SellTicket public static void main String args 用 for 循环创建 5 个线程对象 for int i 1 i 5 i new Thread new MyThread i start class MyThread implements Runnable private int count public MyThread public MyThread int count this count count System out println 创建线程 count Override public void run for int i 1 i 6 i System out println 线程 this count 计数 i 10 题目 编写一个 Java 程序实现多线程 在线程中输出多线程名字 隔 300 毫秒输出一次 共输出 20 次 思路 1 用实现 Runnable 接口并重写 run 方法 2 创建线程 class Test public static void main String args 创建线程对象 Thread t1 new Thread new MyThread Thread t2 new Thread new MyThread 设置线程名称 t1 setName 我是线程 1 t2 setName 我是线程 2 启动线程 t1 start t2 start 实现 Runnable 接口 class MyThread implements Runnable Override public void run 循环 20 次 for int i 1 i 20 i try 休眠 300 毫秒 Thread sleep 300 catch InterruptedException e e printStackTrace 打印线程名称 System out println 线程名称 Thread currentThread getName 11 题目 输出一个字符串 怎样判断是否是 aba abcba abffba 的字符串 思路 1 首先判断是奇数个还是偶数个 字符串的长度 2 1 为基数 0 为偶数 2 是 0 就是偶数个 得到前半部分子字符串 字符串 substring 0 字符串的长度 2 得到前后半部分子字符串 字符串 substring 字符串的长度 2 字符串的长度 字符串 toCharArray 分别得到两个字符数组 在循环字符数组 一个正序一个倒序的 用对比字符是否 equals 3 是 1 就是奇数个 得到前半部分子字符串 字符串 substring 0 字符串的长度 2 得到前后半部分子字符串 字符串 substring 字符串的长度 2 1 字符串的长度 字符串 toCharArray 分别得到两个字符数组 import java util Scanner class StringDemo public static void main String args while true show public static void show System out print 请输入要判断的字符串 Scanner sc new Scanner System in String line sc nextLine System out println 你输入的是 line int length line length 先判断字符串的字符个数是奇数还是偶数 偶数时 if length 2 0 截取成前后两个子字符串 String s1 line substring 0 length 2 String s2 line substring length 2 length 注意偶数个和奇数个的不同在此 偶数不加 1 将两个字符串转换成字符数组 char chs1 s1 toCharArray char chs2 s2 toCharArray int chsLength chs1 length 统计对比次数和数组长度一致就是符合 否则不符合 int count 0 遍历数组 for int i 0 i chsLength i 对比字符是否相同 if chs1 i chs2 chsLength i 1 System out println 这个字符串不符合 aba break 统计对比次数 count if count chsLength System out println 符合 aba else 截取成前后两个子字符串 String s1 line substring 0 length 2 String s2 line substring length 2 1 length 注意偶数个和奇数个的不同 在此 奇数加 1 将两个字符串转换成字符数组 char chs1 s1 toCharArray char chs2 s2 toCharArray int chsLength chs1 length 统计对比次数和数组长度一致就是符合 否则不符合 int count 0 遍历数组 for int i 0 i chsLength i 对比字符是否相同 if chs1 i chs2 chsLength i 1 System out println 这个字符串不符合 aba break 统计对比次数 count if count chsLength System out println 符合 aba 12 题目 如何用反射创建一个对象 用两种方式 要求写代码 思路 一共有三种方式 1 调用 Object 类的 getClass 方法 2 数据类型的静态的 class 属性 3 通过 Class 类的静态方法 forName String className 注意 使用这种方式的时候要用全路径名 import java lang reflect Constructor class Test public static void main String args throws Exception 第一种 获取字节码文件对象 Class c1 Class forName Person 获取构造器对象 Constructor con1 c1 getConstructor String class int class 创建对象 con1 newInstance 张三 26 第二种 获取字节码文件对象 Class c2 Person class 获取构造器对象 Constructor con2 c2 getConstructor String class int class 创建对象 con2 newInstance 李四 25 用来测试反射的类 class Person private String name private int age public Person public Person String name int age this name name this age age System out println name age 13 题目 编写一个类 增加一个实例方法 用于打印一条字符串 并使用反射手段创建该类的对象 并调用对象的方法 思路 1 通过 Class forName 方法获取字节码文件对象 2 获取构造器对象 3 创建对象 4 获取成员方法对象 import java lang reflect Constructor import java lang reflect Method class Test public static void main String args throws Exception 获取字节码文件对象 Class c Class forName Demo 获取构造器对象 Constructor con c getConstructor 创建对象 Object obj con newInstance 获取成员方法对象 Method m c getMethod sayHello m invoke obj class Demo public Demo public void sayHello System out println 这是打印的方法 14 题目 编写程序 生成 5 个 1 至 10 之间的随机整数 存入一个 List 集合 编写方法对 List 集合进行排序 自定义排序算法 禁用 Collections sort 方法和 TreeSet 然后遍历集合输出 思路 1 用 Math 的 random 方法生成五个随机整数 2 用 ArrayList 集合存储随机数 3 遍历 ArrayList 集合并对其排序 4 遍历输出 import java util ArrayList class Test public static void main String args 创建 ArrayList 集合 ArrayList list new ArrayList 用循环的方式 生成五个随机整数并存入 ArrayList 集合中 for int i 0 i 5 i 生成随机整数 int rand int Math random 10 1 向 List 集合添加元素 list add rand 冒泡排序 外层控制对比次数 for int i 0 i list size 1 i 内存控制比较过程 for int k 0 k list get k 1 int max list get k list set k list get k 1 list set k 1 max 遍历集合 for int i 0 i list size i System out println list get i 15 题目 接收用户输入的一句英文 将其中的单词以反序输出 例如 I love you I evol uoy 思路 1 获取用户输入 调用 String 的 split 方法用空格将其分割成 字符串数组 2 遍历这个字符串数组 通过 StringBuffer 构造方法 将 字符串数组转换成 StringBuffer 对象 并调用 reverse 方法 将字符串倒序 3 通过 String 的构造方法再将 StringBuffer 对象转换成 String 并输出该新字符串 import java util Scanner class Test public static void main String args 创建 Scanner 对象 Scanner sc new Scanner System in System out println 请输入您要反序输出的一句英文 获取控制台输入 String line sc nextLine 将其用空格分割成字符串数组 String lines line split System out println 反序输出的结果 遍历字符串数组 for int i 0 i lines length i 将数组中的字符串转换成 StringBuffer 对象 StringBuffer sb new StringBuffer lines i 通过 StringBuffer 对象的 reverse 方法得到反序单词 String newStr new String sb reverse 直接输出反序单词 System out print newStr System out println 16 题目 编写一个可以获取文件扩展名的函数 形参接收一个文件名字符串 返回一个扩展字 符串 思路 1 用 String 类的 lastIndexOf string s 方法获取最后一个点的位置 2 根据用 String 的 substring 开始索引 结束索引 取得扩展名 import java util Scanner class Test public static void main String args Scanner sc new Scanner System in System out println 请输入文件名 String filename sc nextLine String extend getExtend filename public static String getExtend String filename 取得最后一个点的索引 int beginindex filename lastIndexOf int endindex filename length 根据用 String 的 substring 开始索引 结束索引 取得扩展名 String extend filename substring beginindex 1 endindex return extend 17 题目 用 ArrayList 存入 Student 自定义对象 Student 类有 name age 两个属性 按照 age 倒序排序 思路 1 创建 ArrayList 集合 并向集合中添加 Student 对象 2 新建一个 Comparator 比较器接口的实现类 重写 compare 方法 按年龄倒序排序 3 调用 Collections 的 sort 方法传入 Comparator 比较器实现类 import java util ArrayList import java util Iterator import java util Collections import java util Comparator class Test public static void main String args 创建集合 ArrayList list new ArrayList 向集合中添加元素 list add new Student 张三 20 list add new Student 李四 23 list add new Student 王二 19 调用 Collections 的 sort 方法进行排序 Collections sort list new MyComparator 遍历集合 Iterator it list iterator while it hasNext Student s Student it next System out println name s getName age s getAge 实现了 Comparator 比较器接口的自定义类 class MyComparator implements Comparator Override public int compare Student s1 Student s2 按年龄排序 从大到小 int num s2 getAge s1 getAge return num 标准学生类 class Student private String name private int age Student Student String name int age this name name this age age set 和 get 方法 public void setName String name this name name public String getName return this name public void setAge int age this age age public int getAge return this age 18 题目 编程列出一个字符串的全部字符组合情况 原始字符串中没有重复字符 例如 原始字符串是 abc 打印得到下列所有组合情况 a b c ab ac ba bc ca cb abc acb bac bca cab cba 思路 1 发现组合的最小长度是单个字符 且就是原始字符串的每个字符 而最长长度则和字 符串一样 2 每行新组合都是在前一行旧组合的基础上 将每个旧组合与原始字符串中每个不同字 符单独组合一次 获得新组合 3 新一行组合有多少个 无法马上确定 因为都是字符串 所以可以先用 StringBuilder 接收每个新组合 最后再切割获得每个新组合 public class Test public static void main String args 调用方法 传入字符串 show abc 编写方法 接收字符串 public static void show String str 将原始字符串转成原始字符数组 char chs str toCharArray 获得原始字符串数组 即每个字符串只有一个字符 String strs chsToStrs chs 按指定格式输出原始字符串数组 即单个字符的组合情况 printString strs x 为每行单个字符串的长度 第一行已经输出 所以从 2 开始 最长为 原始字符串长度 循环输出每行组合 for int x 2 x str length x 调用方法 传入 原始字符数组 和 前一次的字符串数组 获 得新的字符串数组 strs addChar chs strs 按指定格式输出新的字符串数组 printString strs 定义方法 接收 原始字符数组 和 前一次的字符串数组 并返回新字符串数组 public static String addChar char chs String oldStrs 因为新字符数组长度暂时无法确定 也为了转换方便 所以使用 StringBuilder 来接收每个新字符串 StringBuilder sb new StringBuilder 定义新字符串数组 String newStrs null 外循环 遍历每个字符串数组 for int x 0 x oldStrs length x 内循环 遍历每个原始字符 将每个字符串把每个不同字符 都单独添加一次 for int y 0 y 0 来确定已包含 if oldStrs x indexOf chs y 0 已包含该字符 则不操作 继续下次循环 continue 不包含该字符 则添加该字符 String s oldStrs x chs y 添加新字符串到 StringBuilder 对象并用 隔开 sb append s append 删除 StringBuilder 对象最后的一个 并转成字符串 再将字符串按 切割 获得新字符串数组 newStrs sb deleteCharAt sb length 1 toString split 返回新字符串数组 return newStrs 将指定字符串数组按指定格式输出并换行 public static void printString String strs for String s strs System out print s System out println 将指定字符数组转成字符串数组 即每个字符串只有一个字符 并返回 public static String chsToStrs char chs 字符串数组长度和字符数组长度一致 String strs new String chs length for int x 0 x chs length x 将单个字符转成单个字符的字符串 strs x chs x return strs 19 题目 看这个数列 找出规律和出口 然后计算出第 12 项的数值 数列如下 1 2 3 4 6 9 13 19 28 思路 1 找规律 发现从第四项开始 n n 1 n 3 2 找出口 n 1 2 3 是已知的 3 用递归解决问题 导包 class Test public static v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论