1 switch 多分支选择结构
/*
1、选择结构中的: 多分支选择结构语句 (switch语句)
1) 格式:
switch( 表达式 ) {
case 值1 : 语句系列1; [ break; ]
case 值2 : 语句系列2; [ break; ]
case 值3 : 语句系列3; [ break; ]
......
case 值n : 语句系列n; [ break; ]
[default : 语句系列m; ]
}
2) 规则:
先计算表达式的值,再找到与表达式的值对应的case,做它后面所有语句系列,直到遇到 break; 语句时结束整个switch。
当遇不到break; 时,则继续做下面的所有语句系列。
若找不到与表达式的值对应的case,且 default 项存在时,则做它的语句系列m,之后结束整个switch语句。
3) 注意事项:
a) 表达式的值必须是 byte 或 short 或 char 或 int 型数据。
b) case 后的值1、值2、值3、...、值n均必须是 byte或short或char或int型常量。
即: case后必须是常量,不可是变量。
c) 当连续的多个case,其后的语句系列相同时,则前n-1个语句系列可以省略。(case穿透)
*/
public class SwitchTest {
public static void main( String[] args ) {
//产生一个随机的字母
char ch = 'o'; //(char)( 26 * Math.random() + 'a' );
String str = "" ; //准备一个str变量来存放结果
switch( ch ) {
case 'a' :
case 'e' :
case 'i' :
case 'o' :
case 'u' : str = "元音" ; break;
case 'y' :
case 'w' : str = "半元音" ; break;
default : str = "辅音" ;
}
System.out.println("\n产生的随机字母是: \'" + ch + "\'" + ",它属于: " + str ) ;
}
}
2 for循环
/*
1、for循环
for( 表达式1 ; 条件; 表达式3 ){
循环体;
} 规则: 先执行表达式1,再去判断条件;条件成立执行循环;
然后,跳到表达式3处执行;之后再去判断条件;若条件仍然成立,
则继续执行循环体;依次下去,直到条件不成立而结束整个for循环。
1) 在java语言中,for循环头部的三个表达式可以省略。
结论:
a) 若省略表达式1,则必须在for循环前声明它。
b) 若省略表达式3,则往往将它置于循环体中。
c) 若省略表达式2(条件),则往往需要在循环体中用if和break配合实现。
2) 在java语言中,for循环头部的三个表达式可以扩展。
结论:
a) 表达式1扩展往往通过逗号来实现。
b) 表达式3扩展也往往通过逗号来实现。
c) 表达式2(条件)扩展往往通过逻辑运算符来实现。 */
public class ForTest {
public static void main(String[] args){
// 编写一个程序,输出九九乘法表;
for(int i = 1 ; i <= 9 ; i++ ){ //控制行输出;
for(int j = 1; j <= i; j++ ){
if(i*j <10 ){
System.out.print( j + "*" + i + "= " + (i*j) + " " );
}else{
System.out.print( j + "*" + i + "=" + (i*j) + " " );
}
}
System.out.println();
}
}
3 嵌套循环
/*
1、嵌套
为什么需要循环,为什么需要嵌套循环?
将一个语句或多个语句需要反复执行时,则使用循环其效率会更高。
中心放射法
2、顺向去分析、理解这个嵌套循环(也就是嵌套循环的执行顺序)。
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
5
5 5
5 5 5
5 5 5 5
5 5 5 5 5
5
5 5
5 5 5
5 5 5 5
5 5 5 5 5
*/
public class QuTest4 {
public static void main( String[] args ) {
char ch = 'a';
for( int r = 1; r <= 5; r++ ){
for(int k = 1; k <= 5 - r; k++ ){ //总行数 - 第几行
System.out.print( " " );
}
for( int n = 1; n <= r ; n++ ){
System.out.print( ch + " ");
}
System.out.println(); //换行
}
//System.out.println("" + "AA");
}
}
4 递归
/*
1、什么是递归?
定义: 在一个方法的方法体中出现了调用本身的现象。
理解: 递是指传递下去,直到末尾的结果(递归的出口);
归是指从末尾的结果处一层一层地返回,直到入口处而结束。
2、案例: 求 1 + 2 + 3 + ... + 100 = ? 用递归实现
分析:
业务是从1 至 100的累加,因此,假设:
f( 100 ) == 1 + 2 + 3 + ... + (99) + 100
f( 99 ) == 1 + 2 + 3 + ... + (98) + 99
所以,可推出>>>>> f(100) == 100 + f( 99 );
又有, f( 1 ) == 1;
若再次假设 n == 100 ,则以上式子变为: f( n ) == n + f(n-1);
思考:
求 5! ,用递归实现其结果。
求 1! + 2! + 3! + ... + 10! = ? 用递归实现,不能出现循环语句。
5! 阶乘( 连乘 1 * 2 * 3 * 4 * 5 )
*/
public class RecallMethodTest {
public static void main( String[] args ) {
int sum = 0;
/*
for( int i = 1; i <= 100; i++ ){
sum += i;
}*/
int n = 100;
sum = f( n );
System.out.println("1 + 2 + 3 + ... + " + n + " = " + sum );
}
//编写一个 f(n)方法, 用来求1 + 2 + 3 + ... + n 的值。
public static int f( int n ){
if( n == 1 ) {
return 1; //末端,它是递归出口。
}else{
return n + f( n - 1 ); //在此出现了调用方法本身的现象。
}
}
}