配合学习笔记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);
}
}