【Java SE 代码回顾】——day02_数组、排序、自定义类

简介: 【Java SE 代码回顾】——day02_数组、排序、自定义类

这个系列是对javaSE课程代码的回顾,所有Demo都是亲自动手实现的,并做了小小的change,为了方便自己理解和后期复习,代码里加了大量的注释。现对所有知识点的代码进行复习整理,进一步理解、完善代码,对注释进行补充。其中重要的知识点会单独说明,但主要以代码为主。

说明:博客是对学习内容的巩固,很多注释是为了自己理解,所以不会很专业。

------------------------------------------------------ArrayDemo01--------------------------------------------------  

package cn.tjpu.javase02.Array;
/**
 * 该类实现输入数据求总分,平均分
 * @author Administrator——>写入文档
 */
import java.util.Scanner;
public class ArrayDemo01 {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 定义一个数组用来存放输入的数据
    float[] ScoreArr = new float[5];
    // 用循环接收5个输入
    for (int i = 0; i < 5; i++) {
      System.out.println("输入成绩:");
      String line = sc.nextLine();
      // 将字符串转换成float(从终端输入的都为字符串)
      ScoreArr[i] = Float.parseFloat(line);
    }
    // 遍历数组累加里面的值
    float sum = 0;
    for (int i = 0; i < 5; i++) {
      sum += ScoreArr[i];
    }
    System.out.println("总成绩:" + sum);
    System.out.println("平均成绩:" + sum / 5);
  }

---------------------------------------------------ArrayDemo02----------------------------------------------------

package cn.tjpu.javase02.Array;
/**
 * 该类实现遍历数组,倒序打印
 */
public class ArrayDemo02 {
  public static void main(String[] args) {
    // 定义一个数组,遍历赋值(批量自动装数据)
    int[] a = new int[21];
    for (int i = 0; i < a.length; i++) {
      a[i] = i;
    }
    // 倒序打印
    for (int i = a.length - 1; i >= 0; i--) {
      System.out.println(a[i]);
    }
    // 正序输出(while)
    int i = 0;
    while (i < a.length) {
      System.out.println(a[i]);
      i++;
    }
    // 倒序输出(while)
    int i1 = a.length - 1;
    while (i1 > -1) {
      System.out.println(a[i1]);
      i1--;
    }
  }

--------------------------------------------------ArrayDemo03--------------------------------------------------

package cn.tjpu.javase02.Array;
/**
 * 求最大最小值
 */
public class ArrayDemo03 {
  public static void main(String[] args) {
    // 定义一个数组,并往里面添加数据
    int[] arr = new int[5];
    arr[0] = 23;
    arr[1] = 6;
    arr[2] = 9;
    arr[3] = 89;
    arr[4] = 3;
    // 打印最大值
    int temp = arr[0];// 定义临时变量
    // 遍历数组取出最大值赋给max
    for (int i = 0; i < arr.length; i++) {
      if (arr[i] > temp) {
        temp = arr[i];
      }
    }
    System.out.println("最大值是:" + temp);
    // 打印最小值
    temp = arr[0];// 重新给临时变量赋值
    for (int i = 0; i < arr.length; i++) {
      if (arr[i] < temp) {
        temp = arr[i];
      }
    }
    System.out.println("最小值是:" + temp);
  }

--------------------------------------------------ArrayDemo04--------------------------------------------------

package cn.tjpu.javase02.Array;
/**
 * 冒泡排序的实现(固定模板)
 */
public class ArrayDemo04 {
  public static void main(String[] args) {
    int[] a = new int[5];
    a[0] = 2;
    a[1] = 4;
    a[2] = 7;
    a[3] = 3;
    a[4] = 0;
    // 冒泡排序(固定模板)
    for (int j = 0; j < a.length - 1; j++) {
      for (int i = 0; i < a.length - 1 - j; i++) {
        if (a[i] > a[i + 1]) {
          int temp = a[i];
          a[i] = a[i + 1];
          a[i + 1] = temp;
        }
      }
    }
    // 打印结果
    for (int i = 0; i < a.length; i++) {
      System.out.println(a[i]);
    }
  }

-------------------------------------------------学生信息管理---------------------------------------------------------

package cn.tjpu.javase02.Student;
/**
 * 定义一个学生信息类
 */
public class StudentInfo {
  // 名字、学号、年龄、成绩
  String name;
  String Number;
  int age;
  float score;
package cn.tjpu.javase02.Student;
/**
 * 学生成绩信息管理
 */
import java.util.Scanner;
public class StudentMange {
  public static void main(String[] args) {
    /*
     * 类只是一个模板,没有具体的数据,只是定义了一些属性和方法(逻辑) 所以要建一个类的对象,这个对象才是有意义的,有具体的数据(可以用该类型的变量来引用)
     * 从终端输入每个学生信息:姓名,学号,年龄,成绩。
     */
    Scanner sc = new Scanner(System.in);
    // 从终端接收第一个学生的信息
    System.out.println("请输入第1个学生信息:");
    StudentInfo stu1 = new StudentInfo();
    stu1.name = sc.nextLine();
    stu1.Number = sc.nextLine();
    stu1.age = Integer.parseInt(sc.nextLine());// 字符串->int
    stu1.score = Float.parseFloat(sc.nextLine());// 字符串->float
    // 从终端接收第二个学生的信息
    System.out.println("请输入第2个学生信息:");
    StudentInfo stu2 = new StudentInfo();
    stu2.name = sc.nextLine();
    stu2.Number = sc.nextLine();
    stu2.age = Integer.parseInt(sc.nextLine());
    stu2.score = Float.parseFloat(sc.nextLine());
    // 从终端接收第三个学生的信息
    System.out.println("请输入第3个学生信息:");
    StudentInfo stu3 = new StudentInfo();
    stu3.name = sc.nextLine();
    stu3.Number = sc.nextLine();
    stu3.age = Integer.parseInt(sc.nextLine());
    stu3.score = Float.parseFloat(sc.nextLine());
    // 创建一个学生信息类数组,放入三个学生的信息(学生信息类和基本类型一样,只不过是自己定义的)
    StudentInfo[] students = new StudentInfo[3];
    students[0] = stu1;
    students[1] = stu2;
    students[2] = stu3;
    // 根据分数倒序排序(冒泡排序)
    for (int j = 0; j < students.length - 1; j++) {
      for (int i = 0; i < students.length - 1 - j; i++) {
        if (students[i].score < students[i + 1].score) {
          StudentInfo temp = students[i];
          students[i] = students[i + 1];
          students[i + 1] = temp;
        }
      }
    }
    // 将排序后的结果打印出来
    for (int i = 0; i < students.length; i++) {
      System.out.println(students[i].name + ":" + students[i].Number
          + "," + students[i].age + "," + students[i].score);
    }
  }
相关文章
|
6天前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
38 20
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
166 57
|
21天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
70 8
|
2月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
32 0
|
9天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
49 17
|
19天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
4天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
21天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
21天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。