第3章 Java语言基础
本章读者可以学到如下实例:
- 实例011 输出错误信息与调试信息
- 实例012 从控制台接收输入字符
- 实例013 重定向输出流实现程序日志
- 实例014 自动类型转换与强制类型转换
- 实例015 加密可以这样简单(位运算)
- 实例016 用三元运算符判断奇数和偶数
- 实例017 不用乘法运算符实现2×16
- 实例018 实现两个变量的互换(不借助第3个变量)
实例013 重定向输出流实现程序日志
System
类中的out
成员变量是Java
的标准输出流,程序常用它来输出调试信息。out
成员变量被定义为fina
类型的,无法直接重新复制,但是可以通过setOut
方法来设置新的输出流。本实例利用该方法实现了输出流的重定向,把它指向一个文件输出流,从而实现了日志功能。程序运行后控制台提示运行结束信息,如图3.3所示,但是在运行过程中的步骤都保存到了日志文件中,如图3.4所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package com.mingrisoft; import java.io.FileNotFoundException; import java.io.PrintStream; public class RedirectOutputStream { public static void main(String[] args) { try { PrintStream out = System.out; PrintStream ps=new PrintStream("./log.txt"); System.setOut(ps); int age=18; System.out.println("年龄变量成功定义,初始值为18"); String sex="女"; System.out.println("性别变量成功定义,初始值为女"); String info="这是个"+sex+"孩子,应该有"+age+"岁了。"; System.out.println("整合两个变量为info字符串变量,其结果是:"+info); System.setOut(out); System.out.println("程序运行完毕,请查看日志文件。"); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
|
实例015 加密可以这样简单(位运算)
实例说明
本实例通过位运算的异或运算符“^”把字符串与一个指定的值进行异或运算,从而改变字符串中每个字符的值,这样就可以得到一个加密后的字符串,如图3.6所示。当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值,如图3.7所
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.mingrisoft; import java.util.Scanner; public class Example { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入一个英文字符串或解密字符串"); String password = scan.nextLine(); char[] array = password.toCharArray(); for (int i = 0; i < array.length; i++) { array[i] = (char) (array[i] ^ 20000); } System.out.println("加密或解密结果如下:"); System.err.println(new String(array)); } }
|
技术要点
本实例的关键技术是异或运算。如果某个字符(或数值)x与一个数值m进行异或运算得到y,则再用y与m进行异或运算就可以还原为x,因此应用这个原理可以实现加密和解密功能。
实例016 用三元运算符判断奇数和偶数
三元运算符是if...else
条件语句的简写格式,它可以完成简单的条件判断。本实例利用这个三元运算符实现了奇偶数的判断,程序要求用户输入一个整数,然后程序判断是奇数还是偶数,并输出到控制台中。实例的运行效果如图3.8所示。
1 2 3 4 5 6 7 8 9 10 11
| package com.mingrisoft; import java.util.Scanner; public class ParityCheck { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入一个整数:"); long number = scan.nextLong(); String check = (number % 2 == 0) ? "这个数字是:偶数" : "这个数字是:奇数"; System.out.println(check); } }
|
技术要点本实例的关键技术就是以三元运算符实现简单的条件判断。其语法格式如下
如果条件运算结果为true
,返回值就是运算结果1,否则返回运算结果2
实例017 不用乘法运算符实现2×16
程序开发中常用的乘法运算是通过“*”运算符或者BigDecimal
类的multiply()
方法实现的。但是本实例将介绍在这两种方法之外如何实现乘法,而且实现的运算效率非常高。实例的运行效果如图3.9所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package com.mingrisoft; import java.util.Scanner; public class Example { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.println("请输入一个整数"); long number = scan.nextLong(); System.out.println("你输入的数字是:"+number); System.out.println("该数字乘以2的运算结果为:"+(number<<1)); System.out.println("该数字乘以4的运算结果为:"+(number<<2)); System.out.println("该数字乘以8的运算结果为:"+(number<<3)); System.out.println("该数字乘以16的运算结果为:"+(number<<4)); } }
|
技术要点
本实例的关键技术就是左移运算。如果一个整数左移运算n位,就相当于这个整数乘以2的n次方。例如,2<<4
(即2左移4位)相当于2^4,也就是16
实例018 实现两个变量的互换(不借助第3个变量)
实例说明
变量的互换常见于数组排序算法中,当判断两个数组元素需要交互时,将创建一个临时变量来共同完成互换,临时变量的创建增加了系统资源的消耗。如果需要交换的是两个整数类型
的变量,那么可以使用更高效的方法。本实例演示了如何不借助临时变量(第3个变量)实现两个整数类型变量的高效互换。实例的运行效果如图3.10所示。
实现过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package com.mingrisoft; import java.util.Scanner; public class VariableExchange { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入变量A的值"); long A = scan.nextLong(); System.out.println("请输入变量B的值"); long B = scan.nextLong(); System.out.println("A=" + A + "\tB=" + B); System.out.println("执行变量互换..."); A = A ^ B; B = B ^ A; A = A ^ B; System.out.println("A=" + A + "\tB=" + B); } }
|