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
    .... */  
    

(一) 打印图形

  1. 打印正方形 要求输出如下图形
*  *  *  *  *
*  *  *  *  *
*  *  *  *  *
*  *  *  *  *
*  *  *  *  *

分析:

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正常执行是按照代码的顺序从上往下执行,但是调用到方法时,会跳转的函数对应的函数体中,当方法执行完毕后,会返回函数调用出,继续往下执行。

(一) 图解

image-20220706185642932

案例代码

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语句会立即返回

  1. 在非void函数中,务必保证至少有一个return语句能够正确执行(条件分之、循环语句中的return不一定执行)
posted @ 2022-09-23 21:17  小牛同志  阅读(77)  评论(0)    收藏  举报