JavaLearnDay05
(四)死循环(无限循环)
- 编码形式:
//1. while死循环
while( true ){
}
//2. for 死循环
for( ; ; ){
}
//3. do...while 死循环
do{
}while( true );
注意:所有循环中如果缺少对循环遍历的操作,也会造成死循环
六、有限次数循环
(一)计算10的阶乘
- 阶乘:即n的阶乘=123....n的结果
- 代码:
int result = 1;//保留累乘结果
for( int i=2; i<=10; i++){
result *= i;//将 i 变量累乘到result变量中
System.out.println(" result = "+result );//打印每次累乘结果
}
System.out.println("最终结果:"+result);//打印最终结果
(二)输入一个整数n,输出n的所有因子
- 因子:如果a除以b没有余数,那么我们称b就是a的因子。(因子的范围在1~数字本身)
- 代码:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//读入整数n
for(int i =1; i<=n; i++){
if(n%i==0)//如果n%i结果为 0,证明没有余数
System.out.println( i );
}
(三)输入一个正整数n,判断该数是不是质数,如果是质数输出"n是一个质数",否则输出"n不是质数"
- 质数:一个整数除1和本身外没有其他因子,那么这个数就称为质数
- 代码:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//读入整数n
int flag = true;//控制if语句是否执行
for(int i =2; i<n; i++){
if(n%i==0){//如果n%i结果为0,证明还有其他因子,不是质数
System.out.println("n不是质数");
flag = false;//控制下面if
}
}
if(flag)System.out.println("n是质数");
(四)求四叶玫瑰数
- 四叶玫瑰数:所谓四叶玫瑰数,是指一个四位数 abcd,如果满足 a4+b4+c4a4+b4+c^4a4+b4+c4= abcd,则 abcd 是四叶玫瑰数。
- 代码:
for( int abcd = 1000; abcd<=9999; i++ ){
int a = abcd/1000;//获取千位
int b = abcd/100%10;//获取位
int c = abcd/10%10;//获取十位位
int d = abcd%10;//获取个位
if(a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d == abcd){
System.out.println( abcd +"\t是四叶玫瑰数" );
}
}
//正确答案
/*
1634 是水仙花数
8208 是水仙花数
9474 是水仙花数 */
- 穷举法:确定结果的大致范围,逐一验证,找到符合条件的结果
七、嵌套循环
嵌套循环的执行流程:外层循环执行一次,内层循环执行n次
-
例:
for(int i=1; i<=3; i++){ System.out.println("外层循环:"+i); for(int j=1; j<=5; j++){ System.out.println("\t内层循环:"+j); } } /* 输出结果: 外层循环:1 内层循环:1 内层循环:2 内层循环:3 内层循环:4 内层循环:5 外层循环:2 内层循环:1 内层循环:2 内层循环:3 内层循环:4 内层循环:5 .... */
(一) 打印图形
- 打印正方形 要求输出如下图形
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
分析:
i变量表示行,从1开始到5结束,每次换一行
j表示每一行中的列,从1开始到5结束,每次打印一个 * 号,两边可添加空格,不换行
将循环打印*号的步骤再循环执行几次,就形成了 嵌套循环
j=1 j=2 j=3 j=4 j=5
i=1 * * * * *
j=1 j=2 j=3 j=4 j=5
i=2 * * * * *
j=1 j=2 j=3 j=4 j=5
i=3 * * * * *
j=1 j=2 j=3 j=4 j=5
i=4 * * * * *
j=1 j=2 j=3 j=4 j=5
i=5 * * * * *
代码:
//
for(int i=1;i<=5;i++){
for(int j = 1;j<=5;j++){
System.out.print(" * ");
}
System.out.println();
}
2.打印直角三角形
要求输出如下图形
*
* *
* * *
* * * *
* * * * *
代码
for(int i=1; i<=5; i++){
//内层循环控制列,打印不换行
for(int j=1; j<=i; j++){
System.out.print(" * ");
}
System.out.println();//换行
}
打印空心矩形效果如下
*************************
* *
* *
* *
*************************
(二) 打印99乘法表
- 安装以下规则,输出99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
分析:
在打印图形的基础上,利用变量数值完成运算
j=1
i=1 1*1=1
j=1 j=2
i=2 1*2=2 2*2=4
j=1 j=2 j=3
i=3 1*3=3 2*3=6 3*3=9
j=1 j=2 j=3 j=4
i=4 1*4=4 2*4=8 3*4=12 4*4=16
...
代码:
//外层循环控制行
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();//换行
}
八、流程控制语句
(一) break
-
作用:跳出switch或循环结构
例:
for( int i=1; i<=10; i++ ){ System.out.println( i ); if( i == 5 ) break;//跳出循环 } 输出结果:1/2/3/4/5 -
使用break 跳出嵌套循环
标记:for(....){//外层循环 for(....){//内层循环 if(...) break 标记; } } 标记需要符合标识符语法规范 -
例:求阶乘超过10000的当前数
int result = 1;//保留阶乘结果
int i =1; //定义循环变量
while( true ){
result*=i;//计算阶乘结果
if( result>=10000 ) break;//跳出循环
i++;//循环变量自增
}
System.out.println("阶乘超过10000的当前数为:"+i );
(二) continue
-
作用:跳出本次循环,继续下次循环
例:
for( int i = 1; i<=10; i++){ if( i== 5 ) continue;//跳过本次循环,继续下次循环 System.out.println( i ); } 输出结果:1/2/3/4/6/7/8/9/10例:计算100以内所有偶数的和
int sum = 0;//存储累和结果 for (int i = 1; i <= 100; i++) { if( i%2!=0 )continue;//跳出本次循环 sum += i; } System.out.println( sum );//打印结果
三 函数
一、 场景
实例代码
class Hello {
public static void main(String args){
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("登鹳雀楼");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("白日依山尽");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("黄河入海流");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("欲穷千里目");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("更上一层楼");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
}
}
上面代码的问题:
1.代码冗余:程序中存在大量重复的代码,
2.可维护性不好
3.程序的可扩展性不是太好
二、 函数概念
实现特定功能的一段代码,可以反复使用,减少冗余代码,提高程序可重用性与可维护性
三、 定义的位置
定义在类内部,Class对应的括号中,不能进行嵌套定义,和main函数是同级关系,
四、 语法
public static void 函数名(){
函数体
}

函数名命名规则:首字符小写,后面每个单词首字符大写,见名知意
函数体:功能代码的具体实现。
五、函数的使用
(一) 使用的语法
方法名();
案例:
public class Test{
public static void main(String[] args){
function1(); //直接在调用处使用函数名()的方式进行调用
}
public static void funciton1(){
System.out.println("Hello World");
}
}
(二) 函数的执行流程
java正常执行是按照代码的顺序从上往下执行,但是调用到方法时,会跳转的函数对应的函数体中,当方法执行完毕后,会返回函数调用出,继续往下执行。
(一) 图解

案例代码
public class FunctionTest1{
public static void main(String[] args){
System.out.println("我准备调用函数了。。。。");
funciton1();
System.out.println("函数调用完毕。。。。");
}
public static void funciton1(){
System.out.println("funciton1()函数开始执行。。");
System.out.println("funciton1()函数执行完毕。。");
}
}
六、参数
-
作用:函数在完成功能过程中需要外部提供数据时,使用参数明确诉求,接收数据。
-
场景代码分析:
public class FunctionTest2{ public static void main(String[] args){ eat1(); } public static void eat1(){ System.out.println("吃东西"); } } //上面函数调用会输出 吃东西 ,限制我们要修改以下需求,需求如下, //将吃东西的内容,用参数传递到函数中, public class FunctionTest2{ public static void main(String[] args){ eat1(); eat2("饺子"); //我们通过调用有参方法,将数据传递到对应方法中, } public static void eat1(){ System.out.println("吃东西"); } public static void eat2(String food){ System.out.println("吃"+food); } }
(一) 参数
-
概念:定义在函数中的一种特殊的局部变量,表示函数向使用者索要的数据,可以是多种或多个
-
形参语法:
定义参数语法: 参数类型 参数名,如果有多个中间用,隔开 pubilc static void 函数名(参数类型 参数名1,参数类型 参数名2...){ } -
实参列表:调用函数时的参数表,内部定义的参数称为实参(实际参数),满足函数诉求实际有值的数据
-
案例:
public class FunctionTest2{ public static void main(String[] args){ eat1(); eat2("饺子"); //我们通过调用有参方法,将数据传递到对应方法中, eat3("张三","饺子"); } public static void eat1(){ System.out.println("吃东西"); } public static void eat2(String food){ System.out.println("吃"+food); } public static void eat3(String name,String food){ System.out.println(name+"喜欢吃"+food); } public static void eat4(String name,int number,String food){ System.out.println(name+"吃了"+number+"个"+food); } }
七、返回值类型与返回值
-
返回值类型
作用:约束函数可以返回的数据类型,可以使用任何已知类型,
void:表示该方法没有返回值
例:
// 返回值类型为int public static int sum(int a,int b){ } -
return 关键字
作用:将于返回值类型对应的结果返回给调用者,在调用位置生成结果;也可以用于流程控制语句,当函数遇到return时会跳出函数。
语法:
return; //用户返回值类型为void类型的函数中,控制函数的执行流程 return 数据(返回值); //用于在返回值类型不是void类型函数中,将数据(结果)返回到函数调用位置例:
//1. 设置返回值类型 public static int sum(int a , int b){ int result = a + b;//计算结果 //2.计算结果,配合return语句将结果返回 return result;//返回计算结果 }
-
返回值
概念:通过return语句返回的结果,也是函数执行的结果,最终会生成在调用函数的位置。
例:调用者接收函数返回值
//功能使用者(用户)获取结果 public static void main(String[]args){ //方式1:直接使用 System.out.println( sum(102,200) ); //方式2:使用变量接收再使用 int r = sum(102,200); System.out.println( r ); } public static int sum(int a , int b){ int result = a + b;//计算结果 return result;//返回计算结果 }注意:1. 函数遇到return语句会立即返回
- 在非void函数中,务必保证至少有一个return语句能够正确执行(条件分之、循环语句中的return不一定执行)

浙公网安备 33010602011771号