一、条件语句/分支语句
根据条件的判断,执行不同的代码
1. if ... else语句 语法:
if (boolean表达式){
statement语句
}[ else if(boolean表达式){
statement语句
}else if(boolean表达式){
statement语句
}else{
statement语句
} ]
注意:
(1) 如果if控制语句中只有一条语句,大括号可以省略
例如:if(i == 1)
System.out.println("升旗");
(2) if的后面不要有 ;
if(i==1); //由于有分号,if语句不会控制下面的语句
System.out.println("升旗");
2. switch 语句
switch(变量/值){
case 值1 :
语句1;
break;
case 值2 :
语句2;
break;
...
default :
语句
}
解释: switch中的值依次和case 中的值 做==的比较,如果 相等,执行case中的语句,如果执行到break语句则结束 整个的switch语句;如果switch中的值和 case依次比较都不相等,那么执行default中的语句。 s
witch相当于是if ... else if ... else语句,但只能比较==的情况 效率高于if ... else,一般出现5条以上的if elseif 的判断,尽量用switch 注意事项
1. switch()中是int类型或自动向上转为int的类型,也可以是字符串类型,在JDK7才允许的
2. switch和case只能是==比较
3. case中如果不写break , 如果switch有一个case相等了,后面所有的case都自动相等,case中一定要写 break
二、循环语句
当要执行多条相同或相似的语句时,通过循环语句来执行
1. while循环语句
语法:
while(boolean表达式){
语句
}
解释: 执行到while语句时,boolean表达式结果是true,执行语句,再次执行while,如果是false,结束 while循环
//死循环
while(true){
System.out.println("Hello World");
}
public static void main(String[] args) {
//不是死循环
byte i = 1;
while(i>0){
System.out.println(i);
i++;
}
}
利用循环计算两个区数和的平均值
public static void main(String[] args) {
//计算两个区间的和的平均值
Scanner scanner = new Scanner(System.in);
System.out.println("请输入开始区间:");
int start = scanner.nextInt(); //3
System.out.println("请输入区间的结束:");
int end = scanner.nextInt(); //7
int initStart = start;
if(start<=end){
int sum = 0;
while(start<=end){
sum += start;
start++;
}
System.out.println("区间"+initStart+"~"+end+"平均值是:"+sum/(end-initStart+1));
}else{
System.out.println("区间开始数不能大于结束数");
}
}
2. do...while语句
语法:
do{
语句
}while(boolean表达式);
解释: 先执行一次循环体,因为代码是顺序执行的,循环体是在while的上面,再判断while中是true还是false,如果是true再执行循环体,再判断;如果是false结束循环语句
do...while()无论如何都先执行一次循环体
3. for循环语句
语法:
for(初始化表达式;boolean表达式;递增/递减表达式){
语句
}
解释:三个表达式决定了循环 从几开始、到哪结束、循环几次
for循环语句的执行顺序:
(1)初始化表达式 ,只执行1次
(2)boolean表达式,如果是true,执行循环体的代码;如果是false立刻结束循环
(3)循环体执行完毕后,执行递增/递减表达式,再执行boolean表达式判断
注意事项
(1)for循环死循环的写法
for( ; ; ) {
System.out.println("Hello");
}
(2)循环中可以套循环,也就是可以写二层循环、三层循环....
(3)for循环中的i的作用范围,只在当前的for循环有效
for 循环的嵌套使用
public static void main(String[] args) {
//发现了一个2位数字的密码箱,打印出所有的密码组合的情况
//打印 00 01 02 03 04..09
// 10 11 12 13 14..19
//一层循环 是第一位数字的循环
for(int i = 0;i<=9;i++){
for(int j = 0;j<=9;j++){
System.out.println(i+""+j);
}
}
}
用while能实现的循环用for也能实现,反之一样,通常情况确定了循环次数用for比较好;不确定循环的次数,可以只知道一个结束循环的条件,用while比较好
三、break和continue关键字
循环控制,编程时对循环的执行次数进行控制
1. 可以通过控制for循环中变量i的值,结束/继续循环
2. break和continue关键字控制循环
(1) break : 当在循环中执行到了break语句,循环就会立刻结束。如果break是在一个二层循环中,结束的是当前的层的循环。
for(int i = 1;i<=10 ;i++){
for(int j = 1;j<=10;j++){
if(j==3){
break;
}
System.out.println(i+","+j); //11 12
}
}
为循环设置循环点,在break的后面可以 写一个循环点,结束循环点指定的循环。
a:for(int i = 1;i<=10 ;i++){
b:for(int j = 1;j<=10;j++){
if(j==3){
break a;
}
System.out.println(i+","+j); //11 12
}
}
(2)continue: 当程序执行到continue时,立刻结束本次循环 。如果continue是在一个二层循环中,控制是当前的层的 循环。
continue的后面也可以接循环点。
for(int i = 1;i<=10 ;i++){
for(int j = 1;j<=10;j++){
if(j==3){
continue;
}
System.out.println(i+","+j); //11 12 14 15 ... 21 22 24 ...
}
}
continue的后面也可以接循环点。
a:for(int i = 1;i<=10 ;i++){
b:for(int j = 1;j<=10;j++){
if(j==3){
continue a;
}
System.out.println(i+","+j); //11 12 21 22 31 32
}
}
四、return 关键字
return是返回的意思,在main方法执行了retrun语句,main方法立刻结束。
在return语句的下面,不能在执行其他的代码 循环的应用
1. 循环的优化
(1) 优化循环的次数
(2) 优化循环体代码的速度
//获得当前的时间戳
//时间戳代表了一个时间量,是从1970-01-01 00:00:00 距离当前时间的毫秒值,1秒=1000毫秒
long start = System.currentTimeMillis();
//1. 13389
//2. 160
for(int a = 1;a<=2000;a++){
for(int b = 1;b<=3300;b++){
if(a*15+b*9+(10000-a-b)==30000){
System.out.println("公鸡:"+a+",母鸡:"+b+",小鸡:"+(10000-a-b));
}
}
}
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
获得当前的时间戳
时间戳代表了一个时间量,是从1970-01-01 00:00:00 距离当前时间的毫秒值,1秒=1000毫秒
2. 图形题的写法
都是二层循环,一层循环负责换行,二层循环负责打每一行的内容
示例1:99乘法表
public static void main(String[] args){
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
}
示例2:*打正三角形 5行的正三角
public static void main(String[] args){
for(int i = 1;i<=5;i++){
//打空格
for(int j = 1;j<=5-i;j++){
System.out.print(" ");
}
//打星
for(int j = 1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
}
例3:空正三角形
public static void main(String[] args){
for(int i = 1;i<=5;i++){
//打空格
for(int j = 1;j<=5-i;j++){
System.out.print(" ");
}
//打星
for(int j = 1;j<=2*i-1;j++){
if(i == 1 || i == 5||j==1||j==2*i-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
例4: 输入年份和月份,输出多少天
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
int month = scanner.nextInt();
switch(month){
case 4:
System.out.println(30);
break;
case 6:
System.out.println(30);
break;
case 9:
System.out.println(30);
break;
case 11:
System.out.println(30);
break;
case 2:
if(year%4==0&&year%100!=0 || year%400==0)
System.out.println(29);
else
System.out.println(28);
break;
default:
System.out.println(31);
}
}
例5:2. 判断输入的数是否是素数 思路:用这个数分别和2到这个数前一个数 做取余运算,能除开则不是素数
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
//假定这个数是素数
boolean flag = true;
for(int i = 2;i<number/2;i++){
if(number%i==0){
flag = false;
break;
}
}
if(flag){
System.out.println("是素数");
}else{
System.out.println("不是素数");
}
}