1.if语句三种形式:(if在做判断题)
{ 执行语句 } //作用域仅限大括号内,省略大括号时,仅限if后的一句
(2)if(条件表达式)
{执行语句1}
else
{执行语句2}
(3)if(条件表达式1)
{执行语句1}
else if(条件表达式2)
{执行语句2}
……
else
{语句3}
2.switch语句 :(switch在做选择题)
(1) switch(表达式)
{
case(常量表达式1):语句1;break;
case(常量表达式2):语句2;break;
case(常量表达式3):语句3;break;
default:语句4;break;
}
(2) switch(x)
{
case 3:
case 4:
case 5:System.out.println(x+"月是春季");break;
case 6:
case 7:
case 8:System.out.println(x+"月是夏季");break;
case 9:
case 10:
case 11:System.out.println(x+"月是秋季");break;
case 12:
case 1:
case 2:System.out.println(x+"月是冬季");break;
default:System.out.println("输入的月份不正确");break;
}
注意事项:
java中的switch表达式仅限byte,short,int,char,随着jdk版本的升级,支持的数据类型也在增加,而C语言中的switch表达式可以是ANSI标准允许的任何类型。(jdk5.0支持枚举类型,jdk7.0支持字符串)
case后的常量只是起到标号的作用,switch执行时寻找与表达式其匹配的入口标号,程序一直执行下去,直到遇到第一个break后跳出switch语句,否则一直执行所有case。
default总是在case执行完后如果没有找到入口标号才执行,而与其位置无关,如果case执行完后都没有找到入口标号,开始执行default,如果default是在多个case中间,则执行完case后,按顺序执行一遍defaul后面的各种语句,包括case或者除case语句以外的语句,直到遇到case中的break,如果没有break,则default后全部执行一遍后到switch结尾结束switch。所以default没有写在最后时break不能省略。
3.if...else与三元运算符的区别:
三元运算符在一定程度上可以简化if……else代码,但因为它是运算符,所以必须有运算结果,不能执行输出语句,例如:b=(x>5)?System.out.println("yes"):5;【如果x>5,需要把System.out.println("yes")的结果付给变量b,但其只是打印输出内容,没有结果赋值给b,所以不可行】
总结:1.外循环控制行数,内循环控制每一行的列数
2.for循环中的++和--可以互换,主要控制循环的次数,变量本身的定义没有太大意义。
如for(int x=0;x<3;x++)--->for(int x=3;x>0;x--)
10.打印朝上的三角形: *
**
***
****
*****
分析:第n行有n个*,二维图形,考虑for循环嵌套。与输出矩形不同,每一列都在变化,而矩形每一行列数是固
既然z的变化与x同步,就可以令z=x,少设一个变量
11.打印朝下的三角形: *****
****
***
**
*
分析:该题图形与上图方向相反,考虑初始化变量设置问题
同理,既然z的变化与x同步,可以令z=x
总结:尖朝上,改变循环条件
尖朝下,改变初始化值
12.打印: 1
12
123
1234
12345
分析:多行多列应该用嵌套for循环,与尖朝上的三角形的区别是,每行输出的数都是从1开始自增,应该在内循环的输出上做文章。(这里与上面的区别出来了,循环增量参与输出了,上面图形循环增量仅控制*输出的次数。)
13.打印九九乘法表: 1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
……
分析:尖朝上的三角形,嵌套for循环,改变循环条件,每一行的被乘数提取出来的图形就是上一题中图形
现在每行又多了一个乘数,但该乘数是固定的,等于行数。
3.if...else与三元运算符的区别:
三元运算符在一定程度上可以简化if……else代码,但因为它是运算符,所以必须有运算结果,不能执行输出语句,例如:b=(x>5)?System.out.println("yes"):5;【如果x>5,需要把System.out.println("yes")的结果付给变量b,但其只是打印输出内容,没有结果赋值给b,所以不可行】
4.if与switch的用法:
当结果较少且较为具体时,推荐switch,结果会全部加载到内存,效率稍高,而if是顺序执行;
当结果是区间或布尔类型时,用if。
5.while语句与for语句:(循环结构)
while和for可以互换,区别:for循环中当循环增量i在for中定义时,循环增量的作用于仅限于大括号中,即跳出循环后i的内存释放,对于循环增量在循环后不需要的情况下,这种方法会节省一点内存;当然若循环增量如果在for之前声明,在for中初始化,这和while效果一样,并且用while时,只能先在while前定义循环变量,在while中做条件表达式判断。
当结果较少且较为具体时,推荐switch,结果会全部加载到内存,效率稍高,而if是顺序执行;
当结果是区间或布尔类型时,用if。
5.while语句与for语句:(循环结构)
while和for可以互换,区别:for循环中当循环增量i在for中定义时,循环增量的作用于仅限于大括号中,即跳出循环后i的内存释放,对于循环增量在循环后不需要的情况下,这种方法会节省一点内存;当然若循环增量如果在for之前声明,在for中初始化,这和while效果一样,并且用while时,只能先在while前定义循环变量,在while中做条件表达式判断。
while(){ }的格式 do{ }...while()的格式
初始化表达式; 初始化表达式;
while(条件表达式){ do
执行语句; { 执行语句;}
} while(条件表达式);
不管条件满足与否,do{}...while()至少执行一次
6.for循环的特殊写法: (效果就等同于while)
int i=0; int i=0;
for(;i<5;){ while(i<5){
i++ i++;
} }
7.累加思想、计数器思想(满足某个条件的数的个数)
如求1到100的和、1到100内能被7整除的整数的个数?
int sum=0; int counter;
for(int i=1;i<=100;i++){ for(int i=1;i<=100;i++){
sum+=i; if(i%7==0){
} counter++;
}
6.for循环的特殊写法: (效果就等同于while)
int i=0; int i=0;
for(;i<5;){ while(i<5){
i++ i++;
} }
7.累加思想、计数器思想(满足某个条件的数的个数)
如求1到100的和、1到100内能被7整除的整数的个数?
int sum=0; int counter;
for(int i=1;i<=100;i++){ for(int i=1;i<=100;i++){
sum+=i; if(i%7==0){
} counter++;
}
}
8.其他流程控制语句:break,continue
break默认跳出当前循环,如果是嵌套循环,想从内循环直接跳出外循环,可以给外循环加上标号,
8.其他流程控制语句:break,continue
break默认跳出当前循环,如果是嵌套循环,想从内循环直接跳出外循环,可以给外循环加上标号,
如w:for(int x=1;x<=5;x++) 内循环写break w;
continue默认结束本次循环,进入下一循环,当然在嵌套for循环下,类似break用标号可以结束本次循环直接进行下一个外部循环,continue w;。
注意:
(1)break用于选择结构或循环结构(switch 或loop)loop结构指for循环或while循环;continue用于循环结构
(2)break或continue单独存在时,即没有任何判断语句控制,下面不能有任何语句,因为执行不到,这时编译就不能通过
(3)break和continue不能在作用域外,这时会报错。
如果是break 报错 :程序某一行在switch或loop处中断
如果是continue 报错 :程序某一行在loop处中断
continue默认结束本次循环,进入下一循环,当然在嵌套for循环下,类似break用标号可以结束本次循环直接进行下一个外部循环,continue w;。
注意:
(1)break用于选择结构或循环结构(switch 或loop)loop结构指for循环或while循环;continue用于循环结构
(2)break或continue单独存在时,即没有任何判断语句控制,下面不能有任何语句,因为执行不到,这时编译就不能通过
(3)break和continue不能在作用域外,这时会报错。
如果是break 报错 :程序某一行在switch或loop处中断
如果是continue 报错 :程序某一行在loop处中断
break和continue还可以加标号:
w:for (int x=0;x<10 ;x++ )
{
n:for (int y=0;y<=x ;y++ )
{
System.out.print("$");
break w;
}
System.out.println();
}
9.打印矩形 : *****
*****
*****
*****
*****
class ForDemo1{
public static void main (String args[]){
for(int x=0;x<3;x++){ //控制行数
for (int y=0;y<5 ;y++ ){ //控制每一行的列数
System.out.print("*");
}
System.out.println(); //仅用于每行末尾换行
}
}
}
总结:1.外循环控制行数,内循环控制每一行的列数
2.for循环中的++和--可以互换,主要控制循环的次数,变量本身的定义没有太大意义。
如for(int x=0;x<3;x++)--->for(int x=3;x>0;x--)
10.打印朝上的三角形: *
**
***
****
*****
分析:第n行有n个*,二维图形,考虑for循环嵌套。与输出矩形不同,每一列都在变化,而矩形每一行列数是固
的,考虑用一个变量保存列数。
class ForDemo2 {
public static void main(String[] args) {
int z=0;
for (int x=0;x<5;x++ ) { //输出5行
for (int y=0;y<=z;y++ ){ //第1行输出1列,1个*,行数x增加1列数z就增加1
System.out.print("*");
}
z++;
System.out.println();
}
}
}
既然z的变化与x同步,就可以令z=x,少设一个变量
class ForDemo2 {
public static void main(String[] args) {
for (int x=0;x<5;x++ ) {
for (int y=0;y<=x;y++ ){
System.out.print("*");
}
System.out.println();
}
}
}
11.打印朝下的三角形: *****
****
***
**
*
分析:该题图形与上图方向相反,考虑初始化变量设置问题
class ForDemo3 {
public static void main(String[] args) {
int z=1;
for (int x=1;x<=5 ;x++ ){
for (int y=z;y<=5 ;y++ ){ //第1行内循环循环5次,打印5个*,换行后,
System.out.print("*");//即行数加1,每一行列数减1
}
System.out.print("\n");
z--;
}
}
}
同理,既然z的变化与x同步,可以令z=x
class ForDemo3 {
public static void main(String[] args) {
for (int x=1;x<=5 ;x++ ){
for (int y=x;y<=5 ;y++ ){ //注意,乍一看容易犯晕,感觉列数在递减,应该y--
System.out.print("*"); //其实,循环要整体来看,只要是按同一效果输出多次,如输出多个*
} //就用循环,循环次数取决于初始化值每次变化后与条件之间的差距,效 System.out.print("\n"); //果等同于:for(int y=5;y>=x;y--)
}
}
}
总结:尖朝上,改变循环条件
尖朝下,改变初始化值
12.打印: 1
12
123
1234
12345
分析:多行多列应该用嵌套for循环,与尖朝上的三角形的区别是,每行输出的数都是从1开始自增,应该在内循环的输出上做文章。(这里与上面的区别出来了,循环增量参与输出了,上面图形循环增量仅控制*输出的次数。)
class ForDemo4{
public static void main (String args[]){
for (int x=1;x<=5 ;x++ ){
for (int y=1;y<=x ;y++ ){ //这里因为输出的是变量y,y就不只起到循环变量的作用,还参与输出
System.out.print(y); // 每一行从1开始自增,所以y的初始化值是1,y的变化受x的
} //影响,所以x也不能随便定义
System.out.println();
}
}
}
13.打印九九乘法表: 1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
……
分析:尖朝上的三角形,嵌套for循环,改变循环条件,每一行的被乘数提取出来的图形就是上一题中图形
现在每行又多了一个乘数,但该乘数是固定的,等于行数。
class ForDemo5{
public static void main (String args[]){
for (int x=1;x<=9 ;x++ ){
for (int y=1;y<=x ;y++ ){
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}