滚雪球学Java(15):节约时间,提升效率:掌握JavaSE-while循环语句的技巧与窍门

简介: 【4月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

在这里插入图片描述


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


@[toc]

前言

在Java编程语言中,有很多种类型的循环语句,其中while循环语句是一种基本的循环语句。它允许程序执行重复操作,直到某个条件被满足。在这篇文章中,我们将探讨while循环语句的基本原理和用法。

摘要

while循环语句允许代码重复执行,直到条件被满足。它可以用于处理需要重复执行的任务,例如计算数字之和或处理列表中的数据。在while循环中,条件被检查,如果条件为true,则代码块将继续执行。如果条件为false,则代码块将被跳过。

正文

while循环的语法

while循环语句的语法如下:

while (condition) {
   
    // statements
}
  • condition:循环的条件。如果这个条件是true,语句块会持续执行,否则循环会终止。
  • statements:要执行的语句块。

while循环的工作原理

while循环的工作原理很简单:当循环条件为true时,循环会一直执行,直到循环条件为false。

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

在这个例子中,我们初始化一个计数器i,并在while循环中使用它。循环条件是i < 5,当i小于5时,循环会一直执行。在每次循环中,我们打印出i的值,然后将i加1。当i等于5时,循环条件为false,循环结束。

while循环的注意事项

  1. 循环条件可以是任何返回布尔值的表达式,包括变量、常量、方法和关系运算符。如果条件为true,则执行循环代码块。如果条件为false,则跳过循环代码块,继续执行程序的下一部分。
  2. 如果循环条件一开始就为false,则while循环不会执行。
  3. while循环可能会无限循环,这通常是由于代码中的错误造成的。为了避免这种情况,我们应该始终确保循环条件最终会变为false。
  4. 在while循环中,不要忘记更新循环条件。如果你不这样做,循环可能会永远持续下去。
  5. 如果在循环中没有对计数器进行更新,或者更新的计数器值不符合循环条件,那么它可能会导致死循环。

while循环示例

下面是一个简单的例子,用while循环语句计算数字之和:

int i = 1;
int sum = 0;

while (i <= 10) {
   
    sum += i;
    i++;
}

System.out.println("The sum is " + sum);

在这个例子中,我们初始化一个计数器i和一个变量sum,然后在while循环中计算从1到10的数字之和。在每次循环中,我们将i添加到sum中,然后将i加1。当i等于11时,循环条件为false,循环结束。最后,我们将结果打印到控制台上。

代码解析:

  这段代码使用了while循环,计算了1到10的整数和。

  首先,定义了两个变量i和sum。变量i用于迭代,初始值为1,变量sum用于保存累加的结果,初始值为0。

  然后,进入while循环,判断条件为i <= 10,即i小于等于10时继续循环。

  在循环内部,使用sum += i来累加i的值到sum上,相当于sum = sum + i。然后,使用i++递增i的值,相当于i = i + 1。

  循环会重复执行,每次累加当前的i值到sum上,并且递增i的值,直到i大于10时跳出循环。

  最后,使用System.out.println输出结果,即"The sum is "加上最终的sum的值。

while循环的限制

while循环是一种非常有用的控制结构,但它也有一些限制。下面是一些while循环的限制:

  1. while循环可能会无限循环,这通常是由于代码中的错误造成的。
  2. while循环只能在已知循环次数的情况下使用。
  3. 如果循环体中没有更新循环变量的语句,那么while循环将会无限循环。因此,每个while循环都应该有一个明确的退出点。
  4. while循环可能会由于并发访问而出现问题,这是因为它们的执行不可预测。

代码方法介绍

计算数字之和

public static int sumNumbers(int n) {
   
    int i = 1;
    int sum = 0;
    while (i <= n) {
   
        sum += i;
        i++;
    }
    return sum;
}

这个方法使用while循环计算从1到n的数字之和,其中n是一个整数,由用户传递给方法。在循环中,我们将i添加到sum中,然后将i递增。当i等于n + 1时,循环终止,并返回计算的总和。

代码解析:

  这段代码的功能是计算从1到n的所有整数的总和,并返回这个总和。

  首先,在main方法中定义了一个名为sumNumbers的静态方法,该方法接受一个整数n作为参数,并返回一个整数类型的值。

  在方法体中,声明了两个整数变量i和sum,分别用于记录当前遍历到的整数和总和。

  然后,使用while循环来遍历从1到n的所有整数。在每一次循环中,将当前的整数值累加到sum中,并将i递增1。

  最后,返回计算得到的总和sum。

  总结:这段代码的功能是计算从1到n的所有整数的总和,并返回这个总和。

查找列表中的元素

public static boolean findElement(List<Integer> list, int target) {
   
    boolean found = false;
    int i = 0;
    while (!found && i < list.size()) {
   
        if (list.get(i) == target) {
   
            found = true;
        } else {
   
            i++;
        }
    }
    return found;
}

  这个方法使用while循环在一个整数列表中查找特定的元素。在循环中,我们将列表中的每个元素与目标元素进行比较,直到找到目标元素或到达列表的末尾。如果找到目标元素,我们将变量found设置为true,并终止循环。否则,我们将i递增,并继续查找下一个元素。最终,如果找到目标元素,方法将返回true,否则将返回false。

代码解析:

  上述代码是一个在列表中查找特定元素的方法。代码通过一个while循环来遍历列表,直到找到目标元素或者遍历完整个列表。具体分析如下:

  1. 声明一个布尔变量found,并将其初始化为false。用于判断是否找到目标元素。
  2. 声明一个整数变量i,并将其初始化为0。用于遍历列表的索引。
  3. 进入while循环,条件是found为false并且i小于列表的大小。
  4. 在循环中,通过调用list.get(i)方法获取列表中索引i处的元素,并与目标元素进行比较。
  5. 如果列表中索引i处的元素等于目标元素,将found设置为true,表示找到了目标元素。
  6. 如果列表中索引i处的元素不等于目标元素,将i增加1,继续遍历列表。
  7. 循环结束后,返回found的值,表示是否找到了目标元素。

  这个方法的时间复杂度是O(n),其中n是列表的大小。在最坏情况下,需要遍历整个列表才能找到目标元素。

测试用例

我们可以编写一些测试用例来测试while循环的正确性。下面是一些测试用例:

计算数字之和

@Test
public void testSumNumbers() {
   
    assertEquals(55, sumNumbers(10));
    assertEquals(3, sumNumbers(2));
    assertEquals(28, sumNumbers(7));
}

这些测试用例测试了sumNumbers()方法的正确性。我们分别测试了传递到方法中的不同参数,并验证方法返回的结果是否是预期的值。

代码解析:

  根据给定的代码,可以分析出以下几点:

  根据上述代码,可以看出这是一个单元测试方法,用来测试sumNumbers方法的准确性。测试方法中调用了sumNumbers方法,并对其返回结果进行断言。

  根据代码中的断言语句,我们可以推断出sumNumbers方法的功能是计算从1到给定参数的所有整数的和。因此,sumNumbers方法的实现可能如下:

public int sumNumbers(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}

  根据此实现,我们可以推断出测试方法的预期结果,即sumNumbers(10)应该等于55,sumNumbers(2)应该等于3,sumNumbers(7)应该等于28。因此,测试方法中的断言语句是正确的,用于验证sumNumbers方法的正确性。

查找列表中的元素

@Test
public void testFindElement() {
   
    List<Integer> list1 = Arrays.asList(1, 5, 8, 10, 15);
    assertTrue(findElement(list1, 5));
    assertTrue(findElement(list1, 10));
    assertFalse(findElement(list1, 7));

    List<Integer> list2 = Arrays.asList(2, 4, 6, 8, 10);
    assertTrue(findElement(list2, 4));
    assertTrue(findElement(list2, 10));
    assertFalse(findElement(list2, 12));
}

这些测试用例测试了findElement()方法的正确性。我们分别测试了传递到方法中的不同参数,并验证方法返回的结果是否是预期的值。

代码解析:

  根据给定的代码,可以分析出以下几点:

  1. 测试方法名称为testFindElement,说明该方法用于测试findElement方法。
  2. 测试方法使用@Test注解进行标记,表示该方法是一个单元测试方法。
  3. 测试方法内部定义了两个List对象list1和list2,并分别初始化为不同的整数集合。
  4. 调用了findElement方法,并使用assertTrue和assertFalse进行断言验证结果是否符合预期。
  5. 具体的断言逻辑如下:
    • 第一组断言:验证在list1中查找5和10应该返回true,查找7应该返回false。
    • 第二组断言:验证在list2中查找4和10应该返回true,查找12应该返回false。

  综上所述,该测试方法主要用于验证findElement方法的功能是否正确,并测试了不同的输入情况下的预期输出。

全文小结

在Java编程中,while循环语句是一种基本的循环语句。它允许程序执行重复操作,直到某个条件被满足。在while循环中,条件被检查,如果条件为true,则代码块将继续执行。如果条件为false,则代码块将被跳过。在使用while循环时,需要注意循环可能会无限循环的风险,因此我们需要始终确保循环条件最终会变为false。最后,我们编写了两个基本的示例来演示while循环的使用,然后编写了测试用例来测试这些示例的正确性。

总结

  在Java编程语言中,while循环是一种基本的循环语句,它允许程序根据条件重复执行一段代码块,直到条件不满足为止。在使用while循环时,我们需要注意循环条件的设置,避免造成无限循环的情况。同时,我们还需要确保在循环体内更新循环变量的值,以控制循环的执行。在使用while循环时,我们可以根据不同的需求写出不同的代码逻辑,例如计算数字的和、查找列表中的元素等。在编写代码的过程中,我们可以编写测试用例来验证代码的正确性。通过对while循环的学习和实践,我们可以更好地理解和运用这个循环语句,提高我们的编程能力。

  ... ...

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

  同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!


目录
相关文章
|
5天前
|
存储 Java 测试技术
滚雪球学Java(18):解密JavaSE中的堆栈:你真的了解Java内存吗?
【4月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
43 1
滚雪球学Java(18):解密JavaSE中的堆栈:你真的了解Java内存吗?
|
5天前
|
Java
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
【4月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
35 1
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
|
5天前
|
Java 测试技术 数据安全/隐私保护
滚雪球学Java(23):包机制
【4月更文挑战第12天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 3
滚雪球学Java(23):包机制
|
1天前
|
Java 编译器
滚雪球学Java(34):探究Java方法的神奇魔法和参数传递奥秘
【5月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
10 1
滚雪球学Java(34):探究Java方法的神奇魔法和参数传递奥秘
|
2天前
|
算法 搜索推荐 Java
滚雪球学Java(33):数组算法大揭秘:应用案例实战分享
【5月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 8
滚雪球学Java(33):数组算法大揭秘:应用案例实战分享
|
3天前
|
存储 Java 测试技术
滚雪球学Java(32):如何理解和实现稀疏数组
【5月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
14 1
滚雪球学Java(32):如何理解和实现稀疏数组
|
4天前
|
存储 Java 测试技术
滚雪球学Java(31):玩转多维数组:高效访问和遍历
【5月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
9 0
滚雪球学Java(31):玩转多维数组:高效访问和遍历
|
5天前
|
存储 Java 测试技术
滚雪球学Java(30):多维数组:定义和初始化一次搞定
【5月更文挑战第5天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
9 0
滚雪球学Java(30):多维数组:定义和初始化一次搞定
|
5天前
|
搜索推荐 算法 Java
滚雪球学Java(29):数组长度和排序算法:让你的程序更高效
【5月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
13 0
滚雪球学Java(29):数组长度和排序算法:让你的程序更高效
|
5天前
|
存储 Java
滚雪球学Java(28):轻松掌握数组:访问和遍历技巧
【5月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
13 2
滚雪球学Java(28):轻松掌握数组:访问和遍历技巧