if 语句
1 尽量使用肯定的表达式表述逻辑
2 减少多层嵌套。一般不超过2层
3 减少写else
练习:判断是否有航班
条件:byte date = 0x69;// 01101001
4
01101001
00010000
int day = 4;
int mask = 1<<day;
练习:
1 实现Bin字符串转成整数:
"101010001" -> int (101010001)
012345678
i = 0~<str.length()
char c = str.charAt(i);
x=(c-'0')|(x<<1);
for(int i=0; i<str.length(); i++){
}
2 把一个10进制字符串转换成 int
如:"1234"=>1234
3 把一个16进制字符串转换成 int
如:"4e2d"=>20013
4 把一个整数转换成2进制字符串
i = 0x2f -> "101111"
i 101111
mask 000001
String str = "";
while(true){
str = (i & mask) + str
i>>>=1;
if(i==0)
break;
}
5 把一个整数转换成16进制字符串
6 把一个整数转换成8进制字符串
if ... else
if(条件表达式){
}else{
}
if正确的应用:
boolean isBoy = false;
if(isBoy){
System.out.println("小伙子你好!");
}else{
System.out.println("超级小美女!");
}
一个典型的错误案例:
boolean isBoy = false;
if(isBoy=true){//语法对,但是不能是赋值语句
System.out.println("小伙子你好!");
}else{
System.out.println("超级小美女!");
}
for 循环
1 死循环
for(;;){
}
2
break 结束当前循环
continue 继续当前循环
案例:
统计一个字符串中的英文字母数量,
并且将多个字母替换为下一个划线
"北京2008, Beijing 2008"->"北京2008, _ 2008"
调试一个代码:
1 软件状态=数据=变量的值
2 利用输出语句输出代码的工作状态,与预期的理想值
比较,发现并查找错误
while ,do while
1 不计次的循环,处理到某个条件不满足为止
案例:
把一个16进制字符串转换成 int
如:"4e2d"=>20013
"4e2d"
'4'-'0'=52-48=4
'4'-> 00000000 00000000 00000000 00000100
sum=0=00000000 00000000 00000000 00000000
sum<<=4;
sum=00000000 00000000 00000000 00000000
+ 00000000 00000000 00000000 00000100
------------------------------------------
sum=00000000 00000000 00000000 00000100
sum<<=4;
sum=00000000 00000000 00000000 01000000
'e'->00000000 00000000 00000000 00001110
+ --------------------------------------
sum=00000000 00000000 00000000 01001110
sum<<=4;
sum=00000000 00000000 0000 0100 11100000
方法:
1 功能==动作==方法==动词
User reg(String name,
String pwd, String email)
User login(String name, String pwd)
2 语法
修饰词 返回值类型 方法名(参数列表){}
修饰词 public private
protected staic final
返回值类型: void,基本类型、类,相当于数学上的值域
void 表示无返回值。
方法名:功能的名词,一般是动词
参数列表:功能依赖的前提条件列表
return 语句:
1 如果方法有返回值声明,方法中一定包含一个
return语句,并且在return后面返回的类型一定
与返回类型兼容
2 如果返回值是void 就可以不写return。
3 如果软件包含多个return,将在第一个执行到的
return 语句结束方法。
4 在无返回值的方法中使用return可以提前结束方法
{}: 方法体,是方法的逻辑过程描述
如:y=f(x)=x+1;
static long f(int x){
return x+1;
}
static int abs(int x){
if(x>0){
return x;
}else{
return -x;
}
}
变量是在Java栈中分配的。
变量的作用域: 方法的参数变量的作用域是在方法内部有效
离开方法就回收掉。
数组:
1 一组同种类型变量的集合。如:所有课程的分数。
int[] scores = new int[10];
int[] 是数组的数据类型
int[] scores; 可以声明一个数组变量scores
scores = new int[10];是数组的初始化。
2 可以使用动态初始化(使用new),和静态初始化一个数组
int[] ary = new int[10];//动态初始化
int[] ary = new int[]{2,3};//动态初始化
int[] ary = {2,3}; //静态初始化,只能在声明
// 语句中直接使用
//ary = {5,6};//编译错误,
ary = new ary[]{5,6};//对,使用动态初始化。
在使用 new int[10] 动态初始化数组时:
1 必须给出数组大小!
2 数组成员默认自动初始化。初始化为“零”值
“零”值: 0, 0.0, '\u0000', false, null
3 数组下标:
1 使用下标可以访问数组成员:ary[0]
2 下标范围:0~length-1
3 数组的长度是固定的!
4 使用length属性可以访问数组长度
5 如果超越下标范围会抛出异常, 可能在面试中出现
java.lang.ArrayIndexOutOfBoundsException
4 不建议使用int ary[] 声明数组,这个只是一种与
cpp 类似的语法结构。Java本质上没有int ary[]。
在Java 中数组是类型是(int[])。
* int ary[] = new int[5];//不推荐的声明方式。
作业:
1 完善IntegerUtil,适当的完善,不用全部实现。
String toHexString(int n)
String toOctString(int n)
int parseHexString(Stirng hex)
int parseBinString(String bin)
int parseDecString(String dec)
提示: char[] ch = {'0','1','2','3',
'4','5','6','7',
'8','9','a','b',
'c','d','e','f'};
0~15->'0'~'f'
int n = 14;
//使用数组实现 0~15->'0'~'f'
char c = ch[n];
//使用数学表达式实现:0~15->'0'~'f'
char c = (char)(n<10?n+'0':n-10+'a');
2 EAN-13码的检查码的算法 ,例如假设一EAN-13码各码代号如下:
N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 C
检查码之计算步骤如下:
C1 = N1+ N3+N5+N7+N9+N11
C2 = (N2+N4+N6+N8+N10+N12)× 3
CC = (C1+C2) 取个位数
C (检查码) = 10 - CC (若值为10,则取0)
给定:12位条码:"690208388140"
计算出验证码:5
包装成为一个方法, 给定一个13位字符串:ean13
根据前12位计算验证码c与第13位比较,一样返回true
表示验证码是合法的验证码。方法示例如下:
static boolean verify(String ean13){
}