JavaSE编码试题强化练习2

Posted 我有两个皮夹克

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
      }
    }
  }
}

运行结果:

 

 

 

 

 

以上是关于JavaSE编码试题强化练习2的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE编码试题强化练习6

JavaSE编码试题强化练习5

01 变量与数据类型

JavaSE 方法的使用

JavaScript笔试题(js高级代码片段)

片段(Java) | 机试题+算法思路+考点+代码解析 2023