---恢复内容开始---

一、for循环的掌握

   语法格式:

for( 初始化语句A   ;  条件判断B  ;  循环后功能语句C){

//循环体D

}

  for的执行流程:

    整个for循环结构中的  A 只会执行一次

    循环第一次:Aà B(true)àDàC

  第二次:      B(true)àDàC

  第三次:      B(true)àDàC

   …

   第n次:        B(false)  结束整个循环

  

  • 举个例子演示一下,for 打印 1-10
  •   

    1) 回顾下学过的while循环示例

       

    2) 用for循环实现同样的功能

    3) 注意定义的计数器i的作用域

for 常见面试题  

    

  1)

     上面的代码打印的值?

   循环了几次?

     判断了几次?

     最后i的值是多少?

  2)

    上面的代码打印的值?

     循环了几次?

    判断了几次?

    最后i的值是多少?

  练习

    1. 用for循环计算1-10的 积(也就是 10的阶乘)

      

二、嵌套循环 

  循环嵌套  循环里面还有循环,可以嵌套多层,不同的循环结构相互之间也可以嵌套。

  把循环里面的代码理解成一段普通的代码。

  练习: 在控制台打印 5行*,每行5个星 *****

---恢复内容结束---

一、for循环的掌握

   语法格式:

for( 初始化语句A   ;  条件判断B  ;  循环后功能语句C){

//循环体D

}

  for的执行流程:

    整个for循环结构中的  A 只会执行一次

    循环第一次:Aà B(true)àDàC

  第二次:      B(true)àDàC

  第三次:      B(true)àDàC

   …

   第n次:        B(false)  结束整个循环

  

  • 举个例子演示一下,for 打印 1-10
  •   

    1) 回顾下学过的while循环示例

       

    2) 用for循环实现同样的功能

    3) 注意定义的计数器i的作用域

for 常见面试题  

    

  1)

     上面的代码打印的值?

   循环了几次?

     判断了几次?

     最后i的值是多少?

  2)

    上面的代码打印的值?

     循环了几次?

    判断了几次?

    最后i的值是多少?

  练习

    1. 用for循环计算1-10的 积(也就是 10的阶乘)

      

二、嵌套循环 

  循环嵌套  循环里面还有循环,可以嵌套多层,不同的循环结构相互之间也可以嵌套。

  把循环里面的代码理解成一段普通的代码。

  练习: 在控制台打印 5行*,每行5个星 *****

  1. 写上相同的5个  System.out.println(“*****”);
  2. 优化上面的代码,使用一个执行5次的循环,循环主体:System.out.println(“*****”)
  3. 希望一个一个的打印*(想想在控制台怎么实现单个打印*)
  4. 使用循环优化上面的代码

建议实际开发中不要嵌套太深

初学者而言,先学会从简单的代码优化开始(真正的理解到循环的作用,和语法)

练习:

在控制台打印如下的效果

*

**

***

****

*****

*****

****

***

**

*

*

**

***

****

*****

*

* *

* * *

* * * *

* * * * *

PrintStar

练习

  1. 求1-5的 的阶乘和(1!+2!+3!+4!+5!)
package com.javaBase;

public class Factorial {
int ji = 1;
int sum = 0;
public static void main(String[] args) {
Factorial factorial = new Factorial();
factorial.printFactorial();
}
public Integer printFactorial(){
for (int i=1;i<=5;i++){
ji *= i;
System.out.println(ji);
sum +=ji;
}
System.out.println(sum);
return sum;
}
}

Factorial

三、循环控制语句

1. break

l break  表示终止   当前 这一层循环

示例:

1) 循环10次,打印计数器i的值

2) 假设当遇到i的值是3的时候,终止整个循环

3) 每一次循环,都应该判断的值是否是3,如果是,执行一个break;

u 怎么测试终止 当前这一层 ?

使用嵌套循环测试

  • 给循环添加标签(名字)

语法:用break 名字

结束当前这一层的循环结构(标签名字必须符合Java中标识符的命名规则)

练习

1) 求出100以内前5个2的倍数的数字

//循环1-100

int n = 0;

for(int i=1;i<=100;i++){

if(i%2==0){

//打印

n++;

}

if(n==5){

break;

}

}

2. continue

l continue  跳过本次循环,继续下一次循环

场景:

一周每天重复做的事情就是 :打代码

但是第5天不想打代码,第6 和第7天仍然继续打代码,怎么实现?

练习

1) 计算出1—20之间所有不能被3整除的整数的总和  大于(或等于)100的第一个数字

for(){

判断不能被3整除 ,求总和sum

if( i %3  != 0 ){

sum+=i;

}

再有一个判断sum大于(或等于)100   用break 终止循环

if(sum>=100){

//打印sum    i

break;

}

}

3. return

l return  表示结束当前的方法

  • 使用刚才break的例子,修改为return 看看有什么区别

注意:break  continue  return  紧跟的后面不能够有其它的代码,因为永远执行不到

package com.javaBase;

import java.sql.SQLOutput;

public class LoopController {
public static void main(String[] args) {
LoopController loopController = new LoopController();
//loopController.breakController();
//loopController.continueController1();
//loopController.continueController2();
loopController.returnController();
}
/**
* 1)求出100以内前5个2的倍数的数字
*/
//循环1-100
int n=0;
public void breakController(){
for (int i=1;i<=100;i++){
if (i%2==0){
n++;
System.out.println(n);
}
if (n==5){
break;
}
}
}
/**
* continue 跳过本次循环,继续下一次循环
* 场景:
* 一周每天重复做的事情就是 :打代码
* 但是第5天不想打代码,第6 和第7天仍然继续打代码,怎么实现?
*/
public void continueController1(){
for (int i = 1;i<=7;i++){
if (i==5){
continue;//跳出这次循环
}
System.out.println(i+"写代码");
}
}
/**
* 1)计算出1—20之间所有不能被3整除的整数的总和
* 大于(或等于)100的第一个数字
*/
public void continueController2(){
int j=0;
for (int i = 1;i<=20;i++){
if (i%3 !=0){
j += i;//跳出这次循环 }else {
continue;
}
if (j>=100){
break;
}else {
System.out.println(j);
}
}
}
/**
* return 表示结束当前的方法
* 使用刚才break的例子,修改为return 看看有什么区别
*/
public void returnController(){
int j=0;
for (int i = 1;i<=5;i++){
if (i==3){
return;
}
System.out.println(i);
}
System.out.println("方法结束");
}
}

loopController

四、总结三种循环语句

3种循环结构的语法

while(条件){

执行这里面的内容

}

do{

}while(条件)

for(初始值;判断条件;循环后执行语句){

循环体里面做的事情

}

  1. 循环真正作用
  2. 目前而言,需要熟练的使用每一种循环完成基本的操

六、引入

  思考:我们第一次听说方法是什么时候?

  示例:

  设计一段代码,计算1-10的和(举例代码演示)

  我们还有个需求,计算1-1000的和,怎么做?

  比较上面的代码区别,都比较类似,唯一不同的地方是在哪里?

  

  希望设计一段代码,能够同时满足求1-n的和,怎么办?

    我们可以用  方法  来解决

图示如下:

  1. 什么是方法   

    方法,也叫 函数,但是一般在java中都叫 方法(同学们在其他地方看到 函数 ,它其实就是指 方法)。

    方式   就是一个能够独立完成某个功能的一段代码。

    方法  看成是一个整体,比如这个圈,既然可以看成一个整体,那么我们这个圈里是不是可以包含 1-n 的求和的代码

          

  

  2. 怎么设计 

    需求:设计一个方法,完成计算任意两个整数的和的功能!

    1) 拷贝一个主方法,然后修改   

    2) 完成此方法的功能

      我们就是此方法的设计者,设计这个方法需要哪些步骤呢?

      我们需要做什么事情?(计算任意两个整数的和)

      计算哪两个数?

        定义两个变量准备用来接收使用者给我的两个整数

        这两个变量定义在方法的()中

        我们在设计的时候,两个变量是没有具体数据的,我们可以当成这两个变量是有数据的

  3. 定义语法

修饰符  返回类型 方法名字(数据类型  变量名,数据类型 变量名,……){

在方法的代码块区域返回结果值的语法: return  返回和方法返回类型相同的值;

}

    方法的 返回类型 和 方法名字 必须定义

    在一个类中不能 同时存在  相同名字 和 参数类型个数一模一样  的方法

    jvm是怎么来判断 相同名字 和参数类型的方法?--》

    方法签名:方法名+参数列表(和参数的名字没有关系,只是和参数的类型 ,个数,顺序有关)

  4.怎么使用

    上面计算2个数的和的方法怎么调用?在哪里调用?

    主方法:是程序的入口,放在主方法里,jvm可以间接的调用我们定义的方法。

    使用(调用)方法,我们现在是使用者,对于使用者而言,不用关心方法内部是如何计算的(应该把方法看成一个整体)

      方法有static修饰    : 类名.方法名()

      方法没有static修饰: 对象名.方法名()--(后面面向对象讲解)

      如果调用的方法和被调用的方法同时在一个类中,并且同时有static 或者同时没有static:

      方法名()

       方法被调用的时候才会执行

      

      可以重复的调用执行(多次调用相互之间没有关系,各自调用各自的)

   5.常见问题

    1) 调用的时候参数不一致

    

    2) static main 方法调用一个非static方法

    3) 直接写方法名add没有括号和参数;

    

    

     

   6.总结  

    在一个类中,用static修饰的方法只能调用 同样是static修饰的方法

    实参列表 和 形参参数个数和类型必须一一对应。

    在一个类中不能定义一样的名字 和 相同形参类型和个数 的方法。

    把一个方法看成是能够独立完成某个功能的一段代码,把一个方法看成是一个整体

    从两方面去看:

    1) 使用者

      a) 不用关心方法内部的代码是如何写

      b) 如何使用(调用)

      c) 方法形式参数(所需要关心)

      d) 方法的执行结果

    2) 设计者

      a) 实现什么功能,要做什么事情

      b) 形式参数:用户在调用方法的时候传入什么已知条件

      c) 执行完毕的结果如何处理

  7.练习

    1) 定义一个方法,接受三个int参数,计算打印最大的一个数。

    

七、方法return

  1)  引入

    设计一个方法求任意两个整数的和,我们之前代码是怎么写的?

    在上面的方法基础之上,计算3个整数的和

      a) 使用这个方法,先计算两个的和sum,再调用一次,然后sum和另外一个数求和

        从代码上看,这个求和的方法只能够传入两个

      b) 希望上面的方法计算完毕之后不打印,得到计算之后的一个结果值。

        那我们可以用 return 来返回结果值…

  2)示例   

    要求:计算2个整数的和,然后把计算的结果返回给调用者。

    1) 方法里写上return 返回值(定义个sum变量存放求和的结果并返回)

      return  sum;//表示把sum变量中的值返回给调用者

    2) 修改返回类型

      方法的内部返回了一个数据,数据的类型是int,所以void 修改成 int

      注意:把sum变量中的值返回给调用者,不是返回sum这个变量

    3) 方法里面返回的变量sum 值,是否可以在调用的方法里面直接使用?

      方法里面的变量sum只能在所在方法里面才能访问,其他方法不能访问

    4) 怎么获得结果值?

       把add方法这个整体  看成是 此方法计算完毕的结果值

      a) 直接把  方法整体  放在打印语句中打印(把方法看成是整体)

      b) 可以定义一个变量接收 方法结果值

      c) 把方法整体看成是一个值,参与运算

     思考:直接打印 方法整体,还是  把方法结果值定义一个变量存起来再去打印 ,哪种方式更好一些?

    

     思考:计算1+3的和,直接每次计算的时候打印方法,还是单独定义一个变量接收起来 哪种方式更好;

  

  3) 常见问题

    ①定义了一个有返回类型的方法,但是调用的时候没有放在打印语句中

    例如:

     add(1,2);

        

     ②在调用方法的里面去打印输出 被调用方法里面的变量  

      add方法中定义的返回变量sum的值,这个sum局部变量 只能在add方法内部访问,而

      主方法中无法访问(作用域不同)

        

     ③没有返回任何东西,也就是返回类型为 void,去打印输出(或者使用变量接收)方法返回值

    

    

④定义了add(int x,int  y) 是有返回值的方法,但是调用的的方式有问题,例如

1)错误调用方式一

public static void main(String [] args){

add(1,2);

System.out.println(add(1,2));

/*

上面的代码什么问题? 多调用了一次,两次add(1,2) 调用了2次,是独立的调用了两次,第一次调用的时候可以使用一

个变量去接收,然后打印变量即可

*/

}

⑤错误调用方式二

public static void main(String [] args){

add(1,2);

System.out.println(add);

/*

上面的代码什么问题? 打印的是一个变量add,这个变量然而并没有定义,和方法名字搞混淆了

*/

}

    ⑥如果一个方法的返回类型不是void,那么要求(不管方法里面做了什么事情)都必须返回

    一个和 返回值类型匹配的值

public static int add(){

if(true){

return 1;

}

}

    上面的代码:编译器只看结构,不看其中的值,编译器看到的是一个if结构

public static int add(){

if(true){

return 1;

}else{

return 2;

}

}

上面的代码:编译器看到结构是if-else,始终都会执行一部分,而这2部分都有return

public static int add(){

if(true){

return 1;

}else if(false){

return 2;

}

}

  4)应用场景

    一般来说就是如果需要方法返回一个结果值,那么就return(一般做一些数学运算都需要使用返回值)

    设计一个方法:打印用户传入的字符串,思考是否需要返回值?

public static void print(String str){

System.out.println(str);

}

八、方法重载

  1)引入   

  • 定义一个add方法,求2个整数的和
  • 举例,定义不同方法,满足下面要求:

    2个整数和,3个整数和,4个整数的和…….

    

    这种方式不好,感觉不容易记住;方法名太多;-- 但是可以通过方法重载来修改上面的例子

  2)概念    

     方法重载:是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数列表(类型   个数  顺序)。

    如果一个类中存在了多个名字一样的方法而编译不报错,那么肯定就是重载

     重载理解:①方法名相同

    ②参数类型,参数个数,参数顺序 只要有一个不同

    注意:方法重载和参数名字没有关系。和 返回值类型 和 修饰符也没有关系。

  3)作用

    ①多个方法写成重载方法有什么好处?方便记忆

    ②典型的方法重载示例w(多个不同类型);

  4)应用场景  

    ava.io.PrintStream

    java.io.PrintStream包里面的println方法 ,方法名字都一样,参数类型不同

    

java基础复习(四)的更多相关文章

  1. Java基础复习(四)

    1.Integer与int的区别 int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默 ...

  2. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  3. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  4. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  5. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  6. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  7. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  8. 《Java基础复习》-控制执行流程

    最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...

  9. 《Java基础复习》—常识与入门

    突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...

  10. Java基础复习之数组

    Java基础复习之:数组 简介 数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理 一维数组 一维数组的声明与初始化 int[] id ...

随机推荐

  1. Mysql中主键与索引

    摘自: https://www.cnblogs.com/wicub/p/5898286.html 一.什么是索引?索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没 ...

  2. Deepin 系统安装并配置PHP开发环境

    Deepin是由武汉深之度科技有限公司开发的Linux发行版.Deepin团队基于Qt/C++(用于前端)和Go(用于后端)开发了的全新深度桌面环境(DDE),以及音乐播放器,视频播放器,软件中心等一 ...

  3. 《JavaScript 高级程序设计》

    第 3 章 基本概念 3.5.2 位操作符 ECMAScript 中所有数值都是以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值.而是先将 64 位的值转换成 32 位的整 ...

  4. Tensorflow创建和读取17flowers数据集

    http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...

  5. WPF与DevExpress之——实现类似于安装程序下一步下一步的样式窗体

    话不多说先上图  点击下一步  跳转到第二页  项目准备: 1.DevExpress 19/18/17(三个版本都可以) 2.Vs2019 3..Net framework>4.0 项目结构: ...

  6. 【python+selenium自动化】图像识别技术在UI自动化测试中的实际运用

    引言: 目前在图像识别方面的自动化测试框架有很多,其中比较有名的是airtest,主要做手机端的游戏自动化测试(http://airtest.netease.com/) 因为没有实际把airtest运 ...

  7. python基础数据类型补充以及编码的进阶

    一.基本数据类型的补充循环列表改变列表大小的问题#请把列表中索引为基数的元素写出l1=[1,2,3,4,5,6]for i in l1: if i%2!=0: print(i)结果:135二:基本数据 ...

  8. Trailing Zeroes (III) LightOJ - 1138 不找规律-理智推断-二分

    其实有几个尾零代表10的几次方但是10=2*510^n=2^n*5^n2增长的远比5快,所以只用考虑N!中有几个5就行了 代码看别人的: https://blog.csdn.net/qq_422797 ...

  9. C语言第七周作业

    每个单词的最后一个字母改成大写 函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写.(这里的"单词"是指由空格隔开的字符串). 函数接口定义: void fun( ...

  10. HIbernate入门3

    HIbernate的一对多操作: 1. 创建实体类:一个Customer类(客户类)和一个LinkMan类(联系人),两者的关系为:一个客户中可能有多个联系人(关于一对多的实体类之间的关联,不做详细介 ...