2021-7-9

4.循环语句

while循环

在Java5中引入了一种主要用于数组的增强型for循环。 while是最基本的循环,它的结构为:

while(布尔表达式){
   //循环内容
}

只要布尔表达式为true,循环就会一直执行下去。 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。少部分情况需要循环一直执行,比如服务器的请求响应监听等。 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死奔溃! 思考:计算1+2+3+...+100=?

        //输出1到100
       int i=0;
       while(i<100){
           i++;
           System.out.println(i);
      }
        //计算1+2+3+...+100=?
       int i=0;
       int sum=0;
       while(i<100) {
           i++;
           sum+=i;
      }
       System.out.println(sum);

do...while循环

对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件也至少执行一次。 do...while循环和while循环相似,不同的是,do...while 循环至少会执行一次。

do{
   //代码语句
}while(布尔表达式);

while和do-While的区别: while先判断后执行。

dowhile是先执行后判断!

        int i=0;
       int sum=0;
       do {
          sum+=i;
          i++;
      }while(i<=100);
       System.out.println(sum);

for循环

虽然所有循环结构都可以用while或者do...while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单。

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环执行的次数是在执行前就确定的。语法格式如下:

for(初始化;布尔表达式;更新){
//代码语句
}

练习1:计算0到100之间的奇数和偶数的和

        int a=1;
       int b=0;
       int sum=0;
       int sum1=0;
       for (a=1;a<=100;a+=2){
           sum+=a;
      }
       System.out.println(sum);
       for (b=0;b<=100;b+=2){
           sum1+=b;
      }
       System.out.println(sum1);
  }
        int sum=0;
       int sum1=0;
       for (int i=0;i<=100;i++){
           if(i%2==0){
               sum+=i;
          }else{
               sum1+=i;
          }
      }
       System.out.println(sum);
       System.out.println(sum1);

 

练习2∶用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个练习

        int i=0;
       for (i=0;i<=1000;i++){
           if(i%5==0){
               System.out.print(i+"\t");
          }
           if(i%15==0){
               System.out.println();
               System.out.print("\n");
          }
           //printLn   输出会换行
           //print 输出不换行
      }

3:打印九九乘法表

    for(int j=1;j<=9;j++) {
          for (int i = 1; i <= j; i++) {
              System.out.print(j + "*" + i + "=" + (j * i)+"\t");
          }
          System.out.println();
      }
   1*1=1
   2*1=2 2*2=4
   3*1=3 3*2=6 3*3=9
   4*1=4 4*2=8 4*3=12 4*4=16
   5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
   6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
   7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
   8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
   9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

增强for循环

这里我们先只是见一面,做个了解,之后数组我们重点使用

Java5引入了一种主要用于数组或集合的增强型for循环。

Java 增强for循环语法格式如下:

for(声明语句:表达式){
   //代码句子
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

        //遍历数组元素
int[] numebers={10,20,30,40,50};
       for (int i=0;i<numebers.length;i++){
           System.out.println(numebers[i]);
      }  
//简化后
int[] numebers={10,20,30,40,50};
       for(int i: numebers){
           System.out.println(i);
      }

10
       20
       30
       40
       50

5.break和continue

break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

关于goto关键字

goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子---带标签的break和continue.

“标签”是指后面跟一个冒号的标识符,例如Labe🏷

对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另-个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。

        int i=0;
       while (i<100){
           i++;
           System.out.println(i);
           if(i==10){
               System.out.println("跳出循环");
               break;
          }
      }
       System.out.println("执行循环外");
        int i=0;
       while (i<100){
           i++;
           if(i%10==0){
               System.out.println(i);
               continue;
          }
           System.out.print(i);
      }
        //打印101--150之间的质数
       int count=0;
       outer:for(int i=101;i<150;i++){
           for(int j=2;j<i/2;j++){
               if(i%j==0){
                   continue outer;//跳到外面
              }
          }
           System.out.print(i+" ");
      }
101 103 107 109 113 127 131 137 139 149

6.练习:打印三角形

       //打印三角形     5行
       for (int i=1;i<=5;i++){
           for(int j=5;j>=i;j--){
               System.out.print(" ");
          }
           for(int j=1;j<=i;j++){
               System.out.print("*");
          }
           for(int j=1;j<i;j++){
               System.out.print("*");
          }
           System.out.println( );
      }
    *
   ***
  *****
 *******
*********

三、方法

1.何谓方法

System.out.println(),那么它是什么呢? Java方法是语句的集合,它们在一起执行一个功能。 ◆方法是解决一类问题的步骤的有序组合 ◆方法包含于类或对象中 ◆方法在程序中被创建,在其他地方被引用 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。 ◆回顾:方法的命名规则?

    public static void main(String[] args) {
       //int sum=add(1,2);
       //System.out.println(sum);
       test();
  }
   public static int add(int a,int b){
       return a+b;
  }

2.方法的定义及调用

Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。 返回值类型∶方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。 ◆形式参数:在方法被调用时用于接收外界输入的数据。 ◆实参:调用方法时实际传给方法的数据。 ◆方法体:方法体包含具体的语句,定义该方法的功能。

修饰符 返回类型    方法名(参数类型    参数名){
  ...
  方法体    
  ...
  return 返回值;
}

调用方法:对象名.方法名(实参列表) Java支持两种调用方法的方式,根据方法是否返回值来选择。当方法返回一个值的时候,方法调用通常被当做一个值。例如:

int larger=max(10,20);

如果方法返回值是void,方法调用一定是一条语句。

System.out.println("hello world")
    public static void main(String[] args) {
       int max= max(2,3);
       System.out.println(max);
  }
   public static int max(int aa,int bb){
       return aa>bb?aa:bb;
       //return 也有中止方法的作用
  }

课后拓展了解:值传递(Java)和引用传递

3.方法重载

◆重载就是在一个类中,有相同的函数名称,但形参不同的函数。 ◆方法的重载的规则: ◆参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。方法的返回类型可以相同也可以不相同。 ◆仅仅返回类型不同不足以成为方法的重载。

◆实现理论:

◆方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

    public static void main(String[] args) {
       //int max= max(2,3);
       double max= max(2.0,3.0);
       System.out.println(max);
  }
   public static int max(int aa,int bb){
       return aa>bb?aa:bb;
       //return 也有中止方法的作用
  }
   public static double max(double aa,double bb){
       return aa>bb?aa:bb;
       //return 也有中止方法的作用
  }

4.命令行传参

有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

public class CommandLine{
   public static void main(String args[]){
       for(int i=0;i<args.length;i++){
           System.out.println("arg["+i+"]:"+args[i]);
      }
  }
}

5.可变参数

JDK 1.5开始,Java支持传递同类型的可变参数给一个方法。 在方法声明中,在指定参数类型后加一个省略号(…)。 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

    public static void main(String[] args) {
       //调用可变参数的方法
       printMax(34,3,3,2,56.5);
       printMax(new double[]{1,2,3});
  }
   public static void printMax( double... numbers) {
       if (numbers.length == 0) {
           System.out.println("No argument passed");
           return;
      }
       double result = numbers[0];
       //排序!
       for (int i = 1; i < numbers.length; i++) {
           if (numbers[i] > result) {
               result = numbers[i];
          }
      }
           System.out.println("The max value is" + result);
  }
    public static void main(String[] args) {
      Demo03 demo03=new Demo03();
      demo03.test(1,1,2,3,4,5,6,7,8,9,10);
  }
   public void test(int t,int... i){
       System.out.println(i[4]);
  }

6.递归

A方法调用B方法,我们很容易理解! 递归就是:A方法调用A方法!就是自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。 递归结构包括两个部分: 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。 递归体:什么时候需要调用自身方法.

    public static void main(String[] args) {
       //递归求阶乘
       System.out.println(f(4));
  }
   public static int f(int n){
       if(n==1){
           return 1;
      }else{
           return n*f(n-1);
      }
  }

 

posted @ 2021-07-09 14:47  tao10  阅读(62)  评论(0)    收藏  举报