JavaSE编码试题强化练习2

1.编写递归算法程序:一列数的规则如下: 0、1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。

public class TestRecursion {
  public static void main(String[] args) {
    /**
     * 调用fibo方法并输出结果
     */
    int n = 40;
    TestRecursion tr = new TestRecursion();
    System.out.println(tr.fibo(n));
  }

  /**
   * 定义递归方法
   */
  private long fibo(int n) {
    /**
     * 递归结束条件1:数列的第一个数0
     */
    if (n == 0){
      return 0;
    }
    /**
     * 递归结束条件2:数列的第二个数是1
     */
    if (n == 1){
      return 1;
    }
    /**
     * 运用递归求第n个数
     */
    return fibo(n - 1)+fibo(n - 2);
  }
}

运行结果:

2.编写多线程程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,有10个人同时准备过此山洞,显示每次通过山洞人的姓名和顺序。

/**
 * 山洞类实现了Runnable接口
 */
public class Cave implements Runnable {
  /**
   * 初始人数为设为0
   */
  private int crossedNum = 0;
  @Override
  public void run() {
    cross();
  }
  private synchronized void cross() {
    try {
      /**
       * 每个人通过山洞的时间为5秒
       */
      Thread.sleep(5000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    /**
     * 人数计数
     */
    crossedNum++;
    System.out.println(Thread.currentThread().getName()+"通过了山洞,这是第"+crossedNum+"个通过的人");
  }
}
/**
 * 2.编写多线程程序,模拟多个人通过一个山洞的模拟。
 * 这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,有10个人同时准备过此山洞,显示每次通过山洞人的姓名和顺序。
 */
public class TestMultiThreading {
  public static void main(String[] args) {
    /**
     * 创建一个山洞
     */
    Cave ca = new Cave();
    /**
     * 创建十个过山洞的线程
     */
    for (int i = 0; i < 10; i++) {
      Thread t = new Thread(ca,"t"+i);
      t.start();
    }
  }
}

运行结果:

间隔5秒输出一次结果,最终图如下

3.由控制台按照固定格式输入学生信息,包括学号,姓名,年龄信息,当输入的内容为exit退出;将输入的学生信息分别封装到一个Student对象中,再将每个Student对象加入到一个集合中,要求集合中的元素按照年龄大小正序排序;最后遍历集合,将集合中学生信息写入到记事本,每个学生数据占单独一行。

/**
 * 创建学生类,实现Comparable接口
 */
public class Student implements Comparable<Student> {
  /**
   * 私有属性:学号,姓名,年龄
   */
  private Integer stuId;
  private String name;
  private Integer age;
  /**
   *构造方法
   */
  public Student() {
  }
  public Student(Integer stuId, String name, Integer age) {
    this.stuId = stuId;
    this.name = name;
    this.age = age;
  }
  /**
   * getter和setter方法
   */
  public Integer getStuId() {
    return stuId;
  }
  public void setStuId(Integer stuId) {
    this.stuId = stuId;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Integer getAge() {
    return age;
  }
  public void setAge(Integer age) {
    this.age = age;
  }
  @Override
  public int compareTo(Student stu) {
    return this.age - stu.age;
  }
  public String toString(){
    return "Student [age = " + age + ",name = " + name +",stuId = " + stuId + "]";
  }
}
public class TestStudent {
  public static void main(String[] args) {
    Set<Student> stuSet = saveStudentInfo();
    outputInfo(stuSet);
  }
  private static Set<Student> saveStudentInfo() {
    Scanner input = new Scanner(System.in);
    /**
     * 创建TreeSet保存学生信息
     */
    Set<Student> stuSet = new TreeSet<Student>();
    while (true){
      /**
       * 输入提示
       */
      System.out.println("请输入学生信息(学号#姓名#年龄)");
      String inputData = input.nextLine();
      /**
       * 判断是否退出 inputData.equals("exit")
       */
      if ("exit".equals(inputData)){
        break;
      }
      /**
       * 把用户输入的学生信息分割为String[]
       */
      String [] info = inputData.split("#");
      /**
       * 将输入信息封装到Student对象中
       */
      Student stu = new Student(Integer.parseInt(info[0]),info[1],
        Integer.parseInt(info[2]));
      /**
       * 将学生对象加入集合
       */
      stuSet.add(stu);
    }
    return stuSet;
  }
  private static void outputInfo(Set<Student> stuSet){
    File file = new File("e:/student.txt");
    /**
     * 创建文件输出流对象
     */
    FileWriter fw = null;
    try {
      fw = new FileWriter(file);
      Iterator<Student> it = stuSet.iterator();
      while (it.hasNext()){
        String info = it.next().toString();
        /**
         * 将字符串写入记事本
         */
        fw.write(info);
        /**
         * 完成换行
         */
        fw.write("\r\n");
      }
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      try {
        fw.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

运行结果:

原文地址:https://www.cnblogs.com/sinoaccer/p/11960643.html

时间: 2024-08-11 17:46:04

JavaSE编码试题强化练习2的相关文章

JavaSE编码试题强化练习4

1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中.并编写相应的测试代码. /** * Worker类 */ public class Worker implements Comparable<Worker>{ /** * 私有属性 */ private String name; private int age; private double salary; /** * 构造方法 */ public Worker() { } public

JavaSE编码试题强化练习5

1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(String[] args) { String s1 = "FEDCBA"; System.out.println("翻转前:"+s1); /** * 此处需注意用s1接收方法的返回值,不然输出的还是没翻转之前的s1 */ s1 = reverseI(s1); System

JavaSE编码试题强化练习6

1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { int [] arr = {87,65,5,5,43,21}; System.out.print("排序前:[ "); for (int i : arr){ System.out.print(i+" "); } System.out.println("]"

字符集与字符编码的强化理解与操作实践

字符集与字符编码的强化理解与操作实践 踩坑 最近在工作中遇到了一个说大不大说小不小的问题,就是当我解析一个xml文件的时候,抛出了一个"Invalid byte 2 of 2-byte UTF-8 sequence"的异常,这个异常会导致解析直接退出,显然不能容忍.查阅相关资料稍微定位了一下,大概知道是字符集的问题,仔细一看,xml文件中的确有中文字符,而且当我把这些中文字符删了之后的确又能解析成功.不过我还是不能理解这当中的缘由,不过由于时间原因,当时只是把中文字符删了就草草完工.现

JavaSE 面试题: 方法的参数传递机制

JavaSE 面试题 方法的参数传递机制 import java.util.Arrays; public class Test { public static void main(String[] args) { int i = 1; String str = "hello"; Integer num = 200; int[] arr = {1, 2, 3, 4, 5}; MyData my = new MyData(); change(i, str, num, arr, my); S

JavaSE 笔试题: 自增变量

JavaSE 笔试题 自增变量 public class Test { public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i=" + i); System.out.println("j=" + j); System.out.println("k=" + k); }

javaSE面试题总结

目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境配置 2 6. 什么是JVM?什么是JDK? 什么是JRE? 2 7. Java三种注释类型 3 第二章 数据类型和运算符 4 1. 8种基本数据类型及其字节数 4 2. i++和++i的异同之处 4 3. &和&&的区别和联系,|和||的区别和联系 5 4. 用最有效率的方法算出2乘以8

JAVASE面试题

1.抽象类和接口的区别 抽象类重在对象的本质,接口则是对象的附加行为 抽象类是按需实现 ,接口必须全部实现 一个类只能继承一个抽象类 ,但是能多实现接口 抽象类中能定义普通的方法 ,接口中不能定义普通的方法 应用的场景 : 抽象类: 在设计类时,如果有些方法我们能确定,而有些方法不能确定,这时候我们就可以把该类声明成抽象类 接口: 我们在定义相互调用规则时,可以使用接口.面向接口进行编程的明显好处,就是能极大降低软件系统的相互耦合性,接口的定义者按照接口进行调用,而实现者去实现接口 2.list

C++强化学习规划表

第一阶段 C语言加强以及C++语言详解(29天) 课程名称 课程内容 学习目标 C语言强化 · C语言基础复习(数据类型.变量.内存布局.指针基础) · C语言基础强化提高(C语言中的字符串.一维数组.二维数组) · C语言基础强化提高(一级指针,二级指针,三级指针实战,N级指针概念,指针数组和数组指针) · C语言基础强化提高(结构体.文件的使用) · 动态库的封装和设计 · 函数指针回调函数 · C语言面试题强化与提高 在基础班C语言知识点之上,掌握C语言深入技巧,为日后 做更大的项目打下坚