配合学习笔记01的代码
Java中的基本数据类型
/** * Java基本数据类型 */ package org.sean.module01; /** * @author 不落的太阳(Sean Yang) */ public class BasicType { /** * 基本类型的自动提升 * * 自动提升的规则如下: * * 如果两个操作数中有一个是double类型,则系统先将另一个操作数转换为double类型,然后运算,否则 * 如果两个操作数中有一个是float类型,则系统先将另一个操作数转换为float类型,然后运算,否则 * 如果两个操作数中有一个是long类型,则系统先将另一个操作数转换为long类型,然后运算,否则 * 所有的操作数都被转换为int类型进行运算(低于int类型的会自动提升) * * 如果采用"+=","*="等缩略形式的运算符,则系统会强制将运算结果转换为目标变量类型。 * */ public static void typeAutoUppgrade() { char c = 'a'; byte b = 44; short s = 1023; int i = 40000; long l = 1234L; float f = 35.6F; double d = 3.13D; double result = (b * f) + (f * l) + (i / c) - (d * s); System.out.println("自动类型提升的测试结果为" + result); @SuppressWarnings("unused") boolean flag = false; } /** * 基本类型的自动转换 * * 自动类型转换的规则: * * 两种类型是兼容类型;目标类型的范围要比源类型的范围大 */ public static void autoChange() { char c = 'c'; byte b = 44; short s = b; int i1 = s; int i2 = c; long l = i1; float f = l; double d = f; System.out.print("c=" + c + "\t"); System.out.print("b=" + b + "\t"); System.out.print("s=" + s + "\t"); System.out.print("i1=" + i1 + "\t"); System.out.print("i2=" + i2 + "\t"); System.out.print("l=" + l + "\t"); System.out.print("f=" + f + "\t"); System.out.print("d=" + d + "\t"); System.out.println(); /** * 当float转换为double时,会出现不相等的情况 * * 原因:float是32位的,double是64位的,在进行类型转换的时候,操作数都是以二进制的形式进行的, * 而浮点型无法用二进制精确表示,所以在类型转换时出现不相等的情况 */ float f2 = 1.7F; double d2 = f2; System.out.println("f2=" + f2 + "\t" + "d2=" + d2); float f3 = (float) d2; System.out.println("f3=" + f3); } /** * 基本类型的强制类型转换 * * 强制类型转换的规则: * * 当两种类型不兼容或者,目标类型比源类型的范围小,就要进行强制类型转换 * * 转化时会发生"截断取模"的现象 */ public static void forceChange() { double d = 123.45D; float f = (float) d; long l = (long) d; int i = (int) d; short s = (short) d; byte b = (byte) d; System.out.print("d=" + d + "\t"); System.out.print("f=" + f + "\t"); System.out.print("l=" + l + "\t"); System.out.print("i=" + i + "\t"); System.out.print("s=" + s + "\t"); System.out.print("b=" + b + "\t"); /** * 首先对d2进行截断操作,值变为567,然后对128进行取模,得到结果 */ double d2 = 567.8D; b = (byte) d2; System.out.println(b); } public static void main(String[] args) { BasicType.typeAutoUppgrade(); BasicType.autoChange(); BasicType.forceChange(); } }
Java中的运算符
/** * Java中的运算符 */ package org.sean.module01; /** * @author 不落的太阳(Sean Yang) */ public class Operator { /** * 算数运算符: +, -, *, /, % * * @param a * 左操作数 * @param b * 右操作数 */ public static void ArithmeticOperator(int a, int b) { int result = a + b; System.out.println("a+b=" + result); /** * 当 * 号两边的数据类型为char,byte,short时,其均会转换为int进行运算 除此以外运算结果取决于两个操作数中范围较宽的类型 * * 当乘法运算产生的结果发生数据溢出时,不会抛出ArithmeticException,只会出现精度丢失的情况 */ int mutiplyResult = a * b; System.out.println("a*b=" + mutiplyResult); /** * 对于除法运算,当 / 号两边数据类型为整型时,结果为整型(不管其能否被除尽) * * 当 / 号两边数据有一个是浮点型,结果为浮点型 * * 如果左操作数为整型,当 / 号的右操作数为0时,会抛出ArithmeticException * * 如果左操作数为浮点型,当 / 号的右操作数为0时,不会抛出异常 * * 常见结果有三种:Infinity; -Infinity; NaN * * Infinity ---> 2.0/0 -Infinity ---> -2.0/0 NaN ---> 0.0/0; 0.0/0.0; 0/0.0 */ int divideResult = a / b; System.out.println("a/b=" + divideResult); /** * 判断是否为NaN */ System.out.println("0.0/0.0 is NaN:" + Double.isNaN(0.0/0.0)); /** * 对于取模运算:实质是用左操作数连续减去右操作数,直到相减的结果小于右操作数,此时结果即为余数 * * 当取模运算中有负数作为操作数的时候,取模运算结果的符号取决于左操作数的符号 * * 如果左操作数为整型,当 % 符号的右操作数为0时,会抛出ArithmeticException * * 如果左操作数为浮点型,当 % 符号右操作数为0时,不会抛出异常, * * NaN :2.0%0; -2.0%0; 0.0%0; 0%0; 0%0.0 */ int modResult = a % b; System.out.println("a%b=" + modResult); } /** * 比较运算符: ==, !=, <, <=, >, >=, * * @param a * 左操作数 * @param b * 右操作数 */ public static void compareOperator(int a, int b) { System.out.println("a==b " + (a == b)); System.out.println("a!=b " + (a != b)); System.out.println("a>b " + (a > b)); System.out.println("a>=b " + (a >= b)); System.out.println("a<b " + (a < b)); System.out.println("a<=b " + (a <= b)); } /** * 位运算: &, |, ^, ~, >>, >>>, << * * @param a * 左操作数 * @param b * 右操作数 */ public static void bitOperator(int a, int b) { /** * 按位与,两个操作数都为1时,结果为1,否则为0 */ int c = a & b; System.out.println("按位与后:" + c); /** * 按位或,两个操作数都为0时,结果为0,否则为1 */ c = a | b; System.out.println("按位或后:" + c); /** * 按位异或,两个操作数相同时结果为0,不同时结果为1 */ c = a ^ b; System.out.println("按位异或后:" + c); /** * 按位非,如果操作数为0,则变成1,如果为1,则变成0 */ c = ~a; System.out.println("按位非后:" + c); /** * 左移 (<<) 低位补零,高位舍弃,其实质相当于乘以2的n次方 */ c = a << b; System.out.println("左移后:" + c); /** * 右移 (>>) 如果值为正:高位补零,低位舍弃,如果值为负,高位补1,低位舍弃,其实质相当于除以2的n次方 */ c = a >> b; System.out.println("右移后:" + c); /** * 无符号右移 (>>>) 不论正负与否,高位补零,低位舍弃 */ c = a >>> b; System.out.println("无符号右移后:" + c); } /** * 逻辑运算符: &, |, ^, !, &&, ||, * * @param b1,b2,b3 * 参与逻辑运算的boolean表达式 */ public static void booleanOperator(boolean b1, boolean b2, boolean b3) { /** * 短路与运算:如果第一个表达式结果为false,那么整个表达式的结果就是false,后面的表达式不再运算 */ if (b1 && b2 && b3) { System.out.println("变量b1, b2, b3都为true"); } else { System.out.println("变量b1, b2, b3至少有一个是false"); } /** * 短路或运算:如果第一个表达式结果为true,那么整个表达式的结果就是true,后面的表达式不再运算 */ if (b1 || b2 || b3) { System.out.println("变量b1, b2, b3至少有一个true"); } else { System.out.println("变量b1, b2, b3都是false"); } /** * 异或运算:操作数相同为false,不同为true */ if (b1 ^ b2) { System.out.println("b1, b2的值不同"); } else { System.out.println("b1, b2的值相同"); } } /** * 其他运算符 * * @param i * 参与运算的变量 */ public static void otherOperator(int i) { System.out.println(i++); System.out.println(++i); int x = (i > 0) ? i : -i; System.out.println(x); } public static void main(String[] args) { int a = 7; int b = 5; Operator.ArithmeticOperator(a, b); Operator.compareOperator(a, b); Operator.bitOperator(a, b); boolean b1 = true; boolean b2 = false; boolean b3 = true; Operator.booleanOperator(b1, b2, b3); Operator.otherOperator(7); } }
Java中的流程控制
/** * Java中的流程控制 */ package org.sean.module01; /** * @author 不落的太阳(Sean Yang) */ public class FlowControl { // 目标值 public static final int TARGET_NUMBER = 10; public FlowControl() { System.out.println("constructor called"); } /** * 通过if语句和递归方法使n的值逐渐变为TARGET_NUMBER; * * @param n */ public void ifStatement(int n) { System.out.print(n + " "); if (n == TARGET_NUMBER) { System.out.println(); } else if (n > TARGET_NUMBER) { ifStatement(--n); } else if (n < TARGET_NUMBER) { ifStatement(++n); } } /** * 通过for循环将n的值逐渐变为TARGET_NUMBER * * @param n */ public void forStatement(int n) { for (; n > TARGET_NUMBER; n--) { System.out.print(n + " "); } for (; n < TARGET_NUMBER; n++) { System.out.print(n + " "); } System.out.println(n); } /** * 通过while循环将n的值逐渐变为TARGET_NUMBER * * @param n */ public void whileStatement(int n) { while (n < TARGET_NUMBER) { System.out.print(n++ + " "); } while (n > TARGET_NUMBER) { System.out.println(n-- + " "); } System.out.println(n); } /** * 通过do...while循环将n的值逐渐变为TARGET_NUMBER * * @param n */ public void doWhileStatement(int n) { if (n > TARGET_NUMBER) { do { System.out.print(n-- + " "); } while (n > TARGET_NUMBER); } else if (n < TARGET_NUMBER) { do { System.out.print(n++ + " "); } while (n < TARGET_NUMBER); } System.out.println(n); } /** * switch结构 * * @param n */ public void switchStatement(int n) { switch (n) { case 10: System.out.println("n=10"); break; case 9: System.out.println("n=9"); break; case 8: System.out.println("n=8"); break; default: System.out.println("n!=8 and n!=9 and n!=10"); break; } } public static void main(String[] args) { FlowControl control = new FlowControl(); control.ifStatement(6); control.forStatement(16); control.whileStatement(6); control.doWhileStatement(16); control.switchStatement(8); } }
最后带给大家一个比较全面的打印各种形状的代码,貌似有时笔试面试会问到
/** * 打印各种图形 */ package org.sean.module01; import java.util.Scanner; /** * @author 不落的太阳(Sean Yang) */ public class PrintTriangle { public static void shape1(int k) { for (int i = 0; i < k; i++) { for (int j = 0; j <= i; j++) { System.out.print("*"); } System.out.println(); } } public static void shape2(int k) { for (int i = 0; i < k; i++) { for (int j = k; j > i; j--) { System.out.print("*"); } System.out.println(); } } /** * 打印等腰三角形 * * @param i * 三角形的行数 */ public static void shape3(int n) { for (int i = 1; i <= n; i++) { for (int j = n - i; j >= 0; j--) { System.out.print(" "); } for (int k = 1; k <= (2 * i - 1); k++) { System.out.print("*"); } System.out.println(""); } } /** * 打印实心菱形 * * @param i * 菱形的行数 */ public static void shape4(int n) { for (int i = 0; i < n; i++) { for (int k = n - i; k > 0; k--) { System.out.print(" "); } for (int j = 1; j <= (2 * i + 1); j++) { System.out.print("*"); } System.out.println(); } for (int i = n - 1; i > 0; i--) { for (int k = 0; k <= n - i; k++) { System.out.print(" "); } for (int k = (2 * i); k > 1; k--) { System.out.print("*"); } System.out.println(); } } /** * 打印空心菱形 * * @param n * 菱形行数 */ public static void shape5(int n) { for (int i = 0; i < n; i++) { for (int k = n - i; k > 0; k--) { System.out.print(" "); } System.out.print("*"); for (int j = 1; j <= (2 * i - 1); j++) { System.out.print(" "); } if (i > 0) { System.out.print("*"); } System.out.println(); } for (int i = n - 1; i > 0; i--) { for (int k = 0; k <= n - i; k++) { System.out.print(" "); } System.out.print("*"); for (int k = ((2 * i) - 1); k > 2; k--) { System.out.print(" "); } if (i > 1) { System.out.print("*"); } System.out.println(); } } public strictfp static void main(String[] args) { Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); PrintTriangle.shape1(i); System.out.println(); PrintTriangle.shape2(i); System.out.println(); PrintTriangle.shape3(i); System.out.println(); PrintTriangle.shape4(i); System.out.println(); PrintTriangle.shape5(i); } }