`
Everyday都不同
  • 浏览: 724943 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

当for循环遇上return

阅读更多

先看下以下方法的打印结果以及返回值:

public static void main(String[] args) {
		System.out.println("返回值:" + testResult());

	}
	
	public static boolean testResult() {
		for(int i=1; i<=5; i++) {
			System.out.println("-------------->开始:" + i);
			if(i == 3) {
				return true;
			}
			System.out.println("-------------->结束:" + i);
		}
		return true;
		
	} 

 打印结果:

-------------->开始:1

-------------->结束:1

-------------->开始:2

-------------->结束:2

-------------->开始:3

返回值:true,说明在for里return一个值的话相当于退出循环。

 

1)假设我们对testResult方法进行重构,抽离出for里面的逻辑到一个单独的方法:

public static boolean testResult() {
		for(int i=1; i<=5; i++) {
			test1(i);
		}
		return true;
		
	} 
	
	public static  void  test1(int i) throws NullPointerException{
		System.out.println("-------------->开始:" + i);
		if(i == 3) {
			return;
		}
		System.out.println("-------------->结束:" + i);
	}

 同样放在main方法中。只不过testResult方法的for循环里直接调的重构的方法,打印结果:

-------------->开始:1

-------------->结束:1

-------------->开始:2

-------------->结束:2

-------------->开始:3

-------------->开始:4

-------------->结束:4

-------------->开始:5

-------------->结束:5

返回值:true

 

这说明,test1(i)方法用return;语句试图走到i=3的时候中断; 但是循环还是走完了。

 

2)不妨给for循环里调用的方法一个返回值,如下:

public static boolean testResult() {
		for(int i=1; i<=5; i++) {
			return test2(i);
		}
		return true;
		
	} 

public static  boolean  test2(int i) throws NullPointerException{
		System.out.println("-------------->开始:" + i);
		if(i == 3) {
			return true;
		}
		System.out.println("-------------->结束:" + i);
		return false;
	}

 打印结果如下:

-------------->开始:1

-------------->结束:1

返回值:false

 

这说明,在for里调用一个有boolean返回值的方法,会让方法还没走到i=3就断掉,返回一个boolean值。

 

3)在for循环里需要根据条件return一个boolean值时。for循环里面的代码若需要重构成一个方法时,应该是有返回值的,但这个返回值不能是boolean,我们不妨用String代替,而在for循环里面用返回的String标记来判断是否退出循环~~

改造如下:

public static boolean testResult() {
		for(int i=1; i<=5; i++) {
			String flag =  test3(i);
			if("yes".equals(flag)) {
				return true;
			}
		}
		return true;
		
	} 

public static  String  test3(int i) throws NullPointerException{
		System.out.println("-------------->开始:" + i);
		if(i == 3) {
			return "yes";
		}
		System.out.println("-------------->结束:" + i);
		return "no";
	}

 打印结果:

-------------->开始:1

-------------->结束:1

-------------->开始:2

-------------->结束:2

-------------->开始:3

返回值:true

 

说明达到了最初未对for循环里面的代码进行重构时的效果~  

 

以上的小例子是我在对类似代码进行重构时报错的经验小结,因为实际代码里,for里面的代码重复了好几次,但是又因为for里面的代码需要根据判断条件return一个boolean值。在重构的过程中,我先是改成test1(i),再改成test2(i), 最后改成test3(i)才该对,达到未重构时的效果。

 

希望各位同仁们遇到for循环里面需要return;或return true/false;时,一定要谨慎哈~

分享到:
评论

相关推荐

    java跳出循环break;return;continue使用

    java跳出循环break;return;continue使用 . java跳出循环break;return;continue使用 . java跳出循环break;return;continue使用

    android中几种for循环的效率

    在网上看了一些for循环的效率问题,发现基本上都是一些理论的东西,且大多都是Copy来的,前后文自相矛盾。自己做了一个例子,来看看他们的效率 1.最慢 private long getTime1() { long time = 0; int count = 0;...

    for 循环练习题目

    ### for 循环练习知识点详解 #### 1. 肇事车辆车牌号问题 - **目标**: 使用 `for` 循环找出符合特定条件的四位数车牌号码。 - **条件**: - 前两位数字相同。 - 后两位数字相同,并且与前两位不同。 - 该四位数是...

    C语言嵌套for循环详细讲解

    在C语言中,嵌套for循环是一种非常重要的编程结构,它允许我们在一个循环体内部再包含另一个循环。这种技术在处理二维数组、矩阵运算、图形绘制、递归算法以及复杂数据结构遍历等方面有着广泛的应用。现在,我们将...

    python中for循环变量作用域及用法详解

    return [lambda x: x**i for i in range(1,5,2)] print([f(3) for f in foo()]) 伙伴们,你们认为这里产生的结果是什么呢?我们再来看下这题的变体: 代码:2 def foo(): functions=[] for i in range(1,5,2): ...

    Smarty模板中的for循环

    ### Smarty模板中的for循环知识点详解 #### 一、背景与问题描述 在使用Smarty模板引擎进行Web开发的过程中,经常会遇到需要在模板文件中实现循环逻辑的情况。然而,默认情况下,Smarty只提供了针对数组的循环功能...

    JDK1.5中增强for循环

    ### JDK 1.5 中增强 for 循环详解 #### 引言 随着 Java 技术的不断发展,为了提高开发效率、简化代码编写并增强可读性,JDK 1.5 引入了一系列的新特性,其中就包括了增强 for 循环(Enhanced For Loop),也被称作...

    c语言中的for循环程序流程图

    ### C语言中的for循环程序流程图详解 #### 一、引言 在计算机编程领域,循环结构是构建复杂逻辑的基础之一。其中,`for`循环因其简洁性和灵活性而在多种编程语言中广泛应用,尤其是在C语言中。本文将详细介绍C语言...

    FOR循环语句的翻译程序设计(递归下降法、输出四元式)

    在编程语言的编译器设计领域,FOR循环语句的翻译是至关重要的环节。这个过程涉及到将高级语言的FOR循环转换成低级机器语言或中间表示形式,以便计算机能够理解和执行。这里我们将深入探讨递归下降法和输出四元式在...

    第二题_C语言程序_for循环语句使用_数组从键盘输入_

    在C语言编程中,`for`循环语句是一种非常常用且强大的控制流程结构,它用于重复执行一段代码,直到满足特定条件为止。本题重点在于使用`for`循环语句处理数组并从键盘获取用户输入。下面将详细介绍这两个知识点。 *...

    JAVA练习题(for循环练习题等)

    通过`for`循环打印斐波那契数列的前100项。斐波那契数列定义为:第一项与第二项均为1,后续每一项都是前两项之和(如1, 1, 2, 3, 5, 8, 13, 21...)。 ```java int first = 1, second = 1; for (int i = 0; i ; i++...

    Java中break、continue、return在for循环中的使用

    Java中break、continue、return在for循环中的使用 Java是一种流行的编程语言,它的循环控制语句在编程中扮演着非常重要的角色。在Java中,break、continue、return是三种常用的循环控制语句,它们在for循环中的...

    VC2010中异步多线程窗体for循环输出

    为了防止这种情况,我们需要了解如何在VC2010中实现异步多线程,并在for循环中进行安全的数据输出。 首先,理解多线程的基本概念至关重要。多线程是指在一个进程中同时执行多个不同的代码段,每个代码段称为一个...

    C语言for循环语句教案.pdf

    当`i`的值达到101时,循环条件`i 不满足,循环结束。 接下来,我们分析一下for循环语句的变体。for循环可以嵌套使用,即在一个for循环的循环体内再使用一个for循环,这在处理多维数据结构时非常有用。此外,for循环...

    C语言for循环源代码.rar

    本资源"**C语言for循环源代码.rar**"显然是一个包含有关C语言for循环实现的源代码文件。下面,我们将详细讨论C语言中的for循环及其在实际编程中的应用。 for循环是C语言中三种基本循环结构之一(另外两种为while和...

    C语言中的for循环:语法、使用方法和注意事项.docx

    C语言中的for循环 C语言中的for循环是一种常用的循环结构,它允许程序按照一定规律重复执行一段代码块。for循环的基本语法包括初始化表达式、循环条件表达式和循环后表达式三个部分。下面将详细介绍for循环的语法、...

    7.4 for循环 Project1.zip

    这个描述中的链接指向了CSDN博客上的一篇文章,尽管我们无法直接访问该文章,但可以基于常规的`for`循环知识进行解释。 `for`循环通常用于执行固定次数的操作。它的基本语法结构通常包括初始化、条件检查和迭代三个...

    在for循环中依次执行异步操作

    这适用于单条数据的处理场景,如果是在for循环中处理多条数据,依次处理每条数据的异步操作呢? 思路:还是利用Promise的then()来进行链式操作,每次循环的时候往Promise后添加一个新的then(),这样就可以保证上一个...

    c语言for循环PPT学习教案.pptx

    C语言的`for`循环是程序设计中一种非常重要的控制结构,它允许程序员简洁地实现重复执行一段代码,直到满足特定条件为止。本教程将详细解释`for`循环的使用和特性。 首先,`for`循环通常由三个表达式组成,它们在...

Global site tag (gtag.js) - Google Analytics