【JavaSE】之流程控制与方法(二)

简介: 【JavaSE】之流程控制与方法(二)

for循环


  • for循环可以使一些循环结构变得更简单
  • for循环是支持迭代的一种通用格式,是最有效、最灵活的循环结构
  • for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化;布尔表达式;更新){
//代码语句
}

代码示例:

package com.wang.structure;
public class ForDemo01 {
    public static void main(String[] args) {
        int a=1;//初始化条件
        while(a<=100){//条件判断
            System.out.println(a);//循环体
            a+=2;//迭代
        }
        System.out.println("while循环结束!");
        //   初始化   //条件判断  //迭代
        for (int i=1;i<=100;i++){
            System.out.println(i);
        }
        System.out.println("for循环结束!");
        //死循环
        for(; ;){}
    }
}


关于for循环的几点说明:

最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。

然后检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。

执行一次循环后,更新循环控制变量;

再次检测布尔表达式。循环执行上面的过程。


在Java5中引入了以中国主要用于数组的增强型for循环

  • 语法


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


代码示例

package com.wang.structure;
public class ForDemo05 {
    public static void main(String[] args) {
        int[] numbers={10,20,30,40,50};//定义了一个数组
        for (int i=0;i<5;i++){
            System.out.println(numbers[i]);
        }
        System.out.println("==================================================");
        //遍历数组的元素
        for(int x:numbers){
            System.out.println(x);
        }
    }
}

5.Break & Continue


break


  • 在任何循环语句的主体部分,均可用break控制循环流程。break用于强行退出循环,不执行循环中剩余的语句(也在switch语句中使用)
package com.wang.structure;
public class BreakDemo01 {
    public static void main(String[] args) {
        int i=0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==30){
                break;
            }
        }
        System.out.println("123");
    }
}

continue

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

package com.wang.structure;
public class ContinueDemo {
    public static void main(String[] args) {
        for(int i=1;i<100;i++){
            if(i%10==0){
                System.out.println();
                continue;
            }
            System.out.print(i+"\t");
        }
    }
}

goto关键字


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


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


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


代码示例:

package com.wang.structure;
public class LabelDemo {
public static void main(String[] args) {
    //打印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+"\t");
    }
    }
}


二、Java方法


1.何谓方法?


System.out.println(),到底是个什么?答:解释为调用系统System的标准输出对象out中的方法println。

Java方法是语句的集合,它们在一起执行一个功能。

方法是解决一类问题的步骤的有序集合。

方法包含于类型或者对象中。

方法在程序中被创建,在其他地方被引用。

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只能完成一个功能,这样利于我们后期的拓展。

方法的命名规则?答:方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。示例:demoFunction,也就是所谓的驼峰命名规则。


2.方法的定义


Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段。

方法包含一个方法和一个方法体,下面是一个方法的所有部分:


修饰符:修饰符,可选,告诉编译器如何调用方法,定义该方法的访问类型。

返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型,有些方法执行所需的操作,但没有返回值,在这种情况下,returnValueType的关键字是void。

方法名:是方法的实际名称,方法和参数表共同构成方法签名。

参数类型:参数是一个占位符,当方法被调用时,传递值给参数,这个值被称为实参或者变量,参数列表是指方法的参数类型、顺序和参数的个数,参数是可选的,方法可以不包含任何参数。形参:在方法被调用时用于接收外界的数据。实参:被调用方法时实际传给方法的数据。

方法体:方法体包含具体的语句,定义该方法的功能。


方法的格式:

修饰符 返回值类型 方法名(参数类型 参数名){
    方法体
    return 返回值;   //返回值要与返回值的类型对应
}


3.方法的使用


例:使用方法实现加法运算,以及大小比较。


public class Method {
    public static void main(String[] arg){
        Scanner a = new Scanner(System.in);
        Scanner b = new Scanner(System.in);
        //两种调用方法
        //方法1:
        int sum = add(a.nextInt(),b.nextInt());
        System.out.println(sum);
        //方法2:
        System.out.println("大小比较");
        System.out.println(Max(a.nextInt(),b.nextInt()));
    }
    //方法
    public static int add(int a,int b){
        return a+b;
    }
    public static int Max(int a,int b){
        int max = 0;
        if (a == b){
            System.out.println("两个数相等");
            return 0;
        }
        if (a < b){
            max = b;
            return max;
        }else {
            max = a;
            return max;
        }
    }
}

4.方法的重载


重载就是在一个类中,有相同的函数名称,但形参不同的函数。

方法的重载规则:方法的名称必须相同;参数列表必须不同(个数不同、类型不同、顺序不同);方法的返回类型可以相同,也可以不相同;仅返回类型不同不足以成为方法的重载。

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

语法格式

public static int add(double a, double b){ return a+b; }
public static int add(int a, int b){ return a+b; }
public static int add(int a, int b, int c){return a+b+c;}

代码示例

public class java {
    public static void main(String[] arg){
        //此为方法的重载。简单解释为方法名相同,但值可能不同不起冲突实现重载的功能。
        //方法重载的规则:
        //   .方法名必须相同
        //   .参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
        //   .方法返回值类型可以相同也可以不相同
        //   .仅仅返回类型不同不足以成为方法的重载
       int sum = add(1,2);
       int sum1 = add(1,2,3);
       System.out.println(sum);
       System.out.println(sum1);
    }
    public static int add(int a, int b){ return a+b; }
    public static int add(int a, int b, int c){
        return a+b+c;
    }
}


5.可变参数


  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
  • 在方法的声明中,在指定参数类型后加一个省略号(…)。
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
  • 代码示例:
// 找出最大值
public class java {
    public static void main(String[] args){
        java12 max = new java12();
        max.printMax(45,78,96,74,52,63,82,71,93);
    }
    //可变参数
    public void printMax(double... i){
        if (i.length == 0){
            System.out.println("You didn't type the numbers");
            return;
        }
        //比较大小
        double max = i[0];
        for (int j=1 ; j<i.length ; j++){
            if (i[j] > max){
                max = i[j];
            }
        }
        System.out.println("The maximum number is "+max);
    }
}

6.递归


递归就是自己调用自己。


递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两个部分:


递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。

递归体:什么时候需要调用自身方法。


注意点: 适用于小计算;能不使用递归尽量不使用; 自己调用自己。


代码示例:

// 计算5的阶乘。
public class java {
    public static void main(String[] arg){
        /*递归:
        适用于小计算。
        1.能不使用递归尽量不使用
        2.自己调用自己*/
        java n = new java();
        System.out.println(n.diGui(5));
    }
    public int diGui(int i){
        if (i == 1){
            return 1;
        }else {
            return i*diGui(i-1);
        }
    }
}

后记


Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

相关文章
|
3月前
|
Java
Java 流程控制15道练习题(选择&循环)
Java 流程控制15道练习题(选择&循环)
80 10
|
4月前
|
Java
Java程序的流程控制
程序执行顺序经典三类: 1. **顺序结构**: 代码从上至下依次执行。 2. **分支结构**: - `if/else`: 根据条件选择执行路径。 - `switch`: 通过匹配值选择分支,需注意`break`避免穿透现象。 3. **循环结构**: 控制代码重复执行,如`for`, `while`, `do...while`等。 (注:markdown格式不支持内嵌卡片或图片,故摘要中未包含原文中的图片信息。)
153 7
|
6月前
|
Java
java基础--程序流程控制
- **for循环案例**:求1-100的和及奇数和。 - **while循环**:未知循环次数时使用,基础案例:打印&quot;Hello World&quot;五次。 - **do-while循环**:至少执行一次,区别于先判断的for和while循环。 - **循环嵌套**:一个循环内含另一循环,例如打印矩形。 - **跳转语句**:`break`用于提前结束循环,`continue`跳过当前循环迭代。 ```
|
6月前
|
Java 程序员
java基础--程序流程控制(1)
学习编程中的分支结构,主要涉及if和switch。if分支用于条件判断,常见于体温检测和支付场景,有三种形式:单if、if-else和if-else if...else。switch通过比较值来选择执行代码块,适用于星期安排等案例。选择if或switch取决于判断类型:范围判断适合if,逐值比较适合switch。使用switch注意数据类型限制(如byte、short、int、char及JDK5后的枚举和JDK7后的String)、case值的唯一性和字面量特性,以及避免忘记break导致的穿透现象。
|
5月前
|
Java
Java基础8-一文读懂Java 代码块和执行顺序(二)
Java基础8-一文读懂Java 代码块和执行顺序(二)
65 0
|
5月前
|
Java
Java基础8-一文读懂Java 代码块和执行顺序(一)
Java基础8-一文读懂Java 代码块和执行顺序(一)
40 0
|
6月前
|
存储 Java
滚雪球学Java(13):掌握JavaSE-Switch条件语句,提高编程效率
【4月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
77 0
滚雪球学Java(13):掌握JavaSE-Switch条件语句,提高编程效率
|
人工智能 Java C#
Java之四 表达式和流程控制
Java之四 表达式和流程控制
45 0
|
Java Linux C语言
【JavaSE】逻辑控制语句
顺序结构比较简单,即程序按照代码书写的顺序一行一行执行下去。
JavaSE:第三章:程序流程控制
JavaSE:第三章:程序流程控制
JavaSE:第三章:程序流程控制