任意从键盘输入一组数字,然后将这些数字按顺序排列
### 知识点解析 #### 一、程序概述与需求分析 本程序主要实现了从键盘接收用户输入的一系列整数,并在用户输入特殊值(-1)后终止输入过程,随后对所有输入的数字进行升序排序并输出的功能。整个程序分为两个类:`Test` 类用于处理用户输入及调用排序逻辑;`PoPo` 类负责具体实现排序算法。 #### 二、程序结构分析 - **主类 `Test`**: - 定义了一个整型数组 `num[]` 来存储用户的输入; - 使用 `BufferedReader` 和 `InputStreamReader` 进行输入流的读取,便于从键盘接收用户输入; - 使用 `while` 循环不断读取用户输入的数字,直到用户输入 `-1` 为止; - 创建 `PoPo` 对象并传递用户输入的数字数组以及数组的有效长度给 `PoPo` 类进行排序处理。 - **辅助类 `PoPo`**: - 定义了用于存储数字的数组 `num[]` 及表示有效长度的变量 `length`; - 提供了构造函数来初始化数字数组和有效长度; - 实现了 `sort` 方法来完成升序排序的操作。 #### 三、关键代码解析 ##### 1. 输入处理 ```java BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); while (true) { temp = Integer.parseInt(buf.readLine()); if (temp != -1) { num[i] = temp; i++; sum += temp; } else { break; } } ``` - 使用 `BufferedReader` 类从标准输入流 (`System.in`) 读取一行文本,将其转换为整数类型并赋值给 `temp`; - 如果 `temp` 不等于 `-1`,则将该数字存入数组 `num[]` 并递增索引 `i`; - 当用户输入 `-1` 时,跳出循环。 ##### 2. 排序实现 ```java public void sort() { int i = 0; int j = 0; int temp = 0; for (i = 0; i < length; i++) { for (j = i; j < length - 1; j++) { if (num[i] > num[j + 1]) { temp = num[j + 1]; num[j + 1] = num[i]; num[i] = temp; } } } System.out.print("after sort: "); for (i = 0; i < length; i++) { System.out.print(num[i] + " "); } System.out.println(""); } ``` - 采用了简单的冒泡排序算法; - 外层循环遍历整个数组,内层循环比较相邻元素并进行交换; - 排序完成后输出排序后的结果。 #### 四、程序改进方向 - **异常处理**:当前版本没有处理可能出现的输入格式错误,如用户输入非数字字符会导致程序崩溃。可以增加异常捕获机制来增强健壮性。 - **输入验证**:对于输入数据的有效范围(如是否允许负数输入)可进行更细致的控制。 - **优化排序算法**:虽然冒泡排序简单易懂,但对于大量数据来说效率较低。可以考虑采用更高效的排序算法如快速排序或归并排序等。 #### 五、拓展知识点 - **Java I/O 流**:了解 `InputStreamReader` 和 `BufferedReader` 的作用及其工作原理。 - **异常处理**:掌握 Java 中的异常处理机制,包括 `try-catch` 语句的使用。 - **排序算法**:深入学习各种排序算法的原理、复杂度分析及适用场景。 通过以上分析,我们可以看出这个程序虽然较为简单,但涵盖了 Java 基础编程中的多个重要知识点,如输入流处理、数组操作、异常处理以及基本的排序算法等。
class Test{
public static void main(String args[]) throws IOException
{
int num[] = new int[20];
int i = 0;
int temp = 0;
int sum = 0;
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
temp = Integer.parseInt(buf.readLine());
if(temp != -1)
{
num[i] = temp;
i++;
sum += temp;
}
else
{
break;
}
}
PoPo popo = new PoPo(num, i);
popo.sort();
}
}
- yuanfensky_12013-12-20代码不是我想要的。。
- 粉丝: 0
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C++和C混合模式的操作系统开发项目.zip
- (源码)基于Arduino的全球天气监控系统.zip
- OpenCVForUnity2.6.0.unitypackage
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip