实现一个需求的正常流程应该是这样的:
1. 分析需求
2. 思考解决方案
3. 将解决方法用程序语言表达出来
----------------------------------------
下面的内容过于基础,建议选择性阅读
----------------------------------------
接下来按照这个思路解决两个问题。控制台打印Hello World 。
1. 需求不难理解
2. 控制台打印的话用System.out.print()方法好了
敲代码:
// 1. 我们的程序需要运行起来,所以首先要有一个包含main方法的主类public class ConsolePrint {
public static void main(String[] args) {
// 2. 打印 Hello World System.out.print("Hello World");
}
}
按照上面的方法,我们实现了一个简单的需求。然后来看一下第二个需求:接收一个int类型的数组,使用冒泡排序对数组排序,返回排序之后的数组。
假设题主不知道, 我先声明一下:我只是用冒泡排序举例,冒泡排序算法不是我创造的。
1. 需求分析
为了解决这个问题,我们需要定义一个方法。方法接收一个int类型的数组,对数组排序之后将结果返回给调用者。
2. 实现方法(思考解决方法,并把方案转换为代码)冒泡排序:遍历集合,依次比较相邻两个元素,如果元素的位置不符合要求则将这两个元素交换位置,直到集合中没有可以交换的元素。
假设给定的数组为: [1, 3, 5, 2, 4] , 从低到高排序。
第一次排序 (加粗的元素表示正在比较的元素):
[1, 3, 5, 2, 4] -> [1, 3, 5, 2, 4] -> [1, 3, 5, 2, 4] ->交换->
[1, 3, 2, 5, 4] ->交换
结果:[1, 3, 2, 4, 5]
遍历并比较:
// arr 为给定的数组int length = arr.length;
for (int m = 0; m > 0;) {
for (int n = 0;
// 每个元素要与之后的元素(n + 1)进行比较, length - 1 为数组中最后一个元素的下标 // n < length - 1 使 n + 1 的最大值为 length - 1, 避免 IndexOutOfBoundException n < length - 1; n++) {
// 判断相邻的元素是否符合从小到大的排序规则 if (arr[n] > arr[n+1]) {
// 交换元素位置 int temp = arr[n];
arr[n] = arr[n+1];
arr[n+1] = temp;
// 记录此轮遍历被交换的元素个数 m++;
}
}
}
第二次排序:
[1, 3, 2, 4, 5] -> [1, 3, 2, 4, 5] ->交换-> [1, 2, 3, 4, 5]
经过第一次排序,数组中最大的元素5 被交换到最后的位置,在第二轮我们可以跳过这个元素。经过观察,每轮排序之后当前的最大元素都会被交换到尾部,利用这一点可以稍微对算法进行一点优化。
public int[] bubbleSort(int[] arr) {
int length = arr.length;
for (int m = 0;
// m为啥小于length - 1 m < length - 1; m++) {
for (int n = 0; n < length - 1 - m; n++){
if (arr[n] > arr[n+1]) {
int temp = arr[n];
arr[n] = arr[n+1];
arr[n+1] = temp;
}
}
}
}
到这里,我们已经根据自己的思路将冒泡排序实现出来了;
总结一下:试着用代码陈述自己,不要想着创造能自行解决问题的代码。
我是这样想的。