Java基础-循环(2)和方法
循环的嵌套:
循环体本身又是另一个循环的循环,就是循环的嵌套.
外面的循环称为外层循环,里面的循环称为内层循环.
//外层循环 for( ){ //内层循环 for( ){ } }
外层循环的每次执行,内层循环都循环多次!
循环嵌套的几种格式:
for-for for-while while-while while-for
/* 循环嵌套打印正三角形 * ** *** **** 思考:重复的动作是? 打印字符!!! 规律:随着行数的增加,每行打印的字符也增加.(每行字符数和行数相同) 练习:把行数做成用键盘录入数据 */ import java.util.Scanner; public class TrangleDemo{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.print("请输入要打印多少行: "); int k = s.nextInt(); for(int i = 1;i<=k;i++){ for(int j = 1;j<=i;j++){ System.out.print("*"); } System.out.println(); } } }
/* 循环嵌套打印倒三角形(练习) **** *** ** * 分析: 重复的操作是打印字符 每行打印的字符数逐渐减少 也就是内层循环的边界值在不断的减少. 练习:打印的行数从键盘录入? */ import java.util.Scanner; public class TrangleDemo2{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.print("请输入要打印的行数: "); int k = s.nextInt(); for(int i = 0;i<=k;i++){ for(int j = 1;j<=k-i;j++){ System.out.print("@"); } System.out.println(); } } }
案列:
打印99乘法表
外层循环控制行数
内层循环控制每行的表达式的个数
特点:每行表达式的个数和行数相等
/* 打印99乘法表 */ /* public class ChengFaBiao{ public static void main(String[] args){ for(int i = 1;i<=9;i++){ for(int j = 1;j<=i;j++){ System.out.print(j + "x" + i + "=" + j*i + "\t"); } System.out.println(); } } } */ /* 练习:99乘法表各个表达式之间用','分隔,每行最后一个表达式后不需要, 1x2=2,2x2=4 1x3=3,2x3=6,3x3=9 */ public class ChengFaBiao{ public static void main(String[] args){ for(int i = 1;i<=9;i++){ for(int j = 1;j<=i;j++){ System.out.print(j + "x" + i + "=" + j*i); if(j != i){ System.out.print(","); } } System.out.println(); } } }
break和continue 关键字:
break 用于结束当前循环.
当break在内层循环中时,可以使用标签跳出最外层的循环.
continue 跳出continue之后的语句.进入下一次循环.
产生随机数:
Math类的random()方法可以生成一个[0.0 - 1.0)之间的double值.(左闭右开区间)
Math 类是java程序默认导入的包,不需要显示导入. 直接使用即可.
如:
使用以下语句可以获取一个1-100之间的整型值:
int r = (int)(Math.random()*100)+1;
猜数字游戏:
程序中产生一个随机数(1-100),从键盘上录入一个数,和随机数进行比较,并给出大小提示,直到和随机数相等,退出程序.
1 //作业:给猜数字游戏加次数限制! 2 import java.util.Scanner; 3 4 public class HomeWork{ 5 public static void main(String[] args){ 6 7 int random = (int)(Math.random()*100) + 1; 8 9 Scanner s = new Scanner(System.in); 10 int count = 0; 11 while(count < 5){ 12 System.out.println("输入一个int类型的值:(1-100)"); 13 int r = s.nextInt(); 14 15 //比较这两个数 16 if(r > random){ 17 System.out.println("猜的数大了!"); 18 }else if(r < random){ 19 System.out.println("猜的数小了!"); 20 }else{ 21 System.out.println("猜对了!"); 22 break; 23 } 24 System.out.println("友情提示:您还有"+(4-count)+"次!"); 25 count += 1; 26 } 27 } 28 }
获取任意范围的随机数值的方法:
如:120-500之间的随机数
(int)(Math.random()*(500-120+1)+120);
/* 如何获取任意范围内的一个随机数? 例:120-500之间 (int)(Math.random()*(500-120+1)+120); 练习:键盘录入起始值和结束值,用程序获取一个期间的随机值! */ import java.util.Scanner; public class GetRandomDemo{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.println("输入起始值: "); int start = s.nextInt(); System.out.println("输入结束值: "); int end = s.nextInt(); // int r = (int)(Math.random() * (end - start + 1) + start); // System.out.println(r); } }
方法定义
修饰符 返回值类型 方法名(形参类型1 参数名1,形参类型2 参数名2,…){ 方法体; return[返回值]; }
修饰符: public static
返回值类型: java中的数据类型
方法名:符合命名规范
形参类型,形参名:符合命名规范
方法体:方法被调用时执行的语句
return: 表示方法的结束.
若返回值类型为void,return 后不能加任何东西,此时return;可以省略.
若返回值类型不为void,则return不能省略,而且其后要接一个和返回值类型匹配的返回值(变量,常量,表达式)
//无参,无返回值方法的定义 public static void test1(){ System.out.println("haha"); } //有参,无返回值方法的定义 public static void test2(String name){ System.out.println("Hello " + name); } //有参有返回值方法的定义 public static int add(int a,int b){ int sum = a + b; return sum; }
/* 修饰符 返回值类型 方法名(形参类型 形参名1,形参类型 形参名2,...){ 方法体; return [变量,常量,表达式]; } 注意: 方法定义在类中,和main方法平级!!!!方法不能嵌套定义!!! 修饰符 : 目前固定写法:public static 返回值类型:Java中的数据类型(基本数据类型,引用数据类型) 方法名:合法的标识符 形参列表:形参类型 形参名 方法体:方法被调用时,执行的语句(方法不调用,不会自动执行!!!) return:返回:表明方法结束.若返回值类型为void,return 后什么都不能加,此时return 可以省略. 若返回值类型不是void,return不能省略,其后一定要跟一个和返回值类型匹配的值(或可以隐式转换的类型值) */ public class MethodDemo{ public static void main(String[] args){ /* //方法不调用,不执行 //方法调用的格式: //方法名(实参):方法调用时传递的参数称为实参!!方法定义时写的参数称为形参!! printHello(); printHello(); //main方法的return省略了,因为返回值类型是void. return ; */ /* //调用有一个参数的方法 String name = "abc"; //调用方法时,传递类型和个数都匹配的参数. print(name); //可以直接传递常量 print("tom"); //传递表达式 print("hello" + "123"); */ //调用带参,带返回值 的方法 int a = 10; int b = 20; //实参之间用逗号分隔,不用加类型!!! int sum = add(a,b); System.out.println("a + b = " + sum); } //定义带参,带返回值的方法 public static int add(int a,int b){ //定义变量,接收两个数的和 int sum = 0; sum = a + b; //必须返回一个和返回值类型匹配的值(变量,常量,表达式也行!!!) return sum; //以下的语句正确,但是没有意义. // return a; // return 10; // return 1 + 3; } //定义方法,有一个参数,表示输出的内容 public static void print(String name){ // System.out.println("Hello " + name); } //自定义方法:在屏幕上输出一句话:世界你好 public static void printHello(){ //方法体 System.out.println("世界你好"); // // return ; } }
方法的调用
方法不调用不执行!!!
有返回值的方法的调用:
- 赋值或者直接打印
- 不理会返回值(单独调用)
返回值类型为void的方法:
只能单独调用!!!
方法之间是相互调用的关系:
自定义方法可以调用系统提供的方法,也可以调用自己定义的方法.
/* 方法的调用 1.有返回值方法的调用 ->使用返回值(赋值给变量,或者是打印) ->不理会返回值(单独调用) 2.没有返回值方法的调用 只能是单独调用 */ public class MethodDemo3{ public static void main(String[] args){ /* //把方法的返回值赋值给变量 int res =doubleNum(2); System.out.println(res); */ /* //直接放到打印语句中 System.out.println(doubleNum(9)); //System.out.println(18); */ //返回值为void类型的方法,只能单独调用 print(); //System.out.println(print()); 错误: 此处不允许使用 '空' 类型 //自定义方法之间相互调用 test2(); } //自定义方法 public static void test1(){ System.out.println("test1()被调用"); } public static void test2(){ //调用自定义方法 test1(); System.out.println("test2()被调用"); } //带返回值的方法 public static int doubleNum(int i){ System.out.println("你传递的参数是:" +i); return i*2; } public static void print(){ System.out.println("hello"); } }
方法的作用:
- 将有一定业务逻辑的代码封装在一起
- 实现了代码的复用,方法调用的次数越多,节省的代码量就越多
- 方便维护
/* 方法实现了代码的封装!! 主要的作用是实现了代码的复用!!! 提高代码的可维护性!! */ public class MethodDemo2{ public static void main(String[] args){ print99(); } //定义打印99乘法表的方法 public static void print99(){ for(int i = 1;i<=9;i++){ for(int j = 1;j<=i;j++){ System.out.print(j+"x"+i+"="+(i*j)+"\t"); } System.out.println(); } } }