java中 while 和 for 两种循环写法的使用场景

目录

场景

能否将声明变量写在while的小括号里?

能否将声明变量写在for的小括号里?


省流:

    BufferedReader br = new BufferedReader(null);for(String line; (line = br.readLine()) != null;){System.out.println(line);}

正文:

场景

通常写读取文件流的代码会这样写:

读文本: 

  BufferedReader br = new BufferedReader(null);String line;while ((line=br.readLine())!= null) {//通常会对内容做处理//xxxProcess.process();//这里直接用打印做演示System.out.println(line);}

读字节: 

    FileInputStream fileInputStream = new FileInputStream("文件路径");byte[] bytes = new byte[1024*10];int length = -1;while((length = fileInputStream.read(bytes)) != -1){//通常会对内容做处理//xxxProcess.process();//这里直接用打印做演示System.out.print(new String(bytes,0,length));}

能否将声明变量写在while的小括号里?

现在问题来了,能不能把声明变量的部分放进while的括号里,这样,在代码上就是一个整体,更加美观,方便阅读。像这样:

    while ((String line = br.readLine())!= null) { //报错System.out.println(line);}

自然不行,这样就编译报错了。

在while的小括号里不能声明变量,这和if语句的小括号里不能声明变量一样。但可以赋值。

while((int i=1) > 0) //报错if((int i=1) > 0) //报错int i = 0;
if((i=1) > 0) //正确int i = 0;
while((i=1) > 0) //正确

也就是说,在while,if 这样的语句,小括号里是做表达式的判断是否成立,即大于小于等于这类。顺带可以赋值。

能否将声明变量写在for的小括号里?

while( 表达式 )
{语句
}for(表达式1; 表达式2; 表达式3) 
{语句
}

声明变量属于一个表达式,判断大小属于一个表达式。

想要将两个表达式写在一个括号里,就得使用 for 语句了。例如:

    BufferedReader br = new BufferedReader(null);for(String line = br.readLine(); line != null; line = br.readLine()){System.out.println(line);            }

因为 for 语句的小括号里,是可以写3个表达式。第一个是声明变量,第二个是判断条件,第三个是循环赋值。

上面的写法还可以优化成这样:即将赋值语句合并在一起,放在判断表达式里(表达式2)。声明变量表达式就只声明一个变量(表达式1)。表达式3可以省略不写。

    BufferedReader br = new BufferedReader(null);for(String line; (line = br.readLine()) != null;){System.out.println(line);}

补充:for循环执行顺序

for(int i=0; i<10; i++){// 语句
}

执行的顺序如下:
第1步,执行表达式1int i=0;  声明变量,赋值为0。(这一步只会执行一次,即初次进入for的时候,后面的循环不再执行这一步)
第2步,执行表达式2i<10; 判断条件是否成立,如果是,进入下一步,如果否,不再执行后面步骤。
第3步,执行语句 : 执行花括号里的语句
第4步,执行表达式3i++ ,变量 i 自增
第5步,执行表达式2 :即回到第2步,判断条件成立,如果是,执行第3步,第4步。即循环执行2,3,4步。直到在第2步判断为否,就不再执行。
 

 ========================分割线========================

文章到此已经结束,以下是紫薯布丁

  BufferedReader br = new BufferedReader(null);
  String line;
  while ((line=br.readLine())!= null) {
        //通常会对内容做处理
        //xxxProcess.process();
        //这里直接用打印做演示
        System.out.println(line);
  }
 

     FileInputStream fileInputStream = new FileInputStream("文件路径");
    byte[] bytes = new byte[1024*10];
    int length = -1;
    while((length = fileInputStream.read(bytes)) != -1){
        //通常会对内容做处理
        //xxxProcess.process();
        //这里直接用打印做演示
        System.out.print(new String(bytes,0,length));
  }

    while ((String line = br.readLine())!= null) { //报错
        System.out.println(line);
    }
 

while((int i=1) > 0) //报错

if((int i=1) > 0) //报错

int i = 0;
if((i=1) > 0) //正确

int i = 0;
while((i=1) > 0) //正确

while( 表达式 )
{
  语句
}


for(表达式1; 表达式2; 表达式3) 
{
  语句
}

    BufferedReader br = new BufferedReader(null);

    for(String line = br.readLine(); line != null; line = br.readLine()){
        System.out.println(line);            
    }
 

    BufferedReader br = new BufferedReader(null);

    for(String line; (line = br.readLine()) != null;){
        System.out.println(line);
    }
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/57866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++学习之string实现

字符串 - C引用 (cplusplus.com)这里给出标准官方的string实现&#xff0c;可以看到设计还是较为复杂的&#xff0c;有成员函数&#xff0c;迭代器&#xff0c;修饰符&#xff0c;容量&#xff0c;元素访问&#xff0c;字符串操作等&#xff0c;将字符尽可能的需求都设计出来&a…

Jmeter(三十):并发测试(设置集合点)

集合点:让所有请求在不满足条件的时候处于等待状态。 如:我集合点设置为50,那么不满足50个请求的时候,这些请求都会集合在一起,处于等待状态,当达到50的时候,就一起执行。从而达到并发的效果。 那么Jmeter中可以通过同步定时器 Synchronizing Timer 来完成。 Number …

计算机竞赛 基于机器视觉的手势检测和识别算法

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

医学影像PACS系统源码,患者登记、图像采集和处理、图像存储、报告产生的影像系统

PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以数字化的方式将各种医学影像&#xff0c;如核磁共振、CT扫描、超声波等保存起来&#xff0c;并在需要时能够快速调取…

高忆管理:新手炒股入门零基础学?

炒股是一些人为了取得高额回报和更好的财政自由而进行的活动。但对许多新手而言&#xff0c;这是一个全新的领域&#xff0c;需求掌握许多根底常识才能够开始加入炒股商场。本文将为零根底的新手炒股入门供给一些主张和技巧&#xff1a; 一、学习根底常识 关于炒股入门的新手而…

spark内置函数笔记

spark常用的内置函数 一、统计函数 1. approx_percentile selectapprox_percentile( id, array(0.5, 0.7, 0.9), 1000) as res from (select explode(sequence(1,1000)) as id) aa ; [499,699,899] 二、数组函数 1. array -- 构造数据组 select array(1, 2, 3); [1,2,3]-- 数…

在ros中利用串口serial发布fdilink的gps话题

文章目录 介绍FDILink通讯协议数据帧组成数据包 数据处理打开串口在头文件中定义参数串口读取 代码运用依赖&#xff1a;使用&#xff1a; 源码 介绍 DETA100系列 是一个提供 GNSS/INS & AHRS 系统的模组&#xff0c;在最苛刻的条件下提供准确的位置、速度、加速度和姿态数…

Java抽象类——抽象类与普通类的区别

abstract抽象类 1、含义&#xff1a;类和类之间具有共同特征&#xff0c;将这些共同特征提取出来&#xff0c;就形成抽象类。。。 在 java 中&#xff0c;被 abstract 关键字修饰的类叫做抽象类&#xff0c;被abstract关键字修饰的方法叫做抽象方法。 抽象类本身是不存在的&…

量化面试-概率题

文章目录 一、题目1.糖果罐&#xff08;绿皮书79页&#xff09;2 折木棍&#xff08;绿皮书89页&#xff09;3 第一张ACE&#xff08;绿皮书95页&#xff09;4 n个均匀分布之和&#xff08;绿皮书95页&#xff09; 二、答案1. 糖果罐2 折木棍3 第一张ACE4 n个均匀分布之和 一、…

spring事件和线程池区别

Spring事件&#xff08;Spring Event&#xff09;和线程池&#xff08;Thread Pool&#xff09;是两个不同的概念。 Spring事件是Spring框架中的一种机制&#xff0c;用于在应用程序中实现发布-订阅模式。通过定义事件和监听器&#xff0c;可以在特定事件发生时&#xff0c;通…

pytest笔记: pytest单元测试框架

第一步&#xff1a;安装 和查看版本 pycharm settings 查看 第二步&#xff1a; 编写test_example.py def inc(x):return x1 def test_answer():assert inc(4) 5 第三步&#xff1a;在当前路径下执行pytest 命令 PS E:\data\web测试\Selenium3自动化测试实战——基于Pyth…

专题:曲面的切平面、法线

假设曲面方程为隐函数 F ( x , y , z ) 0 &#xff0c;点 M ( x 0 , y 0 , z 0 ) 是其上一点 又在点 M 处任意引一条在曲面上的曲线&#xff0c;设该曲线参数方程为&#xff1a; { x φ ( t ) y ψ ( t ) z ω ( t ) &#xff0c;且当 t t 0 时&#xff0c; x x 0 , y y…

Flink流批一体计算(18):PyFlink DataStream API之计算和Sink

目录 1. 在上节数据流上执行转换操作&#xff0c;或者使用 sink 将数据写入外部系统。 2. File Sink File Sink Format Types Row-encoded Formats Bulk-encoded Formats 桶分配 滚动策略 3. 如何输出结果 Print 集合数据到客户端&#xff0c;execute_and_collect…

鼎盛合方案——充气泵的原理和结构

充气泵是一种常见的气体压缩设备&#xff0c;它可以将空气或其他气体压缩成高压气体&#xff0c;用于充气、输送、压缩等工业和生活领域。充气泵的原理是利用机械或电动力量将气体压缩&#xff0c;使其体积减小&#xff0c;压力增大&#xff0c;从而达到充气的目的。 充气泵的…

力扣:74. 搜索二维矩阵(Python3)

题目&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返…

解决Linux报错:Swap file “xxxxxx.swp“ already exists

出现问题 Swap file “.models_conf.yaml.swp” already exists! 在 Linux 下 vim 编辑过程中&#xff0c;由于某种原因异常退出正在编辑的文件&#xff0c;再次编辑该文件时&#xff0c;会出现如下提示&#xff1a; 一个文件出现了带有.swp的副本文件的时候&#xff0c;会出现…

MySQL概述,架构原理

一.MySQL简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;后被oracle公司收购&#xff0c;MySQL是当下最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&#xff0c;MySQL是最好的RDBMS&#xff08;Relational Database Man…

Mybatis小记

目录 Mybatis第一个程序 xml文件 测试类 错误排查 Mybatis第一个程序 1.搭建实验数据库 2.导入MyBatis相关jar包 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建实体类、 6.编写Mapper接口类 7.编写Mapper.xml配置文件 8.编写测试类 对象传参只引用需要的属性就可…

【设计模式】Head First 设计模式——装饰者模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 动态地将责任附加到对象上&#xff0c;若要扩…

新生代与老年代

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;内存被划分为多个不同的区域&#xff0c;其中包括新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;。 新生代是用于存储新创建的对象的区域。大多数对象在创建后很快就变…