Java(6)控制语句
Java控制语句
Java 条件语句
if类型
- 语法格式如下:
if( x < 20 ){
System.out.print("这是 if 语句");
}
if-else类型
if最多有一个else语句
- 语法格式如下:
if( x < 20 ){
System.out.print("这是 if 语句");
}else{
System.out.print("这是 else 语句");
}
if-else if-else类型
- 语法格式如下:
if( x == 10 ){
System.out.print("Value of X is 10");
}else if( x == 20 ){
System.out.print("Value of X is 20");
}else if( x == 30 ){
System.out.print("Value of X is 30");
}else{
System.out.print("这是 else 语句");
}
嵌套的if-else语句
if( x == 30 ){
if( y == 10 ){
System.out.print("X = 30 and Y = 10");
}
}
条件判断注意事项:
- 用浮点数来进行==的判断不靠谱,因为计算机是二进制的。浮点数没有办法是用二进制进行精确表示,如:
double x=1-9/10.0;
if (x==0.1){
System.out.println("x==0.01");
}
// 没有任何输出,说明x不完全等于0.1
解决办法:
可以利用差值小于某个临界值来判断: Math.abs(x-0.1)<0.000001),如
double x=1-9/10.0;
if (Math.abs(x-0.1)<0.0000001){
System.out.println("x==0.01");
}
// 输出了x=0.01,说明x接近等于0.1
- 对于引用类型,
==
判断是否指向同一对象,equals()
判断内容是否相等 ,如:
1、
equals()
方法是java.lang.Object
类的方法,实际上,Object
类中的equals
方法是用来比较“地址”的,也就是用来判断是否指向同一对象,但是string
类重新定义了equals()
方法2、如果是基本类型比较,那么只能用
==
来比较,不能用equals()
**String类重新定义了equals()方法, 对于String类创建的字符串变量 :**
String s1=new String("abc");
String s2=new String("abc");
if(s1.equals(s2)) {
System.out.println("yes");
}else {
System.out.println("no");
}//结果为yes
String s1=new String("abc");
String s2=new String("abc");
if (s1==s2) {
System.out.println("yes");
}else {
System.out.println("no");
}//结果为no
**由字符串常量创建生成的变量,地址一样,即变量指向同一个对象**
String s3 = "abc", s4 = "abc";
if (s3.equals(s4)) {
System.out.println("yes1");
}
if (s3 == s4) {
System.out.println("yes2");
}
//yes1
//yes2
**对于StringBuffer/StringBuilder类,equals()比较的是地址,即和==一样,如:**
StringBuilder s1=new StringBuilder("abc");
StringBuilder s2=new StringBuilder("abc");
if (s1.equals(s2)){
System.out.println("yes");
}
//没有输出结果,证明s1和s2地址不一样
**如果变量为null,调用equals()会报错,如**
StringBuilder s1=new StringBuilder("abc");
StringBuilder s2=null;
if (s2.equals(s1)){
System.out.println("yes");
}
//解决办法:把非null的对象放前面,即将s2.equals(s1)改成s1.equals(s2)
总结:对非String类来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
switch case语句
- 语法格式:
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
- swich case例子:
public class Test {
public static void main(String args[]){
//char grade = args[0].charAt(0);
char grade = 'C';
switch(grade){
case 'A' :
System.out.println("优秀");
break;
case 'B' :
case 'C' :
System.out.println("良好");
break;
case 'D' :
System.out.println("及格");
break;
case 'F' :
System.out.println("你需要再努力努力");
break;
default :
System.out.println("未知等级");
}
System.out.println("你的等级是 " + grade);
}
}
-
case语句具有穿透性,如果没有 break 语句出现,程序会不断继续执行下一条 case 语句,直到出现 break 语句。所以,任何时候都不要忘记写break
-
switch 语句中的变量类型可以是: byte、short、int 、char或者String字符串类型
-
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量
-
为避免漏写break或者default,可以在eclipse中修改设置:
Preference-->java-->compiler-->errors/Warnings-->”switch case fall-through” warning/ “switch is missing default’ case
-
尽量少用switch语句
Java 循环语句
while循环
while( 布尔表达式 ) {
//循环内容
}
do while循环
do {
//代码语句
}while(布尔表达式);
//至少执行一次
for循环
for(初始化; 布尔表达式; 更新) {
//代码语句
}
- 如:
for(int x = 10; x < 20; x = x+1){}
增强for循环(for each循环)
for(声明语句 : 数组名) {
//代码句子
}
//声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配
- 案例:
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
// James,Larry,Tom,Lacy,
循环注意事项:
- 死循环会导致CPU100%占用
- 不要在循环体内修改计数器
- 计数器变量尽量定义在for循环中——
for(int i=0;…;..){}
- 计数器变量尽量定义在for循环中——
break和continue
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。在 for 循环中,continue 语句使程序立即跳转到更新语句。在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句.
两者通常配合if使用