1.条件语句

1.1 if 语句

  if条件语句主要用于告知程序当某一个条件成立时,须执行满足条件的相关语句。
  格式为:if(表达式){执行语句块},表达式的值必须是布尔型。
  例:

int m = 0;
int n = m++;
if(m>=0){
	n++;
	System.out.println(m);
}
System.out.println(n);

结果为1,1
  因为在Java块中,默认程序是顺序结构,编写的程序语言按照顺序依次被执行,所以m++语句中,n值为1.

1.2 if…else 语句

  if…else语句的作用,是针对某种条件有选择地作出处理。其中,if语句可以独立使用,else语句必须跟在if语句后面,不能单独使用。
  结构为:
if(表达式){
执行语句块1
}else{
执行语句块2
}
  如果布尔表达式的值为true,则执行语句块1,如果为false,则执行语句块2.
  如果有多个条件,可以用逻辑运算连接成为表达式。
  例1:判断变量i能否同时被2和3整除:

(i%2==0)&&(i%3==0)

  例2:判断变量a大于100或者b小于50:

(a>100)||(b<50)

  例3:

int x=2;
if(x<2){
	x++;
}else{
	x--;
}
System.out.println("x="+x);

1.3 if…else if 语句

  如果满足某一个条件,就采用与该条件对应的处理方式;如果满足另一个条件,则采用与另一个条件对应的处理方法。
结构为:
if(表达式){
执行语句块1
}else if(表达式2){
执行语句块2
}
...
  例1:给定一个成绩,并根据成绩输出优(>=90),良(90>b>=80),好(80>b>=70),中(70>b>=60),差(<60).
Ans:

package classroom.chap3;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		int b;
		System.out.print("请输入一个0-100的成绩:");
		Scanner cc = new Scanner(System.in);
		b=cc.nextInt();
		if(b>=90){
			System.out.print(b+"为优");
		}else if(b>=80){
			System.out.print(b+"为良");
		}else if(b>=70){
			System.out.print(b+"为好");
		}else if(b>=60){
			System.out.print(b+"为中");
		}else{
			System.out.print(b+"为差");
		}
		cc.close();
	}

1.4 switch 语句

  switch结构为:
switch(表达式){
case 取值1:语句块1;break;
case 取值3:语句块2;break;

case 取值n:语句块n;break;
default:语句块n+1;break;
}
  switch语句中当满足某个case条件后,case语句会顺序执行,再使用break跳出循环;所有条件都不满足时会执行default分支,所有default(必须存在)一般放在后面。
  注意:case的判断值不能相同;switch条件表达式的运算结果只能是int,char,short,byte,string几种类型。表达式的值接受String类型只在JDK7及以后版本有效。switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。
  例1:给定一个成绩,并根据成绩输出优(>=90),良(90>b>=80),好(80>b>=70),中(70>b>=60),差(<60).使用switch方法。
Ans:

package classroom.chap3;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		int b;
		System.out.print("请输入一个0-100的成绩:");
		Scanner cc = new Scanner(System.in);
		b=cc.nextInt();
		int c=b/10;
		switch (c) {
		case 10:System.out.print(b+"为优");break;
		case 9://case9和case10功能相同,可以共用一个分支
		case 8:System.out.print(b+"为良");break;
		case 7:System.out.print(b+"为好");break;
		case 6:System.out.print(b+"为中");break;
		default:System.out.print(b+"为差");break;
		}
		cc.close();
	}

2.循环语句

  循环的基本结构:循环条件初始化,循环体,循环条件修改,循环条件判定。包括单层循环和多层循环。
  循环的嵌套是循环可以进行多层嵌套,也可以循环内嵌套多个循环。

2.1 While语句

  while语法结构为:
while(条件表达式){
执行语句块
}
  条件表达式符合条件,循环继续执行;否则,循环退出。其中,执行语句块是循环中被重复执行的部分。
  例1:计算:0+1+2+…+100
Ans:

int i=0,sum=0;
while(i<=100){//;主要注意防止出现死循环
	sum+=i++;//优化代码
	//i++;
}
System.out.println("0+1+..+100="+sum);

  例2:计算从1到100的所有奇数相加(提示利用while语句)
Ans:

int i=0,t=0;
//因为i=i+2,所以i要小于<98,如果i<100,会多加101的值;其中小于98不包括98
while(i<98){
	i+=2;
	t+=i;
}
System.out.println(t);

2.2 do…while语句

  do…while语法结构为:
do{
执行语句块
}while(条件表达式);
  注意:do…while的表达式后要有分号。
  例:计算:0+1+2+…+100

int i=0,sum=0;
do{
	sum+=i++;
}while(i<=100);
System.out.print(sum);

  do…while和while循环的区别:
a. do while循环必定执行一次循环体;while循环可能不执行.
b. do while语句必须以分号结尾,while循环可以没有分号.

2.3 for语句

  for语法结构为:
for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句块
}
  例1:计算:0+1+2+…+100
Ans:

int sum=0,i=0;
//把循环初始化代码写在循环里面,局部变量只在循环内部有效
//理解局部变量的作用域(范围)
/*for(int i=0;i<=100;i++){
	sum+=i;
}*/
//把循环初始化代码写在循环外面,i作用范围大于放在循环内部的i
for(;i<=100;i++){
	sum+=i;
}
System.out.println("1+3+..+100="+sum);

  例2:随机产生一个10以内的正整数,用户循环输入三个整数,如果用户
输入的整数包含随机数,输出“猜对了”;反之,输出“没猜到”。例如:
随机数为4,用户输入数为:2,3,4。输出:猜对了;随机数为4,用户输入数为:1,2,3。输出:没猜到。
Ans:

Random cs = new Random();
int i=cs.nextInt(10);
System.out.print(i);
int a,b,c;
System.out.print("请输入三个0-9的数字:");
Scanner cc = new Scanner(System.in);
a=cc.nextInt();
b=cc.nextInt();
c=cc.nextInt();
if(a==i || b==i || c==i){
	System.out.println("猜对了");
}
else{
	System.out.println("没猜到");
}

  while和for循环的异同:
a. 都是循环结构,都需要编写和执行循环的4个基本结构:循环初始化,循环体,循环条件修改,循环条件判定;
b. do while 循环一定会执行一次循环体,while循环和for循环可能不执行循环体;
c. 一般的while循环或do while循环用于循环次数不确定的情况,for循环常用于循环次数确定的情况。

2.4 foreach语句

  for each循环遍历,常用于数值或集合的遍历。
例:

for(String d:score3){
	System.out.print(d+"\t");
}

3.流程控制进阶

  在Java中,流程控制语句可以嵌套使用:嵌套循环语句,嵌套条件语句,循环、条件语句嵌套使用。
靠自身控制无法终止的程序称为“死循环”,可以通过break,continue和return函数提前中断循环。
 break
  break语句用于终止某个语句块的执行,用在循环语句体中,强行退出循环。主要情况有:
a. 在switch分支中跳出分支结构
b. 在循环结构中跳出当前循环
c. 在循环嵌套中跳出label指定的循环,但需要在循环语句前面指定label标签
  例:

outer:for(int i=0;i<10;i++){
			//在循环体内部可以编写循环,这是循环嵌套
			middle:for(int k=0;k<10;k++){
				System.out.print(i+","+k);
				while(true){
					System.out.println("while 嵌套循环");
					//break;//break默认会跳出当前循环
					break middle;//在循环嵌套中,break可以跳出label标签指定的循环层次中,在jdk1.7版本后支持,与c语言的goto类似。
				}
			}
}

 continue
  continue语句用在循环语句体中,用于终止循环过程,跳出循环体中continue语句下未执行的循环体,开始下一次循环过程。也可以在循环嵌套中,终止本次循环体的执行跳转到label指定的循环中,继续执行。continue语句:只能出现在循环语句while、do…while、for中。
  例:

int flag = 1;
	outer:while(flag++<10){
		for(int i=flag;i>0;i--){
			System.out.print("*");
			continue outer;//continue可以在循环嵌套中,用于终止当前循环,跳转到外部循环中
		}
		System.out.println();
	}

 return
  可以在方法内部,终止本方法的执行。也可以在方法内部返回数据值给方法的调用者。
  例:

int l=0;
		do{
			if(l++%2==0){
				System.out.println(l+"do while循环嵌套,奇数");
				continue;//continue可以在循环内部终止本次循环,执行下一次循环;结束循环体执行,跳转循环条件修改或循环条件判定的语句中
			}else{
				System.out.println(l+"do while循环嵌套,偶数");
			}
			if(l==10){
				System.out.print(l+"\t");
				return;//return可以在方法内部终止方法的执行
			}
		}while(true);

4 练习

1.产生一个12以内的随机月份,和一个30以内的随机天数,输出该日是本年的第多少天(不考虑闰年)?【选做题】
Ans:

package classroom.chap3;
public class RandomDay {
public static void main(String[] args) {
	//每月的天数
	//0只是占位
	int[] mons = { 0, 31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30 };	
	//随机月份		-取模%12 值为0~11,所以要+1
	//Math.random()函数返回一个浮点,为随机数在范围[0,1)
	int rmon = (int) (Math.random() * 100 % 12 + 1);
	//随机天数
	int rday = (int) (Math.random() * 100 % 30 + 1);
	//打印随机几月和几号
	System.out.println(rmon + ":" + rday);
	int day = 0;
	//如果为一月就直接输出天数
	if (rmon == 1) {
		System.out.println(rday);
	} else {
		//循环加前n-1月的天数
		for (int i = rmon; i > 1; i--) {
			day = day + mons[i - 1];
			}
			//最后加上本月的天数
			day += rday;
			System.out.println(day);
		}
}
}

2.企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于或等于20万元时,高于10万元的部分,可提成7.5%;高于20万,低于或等于40万时,高于20万元的部分,可提成5%;高于40万,低于或等于60万时,高于40万元的部分,可提成3%;高于60万,低于或等于100万时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,输入一个整数变量为当月利润,求应发放奖金总数?(知识点:条件语句) [必做题]。
Ans:

double pro;
System.out.print("请输入一个数值(单位为万元):");
Scanner cs = new Scanner(System.in);
pro=cs.nextDouble();
double bonus=0;
if(pro>100){
bonus=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(pro-100)*0.01;
}else if(pro>60){
	   bonus=10*0.1+10*0.075+20*0.05+20*0.03+(pro-60)*0.015;
}else if(pro>40){
	bonus=10*0.1+10*0.075+20*0.0+(pro-40)*0.03;
}else if(pro>20){
	bonus=10*0.1+(pro-20)*0.05;
}else if(pro>10){
	bonus=10*0.1+(pro-10)*0.075;
}else{
	bonus=pro*0.1;
}
System.out.print(pro+"的奖金为"+bonus);
cs.close();

3.输入一个成绩a,使用switch结构求出a的等级。A:90-100,B:80-89,C:70-79,D:60-69,E:0~59(知识点:条件语句switch)[必做题]
Ans:

int result;
System.out.print("请输入一个0-100数值:");
Scanner cs = new Scanner(System.in);
result=cs.nextInt();
int n=result/10;
switch(n){
case 10:System.out.print(result+"的等级为A");break;
case 9:
case 8:System.out.print(result+"的等级为B");break;
case 7:System.out.print(result+"的等级为C");break;
case 6:System.out.print(result+"的等级为D");break;
default:System.out.print(result+"的等级为E");break;
}

4.判断一个随机整数是否能被5和6同时整除(打印能被5和6整除),或只能被5整除(打印能被5整除),或只能被6整除,(打印能被6整除),不能被5或6整除,(打印不能被5或6整除)(知识点:条件语句) [必做题]
Ans:

int n;
System.out.print("请输入一个数值:");
Scanner cs = new Scanner(System.in);
n=cs.nextInt();
if(n%5==0 && n%6==0){
	System.out.print(n+"能被5和6整除");
}else if(n%5==0){
	System.out.print(n+"能被5整除");
}else if(n%6==0){
	System.out.print(n+"能被6整除");
}else{
	System.out.print(n+"不能被5和6整除");
}

5.有一个不多于5位的正整数,求它是几位数,分别打印出每一位数字。(知识点:条件语句) [必做题]
M1:

int n,i=0;
Random c = new Random();
n=c.nextInt(99999);
//System.out.println(n);
while(n>0){
	System.out.print(n%10+" ");
	n/=10;
	i++;
}
System.out.println("位数为"+i);

M2:-------------------------------------------

Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String str = String.valueOf(num);
while(true){
	if(str.length()>5){
		System.out.println("请重新输入不多于5位数的正整数:");
		num = sc.nextInt();
		str = String.valueOf(num);
	}else{
		System.out.println(num+"的位数为"+str.length()+"位");
		System.out.println("它的各位数分别为:");
		for(int i=0;i<str.length();i++){
			System.out.println(str.charAt(i)+" ");
		}
		break;
	}
}