Java从入门到放弃04—for/while/do while循环结构/控制跳转语句/方法
01 循环结构
- 循环结构:在满足循环条件的情况下,反复执行一段代码。注意:在合适的时候需要把循环判断条件修改为false,结束循环。否则会形成死循环。
- 分类:for循环/while循环/do while循环
02 for循环结构
- for循环结构的判断语句结果为boolean类型。
- for循环结构的格式(示例:求数字1–100的和)
class ForPractice01{
public static void main(String[] args){
int sum=0;
for(int i=1;i<=100;i++){//(表达式)中先要初始化表达式语句;给出判断条件语句;再给出控制条件语句
sum+=i;//如果判断条件语句的返回值是true则执行循环体语句,如果是false,结束循环。
}
System.out.println("1--100的和为:"+sum);
}
}
- for循环结构的死循环格式:
for(;;){
...//循环体语句
}
- 练习a.在控制台输出所有的水仙花数,,并统计水仙花数的个数。(水仙花数是指一个三位数,其各位数字的立方和等于该数本身)。
class ForPractice02{
public static void main(String[] args){
int count=0;//用来统计水仙花个数的变量
for(int i=100;i<=999;i++){
int a=i/100;//i个百位
int b=i/10%10;//i的十位
int c=i%10;//i的个位
if(i==a*a*a+b*b*b+c*c*c){
System.out.print(i+"\t");//在一行打印输出的水仙花数,'\t'表示空出一个tab的距离,注意该语句和System.out.println()的区别
count++;//每输出一个水仙花数,count+1
}
}
System.out.println("一共有"+count+"个水仙花数");
}
}
运行结果:153 370 371 407 一共有4个水仙花数
- 练习b.需求:请用’*'输出一个5行5列的直角三角形。
- 循环嵌套的重要结论(外循环控制行数,内循环控制列数)
class ForPractice03{
public static void main(String[] args){
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){//每行打印的星星递增
System.out.print("*");
}
System.out.println("\t");//每行输出相应个数的*之后,执行换行。
}
}
}
运行结果:*
**
***
****
*****
- 练习c.需求:请在控制台输出九九乘法表
class ForPractice04{
public static void main(String[] args){
int multi=0;//定义变量积
for(int i=1;i<=9;i++){//外循环结构控制行数
for(int j=1;j<=i;j++){//内循环结构控制列数
multi=i*j;
System.out.print(j+"*"+i+"="+multi+"\t");
}
System.out.println("\t");
}
}
}
03 while循环结构
- while循环结构语法(示例:求数字1–100的和)
class WhilePractice01{
public static void main(String[] args){
int i=1;//初始化条件语句
int sum=0;
while(i<=100){//判断条件语句
sum+=i;//循环体语句;判断条件语句返回值为true,则执行循环体语句。
i++;//控制条件语句
}
System.out.println("1--100的和为:"+sum);
}
}
运行结果:1--100的和为:5050
- while循环结构的死循环格式:
while(true){
...//循环体语句
}
- 执行流程:执行初始化条件语句;>>执行判断条件语句;>>返回值为true>>执行循环体语句>>执行控制条件语句>>直到返回值为false,结束循环。
04 do while循环结构
- do while循环结构语法(示例:求数字1–100的和)
class DoWhilePractice01{
public static void main(String[] args){
int sum=0;
int i=1;//初始化条件语句
do{
sum+=i;//执行循环体语句
i++;//控制条件语句
}while(i<=100);//判断条件语句,返回值为true,继续循环;返回值为false,结束循环
System.out.println("1--100的和为:"+sum);
}
}
- 执行流程:执行初始化条件语句;>>执行循环体语句;>>执行控制条件语句>>执行判断条件语句>>直到判断条件语句返回值为false,结束循环。
04 for/while/do while的区别
- 区别1:do while循环结构先执行循环体语句,因此在整个循环过程中,至少执行一次循环体。而for/while必须先执行判断条件语句,才能决定是否执行循环体语句。
- 区别2:如果想在循环结束后,继续使用控制条件的那个变量(如i),则选择while循环,否则用for循环。
- 实际开发中,为了让变量更早的释放内存,提高内存的使用效率,应当优先考虑使用for循环结构,其次是while循环结构,最后是do while循环结构。
05 控制跳转语句
- Java中使用break/continue/return来实现控制语句的跳转和中断。
a.break
- 功能:1.退出单层循环 2.退出多层循环 (很少使用)
- 应用场景:在选择结构switch语句中/在循环语句中。
- 注:离开使用场景的存在是没有意义的。
class BreakPractice01{
public static void main(String[] args){
int count=0;//定义一个变量,用来统计控制台一共输出了几次
for(int i=1;i<=10;i++){
if(i%3==0){//当i=3时,执行break;跳出for循环
break;
}
System.out.println("控制台输出了"+i);//当i%3!=0时,执行该语句。当i=3时,跳出循环。
count++;
}
System.out.println("控制台总共输出了"+count+"次");
}
}
运行结果:控制台输出了1
控制台输出了2
控制台总共输出了2次
b.continue
- 功能:跳出一次循环,执行下一步操作。
- 应用场景:在循环语句中
- 注:离开使用场景的存在是没有意义的。
class ContinuePractice01{
public static void main(String[] args){
int count=0;//定义一个变量,用来统计控制台一共输出了几次
for(int i=1;i<=10;i++){
if(i%3==0){
continue;//当i%3=0时,只跳出一次循环
}
System.out.println("控制台输出了"+i);
count++;
}
System.out.println("控制台总共输出了"+count+"次");
}
}
运行结果:控制台输出了1
控制台输出了2
控制台输出了4
控制台输出了5
控制台输出了7
控制台输出了8
控制台输出了10
控制台总共输出了7次
c.return
- 功能:退出一个方法。(在方法的使用里有详细笔记)
06 方法
-
功能:对一段功能的逻辑封装,用以实现重复调用。
-
定义:方法就是完成特定功能的代码块。定义在类中,方法和方法之间属平级关系,不能相互嵌套。
-
注意事项
方法不调用不执行 方法与方法是平级关系,不能嵌套定义 方法定义的时候参数之间用逗号隔开 方法调用的时候不用再传递数据类型 如果方法有明确的返回值,一定要由return带回一个值
-
语法:
权限修饰符 状态修饰符 返回值类型 方法名(参数类型1 参数名1,参数类型2 参数名2){ 方法体;//完成功能的代码 return 返回值;//结束方法以及返回方法指定类型的值 }
-
方法的格式详细说明
修饰符 比较多,后面会详细介绍。目前使用 public static 返回值类型 用于限定返回值的数据类型//eg.void:无明确返回值类型 int:明确返回值类型为int 方法名 就是一个名称,它的存在是为了方便我们调用方法 参数类型 限定调用方法时传入参数的数据类型 参数名 是一个变量,接收调用方法时传入的实际参数参数 方法体 完成功能的代码 return 结束方法以及返回方法指定类型的值 返回值 就是功能的结果,由return带回,带回给调用者 //一个方法一旦明确返回值类型,必须调用return关键字返回与明确类型一致的结果。
-
方法的调用:方法必须调用才会执行。调用方法有三种:1.单独调用(多用于没有返回值的图形输出) 2.赋值调用(多用于有返回值的方法调用) 3.输出调用
以MethodPractice01程序说明调用方法的语法:
import java.util.Scanner;//导入Scanner包 class MethodPractice01{ public static void main(String[] args){ System.out.println("-----------执行主方法---------------");//main表示主方法,主方法是一个程序入口,由JVM实现调用。一个类中只能有一个主方法。 show();//单独调用了无返回值的show()方法 Scanner sc=new Scanner(System.in);//new一个新的对象 System.out.println("请输入第一个数字"); int a=sc.nextInt();//录入数据 System.out.println("请输入第二个数字"); int b=sc.nextInt();//录入数据 int sum=add(a,b);//(赋值调用)在调用方法时,传入的参数,叫做实际参数,实参可以是常量也可以是变量 /*调用了有返回值的add()方法,注意:当我们去调用一个有参数的方法时,必须传入与之相对应的参数(参数个数要对应,数据类型要对应)*/ System.out.println("两个数字之和为:"+sum);//输出调用 show();//单独调用了无返回值的show()方法 } public static void show(){ System.out.println("-----------调用了show()------------"); } public static int add(int a,int b){ /*定义括号里面的参数被称为形式参数,多个形式参数需要用逗号隔开。形式参数的作用是调用方法时,接收传过来的实际参数。*/ int sum=a+b; System.out.println("-----------调用了add()------------"); return sum; } } 运行结果:-----------执行主方法--------------- -----------调用了show()------------ 请输入第一个数字 1 请输入第二个数字 2 -----------调用了add()------------ 两个数字之和为:3 -----------调用了show()------------
-
方法重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同,与返回值无关。 调用的时候,会根据参数个数和参数类型去匹配
以求和问题为例,分别输入不同参数个数,或不同参数类型做对比解释方法重载
class MethodPractice02{ public static void main(String[] args){ add(1,2);//输入的参数为两个,参数类型都为int add(1,2.0);//输入的参数为两个,参数类型分别为int和double add(1,2,3);//输入的参数为三个,参数类型都为int } public static int add(int a,int b){ int sum=0; sum=a+b; System.out.println("调用了两个int类型的add方法"); System.out.println("和为"+sum); return sum; } public static double add(int a,double b){ int sum=0; sum=a+b; System.out.println("调用了一个int类型和一个double类型的add方法"); System.out.println("和为"+sum); return sum; } public static int add(int a,int b,int c){ int sum=0; sum=a+b+c; System.out.println("调用了三个int类型的add方法"); System.out.println("和为"+sum); return sum; } } 运行结果:调用了两个int类型的add方法 和为3 调用了一个int类型和一个double类型的add方法 和为3.0 调用了三个int类型的add方法 和为6