2019春节假期后开工,首先祝各位猪年大吉、诸事顺利、心想事成!开始想写一个DEMO练练手,想了想写个冒泡排序吧。代码基本OK,发现一个与自己预想不一致的一个问题,整理一下原因。
package algorithm;
import java.sql.Array;
/**
* 冒泡排序算法
*
* @author XUQIANG_DUAN
* @date 2019/2/12
* @time 9:39
*/
public class BubbleSort {
/**
* 打印数组信息
* @param state //状态:排序前/后
* @param array
*/
public static synchronized void print(String state, Integer[] array){
System.err.print(state+"数组为:");
for(int i = 0; i < array.length; i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
/**
* 冒泡排序方法
* @param array
* @return
*/
public static synchronized Integer[] bubbleSort(Integer[] array) {
BubbleSort.print("排序前", array);
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
//前大于后,交换
if(array[i] > array[j]){
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
}
}
}
BubbleSort.print("排序后", array);
return array;
}
public static void main(String[] args){
Integer[] array = {111,23,44,55,77,99,0,3,897};
BubbleSort.bubbleSort(array);
}
}
输出结果如下:
//输出结果如下:
排序前数组为:111 23 44 55 77 99 0 3 897
排序后数组为:0 3 23 44 55 77 99 111 897
为了强调输出语句中的状态信息(使用红色输出),将 System.out.print(state+"数组为:"); 更为 System.err.print(state+"数组为:"); 结果就有点凌乱了,如下图:
随后单独测试System.out与System.err寻找原因,具体细节如下:
public static void main(String[] args){
System.err.println("E1 This is err!");
System.out.println("O1 This is out!");
System.err.println("E2 This is err!");
System.out.println("O2 This is out!");
System.err.println("E3 This is err!");
System.out.println("O3 This is out!");
}
//第一次运行结果:
E1 This is err!
O1 This is out!
O2 This is out!
E2 This is err!
O3 This is out!
E3 This is err!
//第二次运行结果:
O1 This is out!
E1 This is err!
O2 This is out!
E2 This is err!
O3 This is out!
E3 This is err!
public static void main(String[] args){
System.out.println("O1 This is out!");
System.err.println("E1 This is err!");
System.out.println("O2 This is out!");
System.err.println("E2 This is err!");
System.out.println("O3 This is out!");
System.err.println("E3 This is err!");
}
//又一次运行结果
O1 This is out!
E1 This is err!
O2 This is out!
E2 This is err!
O3 This is out!
E3 This is err!
//再一次运行结果
O1 This is out!
O2 This is out!
O3 This is out!
E1 This is err!
E2 This is err!
E3 This is err!
为什么呢?System.out与System.err具体的区别是?整理一下,仅供参考。
名称 | 用途 | 输出显色颜色 | 缓存功能 | log4j日志记录 |
---|---|---|---|---|
System.out | 标准输出 | 黑色字体 | 缓存 | 会 |
System.err | 标准错误输出 | 红色字体 | 实时 | 不会 |
备注:System.out和System.err都能重定向到别的输出流中输出,此时控制台console区域不输出内容。
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream(new File("C:/Users/xuqiang_duan/Desktop/out.log"))));
System.setErr(new PrintStream(new FileOutputStream(new File("C:/Users/xuqiang_duan/Desktop/err.log"))));
System.out.println("O1 This is out!");
System.err.println("E1 This is err!");
System.out.println("O2 This is out!");
System.err.println("E2 This is err!");
System.out.println("O3 This is out!");
System.err.println("E3 This is err!");
}
PS:以上内容为个人理解(其中代码已全部实测),能力有限请各位多多指教,非常感激!