※ 条件语句
有些程序代码只有满足特定条件的情况下才会被执行,Java语言支持两种条件处理语句:if语句和switch语句
1)if … else
if(boolean)
布尔表达式指的是能返回true或者false的运算式子: 1<2 1==1 1!=2
a. if后面的表达式必须是布尔表达式,而不能为数字类型,例如下面的if(x)是非法的。
int x=0;
//编译出错
if(x) {
System.out.println("x不等于0");
} else {
System.out.println("x等于0");
}
int x=0;
//正确
if(x!=0) {
System.out.println("x不等于0");
} else {
System.out.println("x等于0");
}
b. 假如if语句或else语句的程序代码块中包括多条语句,则必须放在大括号{}内。若程序代码块只有一条语句
则可以不用大括号{}。流程控制语句(如if…else语句)可作为一条语句看待。
public void amethod(int x) {
if(x>0)
System.out.println("x不等于0");
else
if(x==0)
System.out.println("等于0");
else if(x<0)
System.out.println("小于0");
}
等价于:
public void amethod(int x) {
if(x>0){
System.out.println("x不等于0");
}
else{
if(x==0){
System.out.println("等于0");
}
else if(x<0){
System.out.println("小于0");
}
}
}
练习:1) 写一个方法实现分时问侯, 如是8点至12点,返回"上午好", 12点至14点,返回"中午好",
14点至18点,返回"下午好", 其它时间返回"晚上好"
public String sayHello(int hour) {
String msg;
if(hour >=8 && hour < 12)
msg = "上午好";
else if(hour>=12 && hour <14)
msg = "中午好";
else if(hour>=14 && hour <18)
msg = "下午好";
else
msg = "晚上好";
return msg;
}
2) 写一个方法判断某一年是否为闰年。
标准:1) 能被4整除,但不能被100整除;
或
2) 能被400整除;
/**实现方式一*/
public boolean isLeapYear(int year) {
if((year%4==0 && year%100!=0) || (year%400==0))
return true;
else
return false;
}
/**实现方式二*/
public boolean isLeapYear(int year) {
boolean leap;
if(year%4!=0)
leap=false;
else if(year%100!=0)
leap=true;
else if(year%400!=0)
leap=false;
else
leap=true;
return leap;
}
/**实现方式三*/
public boolean isLeapYear(int year) {
boolean leap;
if(year%4==0) {
if(year%100==0) {
if(year%400==0)
leap=true;
else
leap=false;
} else
leap=false;
} else
leap=false;
return leap;
}
2)switch
语法:switch(expr) {
case value1:
statements;
break;
…
case valueN
statments;
break;
default:
statements;
//break;
}
参数可以是byte char short int jdk1.7后增加String
a. expr的类型必须是byte, short, char或者int;
b. valuesN类型必须是byte, short, char或者int, 该值必须是常量。各个case子句的valueN值不同;
c. 当switch表达式的值不与任何case子句匹配时,程序执行default子句,假如没有default子句,则程序直接
退出switch语句。default子句可以位于switch语句中的任何位置。
d. 如果switch表达式与某个case表达式匹配,或者与default情况匹配,就从这个case子句或default子句开始执行。
假如遇到break,就退出整个switch语句,否则依次执行switch语句中后续的case子句,不再检查case表达式的值。
e. switch语句的功能也可以用if…else语句来实现。但switch语句会使程序更简洁,可读性更强。而if…else功能更为强大。
练习:1) 写一个方法,能实现数值星期和中文星期的转换,如0会转换为星期天, 1会转换为星期一。
public String switchWeekLabel(int week) {
String result;
switch(week) {
//case 匹配值:代码
case 0:
result = "星期天";
//匹配上之后不再执行后面的内容直接跳出switch语句
break;
case 1:
result = "星期一";
break;
case 2:
result = "星期二";
break;
case 3:
result = "星期三";
break;
case 4:
result = "星期四";
break;
case 5:
result = "星期五";
break;
case 6:
result = "星期六";
break;
//如果前面都没有匹配到,可以设置默认值default:
default:
result = "您输入的星期数值为"+week+",不能进行转换";
}
return result;
}
2) 写一个方法,返回指定月份最后一天到底是多少号?
public int getLastDay(int year, int month) {
int day=30;
//1
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day=31;
break;
case 2:
day = getLeapYear(year)? 29:28;
}
return day;
}
※ 循环语句
循环语句的作用是反复执行一段代码,直到不满足循环条件为止。循环语句一般应包括如下四部分内容:
. 初始化部分:用来设置循环的一些初始条件,比如循环控制变量的初始值;
. 循环条件: 这是一个布尔表达式,每一次循环都要对该表达式求值,以判断到底继续循环还是终止循环。
. 循环体: 这是循环操作的主体内容,可以是一条语句,也可以是多条语句;
. 迭代部分: 用来改变循环控制变量的值,从而改变循环条件表达式的值;
Java语言提供三种循环语句:for语句、while语句和do…while语句。for语句、while语句在执行循环体之前
测试循环条件,而do…while语句在执行循环体之后测试循环条件。因此for语句、while语句有可能连一次循
环都未执行,而do…while至少执行一次循环体。
1)for循环
语法:for(初始化部分;循环条件;迭代部分) {
循环体
}
在执行for语句时,先执行初始化部分,这部分只会被执行一次;
接下来计算作为循环条件的布尔表达式,如果为true,就执行循环体;
接着执行迭代部分,然后再计算作为循环条件的布尔表达式,如此反复;
练习:1) 写一方法,完成计算从1加到100的和;
public int sum() {
int result = 0;
for(int i=1;i<=100;i++) {
result = result + i;
}
return result;
}
2) 在练习一基础上,完成计算从1加到指定数值的和;
public int sum(int n) {
int result = 0;
for(int i=1;i<=n;i++) {
result = result + i;
}
return result;
}
2) while循环
语法:[初始化部分]
//whlie(boolean){}
while(循环条件) {
循环体,包括迭代部分
}
当循环条件为true时,就重复执行循环,否则终止循环;
练习:1) 用while循环完成计算从1加到指定数值的和;
public int sum(int n) {
int result = 0,i=1;
while(i<=n) {
result = result + i;
i=i+1;//i++;
}
return result;
}
3)do … while循环
和while非常类似,只不过先执行循环体,然后再判断循环条件。
do{
}while(boolean);
语法:[初始化部分]
do {
循环体,包括迭代部分
} while(循环条件);
练习:1) 用do...while循环完成计算从1加到指定数值的和;
public int sum(int n) {
int result = 0,i=1;
do {
result = result + i;
i=i+1;
} while(i<=n)
return result;
}
以上三种循环,功能类同。作为一种编程惯例,for语句一般用在循环次数事先可确定的情况下,则
while和do…while语句则用在循环次数事先不可确定的情况下。
//break终止本次循环进入下一个循环,从continue开始到结束循环结束的花括号的代码
练习:往控制台上输出以下内容:
*
**
***
****
*****
******
*******
public void myPrint(int n){
for(int i=0;i<n;i++){
for(int j=0;j<i+1;j++){
System.out.print("*");
}
System.out.println();
}
}
※ 循环语句中流程跳转
1)break: 终止当前或指定循环;
public int sum(int n) {
int result = 0,i=1;
while(i<=n) {
result = result + i;
i=i+1;
if(i>10)
break;
}
return result;
}
实现1加到n;但是i大于10的话就直接退出循环
2)continue: 跳过本次循环,执行下一次循环,或执行标号标识的循环体。
public int sum(int n) {
int result = 0;
for(int i=1;i<=100;i++) {
if(i%2==0)
continue;
result = result + i;
}
return result;
}
实现指定范围内奇数的和;
3)label: 标号用来标识程序中的语句,标号的名字可以是任意的合法标识符。
观察三个效果有什么不同:
public void lableTest1(){
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
System.out.print(j);
}
System.out.println();
}
}
public void lableTest2(){
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
System.out.print(j);
if(j==3){
break;
}
}
System.out.println();
}
}
public void lableTest3(){
f1:for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
System.out.print(j);
if(j==3){
break f1;
}
}
System.out.println();
}
}